DFS-排列数字
图解:
代码:
#include<iostream>
using namespace std;
const int N = 10;
int st[N], path[N];// st数组作为flag,记录数字是否被使用,path数组存储数字
int n;
void dfs(int u)
{
// 走到最后一层,输出结果
if(u == n){
for(int i = 0; i < n; i++)
cout << path[i] << " ";
puts("");
}
// 该数字没有被使用时
for(int i = 1; i <= n;i++)
{
if(!st[i])
{
path[u] = i;
st[i] = true;
dfs(u + 1);// 递归,继续往下一层走
path[u] = 0;// 恢复现场,这一步可以省略,因为循环进入时path[u]会被新的值覆盖
st[i] = false;
}
}
}
int main()
{
cin >> n;
dfs(0);// 从根节点开始
return 0;
}