//这里填你的代码^^
//注意代码要放在两组三个点之间,才可以正确显示代码高亮哦~
#include <cstdio>
using namespace std;
const int N = 10;
int n;
void dfs(int u, int nums[], bool st[])
{
if(u > n)
{
for(int i = 1; i <= n; i++) printf("%d ", nums[i]);
puts(" ");
}
else
{
for(int i = 1; i <= n; i++)
{
if(!st[i])
{
st[i] = true;
nums[u] = i;
dfs(u + 1, nums, st);
st[i] = false; //恢复现场
}
}
}
}
int main()
{
scanf("%d", &n);
int nums[N];
bool st[N] = {0};
dfs(1, nums, st);
return 0;
}
i=1(st[1]==0)i=1
st[1]=1 //st[i]=true;
num[1]=1 //num[u]=i;
i=1(st[1]==1,st[2]==0)i=2//缩进表示递归层数
st[2]=1
num[2]=2
i=1(st[1,2]==1,st[3]==0)i=3
st[3]=1
num[3]=3
u=4>3//输出num,并中止调用,此时输出123
st[3]=0//if结束时,恢复现场
st[2]=0//if结束时,恢复现场
i=3(st[3]==0)i=3
st[3]=1
num[2]=3
i=1(st[1]==1,st[2]==0)i=2
st[2]=1
num[3]=2
u=4>3
st[2]=0
st[3]=0
i=2(st[2]==0)i=2
//123 132