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 会超时

浙公网安备 33010602011771号