借鉴链接:点击打开链接
dfs:深度优先遍历:先遍历1,具体看大佬的图片;
大佬代码:
/*#include<iostream>
using namespace std;
// dfs 深度优先遍历;
int a[100];
void dfs(int cur,int n){
if(cur==n){//递归边界,说明填完了;
for(int i=0;i<n;i++)//一个一个的输出
cout<<a[i]<<" ";
cout<<endl;
}
for(int i=1;i<=n;i++){//把1-n填入;
int ok=1;
for(int j=0;j<cur;j++){//遍历目前a数组的元素,判断当前这个这个数有没有填过
if(a[j]==i)
ok=0;
}
if(ok==1){
a[cur]=i;//没有填过就填,把它放在a数组的里面数字的后面
dfs(cur+1,n);//再排a数组元素里面的第cur+1个位置
}
}
}
int main(){
int n;
cin>>n;
dfs(0,n);
return 0;
}
*/
#include<iostream>
using namespace std;
int visit[100];
int a[100];
void dfs(int index,int n){
if(index==n){
for(int i=0;i<n;i++)
cout<<a[i]<<" ";
cout<<endl;
return;
}
for(int i=1;i<=n;i++){
if(visit[i]==0){
visit[i]=1;
a[index]=i;
dfs(index+1,n);
visit[i]=0;
}
}
}
int main(){
int n;
cin>>n;
dfs(0,n);
return 0;
}