51Nod - 2060 全排列
输入一个整数n(n <= 9),输出1、2、3、······、n这n个数的全排列(按照字典序输出)。
Input
一个整数n
Output
多行,每行表示一种排列,行内使用空格分隔相邻两数。
Sample Input
3
Sample Output
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
思路:
dfs,对于当前位置找之前未使用的数字,然后递归到下一位置。然后对每一位置的搜索都是从1到n,结果符合字典序的要求。
代码:
#include <iostream>
using namespace std;
int a[15];
void dfs(int n,int cur){
if(cur==n){
for(int i=0;i<n;i++){
cout<<a[i]<<' ';
}
cout<<endl;
}
for(int i=1;i<=n;i++){
//找之前未使用的数字
int flag=1;
for(int j=0;j<cur;j++){
if(a[j]==i) flag=0;
}
if(flag==1) {
a[cur]=i;
dfs(n,cur+1);
}
}
}
int main() {
int n;
cin>>n;
dfs(n,0);
return 0;
}