题目描述:
AC代码
#include <iostream>
#include <algorithm>
using namespace std;
int n;
const int N = 10;
int path[N];
bool st[N];
void dfs(int u)
{
if (u == n + 1) // 递归终止的条件
{
for (int i = 1; i <= n; i ++)
cout << path[i] << " ";
cout << endl;
}
for (int i = 1; i <= n; i ++) // 遍历每一个数字
{
if (!st[i]) // 如果这个数字没有被用过
{
// 选择这个数字
path[u] = i;
st[i] = 1;
dfs(u + 1);
// 恢复现场
path[u] = 0;
st[i] = 0;
//不选,不选的情况下,应该是不执行任何操作
//dfs(u + 1);
}
}
}
int main()
{
cin >> n;
/*
如果只是看题干的话,好像有n棵树,但是
由于下一棵树和上一棵树有联系,因此,我
们还是选择使用一棵树。而对于与上一棵树
的联系,我们选择使用一个数组来进行标记
一个数是否被用过
*/
dfs(1); // 我们仍然选择从1开始
return 0;
}