DFS-全排列

题目描述

     排列与组合是常用的数学方法。 
先给一个正整数 ( 1 < = n < = 10 ) 
例如n=3,所有组合,并且按字典序输出: 
1 2 3 
1 3 2 
2 1 3 
2 3 1 
3 1 2 
3 2 1 

#include<bits/stdc++.h>
using namespace std;
int n,print[10]={0};
int visit[10]={false};
void dfs(int now,int sum_num){
    if(sum_num==n){
        for(int i=0;i<sum_num;i++){
            printf("%d ",print[i]);
        }
    printf("\n");
    return;//递归边界
    }else{
        for(int i=1;i<=n;i++){
            if(visit[i]==false){
                print[sum_num]=i;
                visit[i]=true;
                sum_num++;
                dfs(i,sum_num);//选取当前的数
                //回溯
                visit[i]=false;
                sum_num--;
            }
        }
    }
}
int main(){
    while(scanf("%d",&n)!=EOF){
        dfs(0,0);
    }
    return 0;
}
  • 用cin cout 会超时
posted @ 2020-04-10 22:19  岩烧店的烟味弥漫  阅读(121)  评论(0)    收藏  举报