通过递归的方法,从dfs(1)意思为从1开始,给n个数排列。dfs(?),?代表着给第几个数排序,运用used[]数组来将已经使用过的数打上标记1;让其在下次判断时不读取这个数。当一个方向到尽头,也就是排列的数字数到达要求,调用print(),将其输出后完全这个函数,返回上一个函数,并把此时用到的used[]数变为0,可以重新使用。
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
bool used[20];
int qq[20];
int n;
void print(){
for(int i=1;i<=n;i++)
cout << qq[i];
cout << endl;
}
void dfs(int x){
if(x>n)print();
else{
for(int i=1;i<=n;i++){
if(used[i]==0){
used[i]=1;
qq[x]=i;
dfs(x+1);
used[i]=0;
}
}
}
}
int main(){
int i,j,k,f1,f2,f3,t1,t2,t3;
cin >> n;
memset(used,0,sizeof(used));
memset(qq,0,sizeof(qq));
dfs(1);
return 0;
}