输入 n,输出1-n的全排列 0<n<10
#include <iostream>
using namespace std;
int n;
int a[10];
bool vis[10]; //避免重复搜索,标记是否已搜过(默认为0)
void dfs(int step)//深度,想象站在放置数字卡片的第step个盒子面前
{
if(step==n+1)//结束搜索
{
for(int i=1;i<=n;i++)
{
cout<<a[i]<<" ";
}
cout <<endl;
return;//回溯
}
for(int i=1;i<=n;i++)//所有1-n的数字一一搜索
{
if(vis[i]==0)//没搜过
{
a[step]=i;//放进数字
vis[i]=1; //放完标记已经搜索过
dfs(step+1);//搜下一个数字,类似递归自己调用自己
vis[i]=0; //return回溯的第一次位置step=3,i=3
}
}
return ;//继续回溯
}
int main()
{
cin>>n;
dfs(1);
return 0;
}