复习思路,更加理解了
#include<iostream>
#include<cstdio>
using namespace std;
const int N = 10;
int path[N], n;
bool sta[N];
//思路就是填坑。一共有n个坑,将1-n填入到这n个坑中去。
void dfs(int u)//u是该填的坑的索引
{
if(u == n) //填满
{
for(int i = 0; i < n; i ++)
printf("%d ", path[i]);
printf("\n");
return ;
}
for(int i = 1; i <= n; i ++)//首个分支可以分为n个分支
{
if(sta[i] == false)
{
path[u] = i;
sta[i] = true;
dfs(u+1); //继续递归搜索子分支
//恢复现场
path[u] = 0;
sta[i] = false;
}
}
}
int main()
{
scanf("%d",&n);
dfs(0);
return 0;
}