#include<iostream>
#include <cstring>
using namespace std;
int n;
const int N=10;
void dfs(int h,int nums[],int flag[])
{
if(h>n)//填满n个数
{
for(int i=1;i<=n;i++) printf("%d ",nums[i]);
puts(" ");
}
else
{
for(int i=1;i<=n;i++)
{
if(!flag[i])
{
flag[i]=1;//表示开始使用flag[i]
nums[h]=i;//开始填数
dfs(h+1,nums,flag);//递归填下一个数
flag[i]=0;//本段函数重点(保护现场),递归树返回时,另一分支还需要使用
}
}
}
}
int main()
{
cin>>n;
int nums[N];
int flag[N];
memset(flag,0,sizeof(flag));
dfs(1,nums,flag);
return 0;
}
作者:15344420509
链接:https://www.acwing.com/activity/content/code/content/463849/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。