思路:for 代表的是每一位的纵向,数字变化,dfs 代表的是横向的,位置变化。vis 来做到每个枚举的数不重复,并且要在搜索前记录,搜索后还原。模拟该样例 dfs3 的时候是输出,dfs0,1,2 是枚举某位置的数字。复杂度是 n!*n。
#include<iostream>
using namespace std;
int n;
int vis[10],path[10];
void dfs(int dep){
if(dep==n){
for(int i=0;i<n;i++)cout<<path[i]<<" ";
cout<<endl;
return ;
}
for(int i = 1;i<=n;i++){
if(!vis[i]){
vis[i]=true;
path[dep]=i;
dfs(dep+1);
vis[i]=false;
}
}
}
int main( ){
cin>>n;
dfs(0);
return 0;
}