思路: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;
}