问题是这样的:
输入n,求出n的所有全排列
例如: 输入3
则输出
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
代码如下:(利用深搜)
#include<iostream>
using namespace std;
int n,t;
int a[15],s[15];
void dfs(int x){ //深搜函数,从x=n开始;
if(x==0){ //输入条件
for(int i=0;i<n;i++){
cout<<" "<<a[i]; //输出从a[0]开始
} cout<<endl; //一行一行的
return ; //返回到第十七行,函数那地方,也就是进行t--;
}
for(int i=1;i<=n;i++){
if(s[i]==0){ //从s[1]开始标记,s[1]代表第一个元素,
s[i]=1; //如果没被标记,则标记上
a[t]=i; //a[0]=1;
t++; //递增,a[t]的递增
dfs(x-1); //x变x-1;从头进行x-1的深搜
t--; //直到x==0时 ,a[t]中的t退一步回去
s[i]=0; //i当成没被标过
}
} return ;
}
int main(){
cin>>n;
dfs(n); //dfs表示进行深搜 ,n代表开始时第五行的x赋值为n
return 0;
}