这里相当于在递归实现组合型枚举的基础上,在n个数中选取n个数,且是无序的,也就是说每一个数都会出现在递归搜索树的每一层,所以对于每条路线我们都需要搜索n次,由于每一次选取的数不同,我们需要判断是否已经将该数添加到了路径。递归搜索树如下:
代码:
#include<iostream>
#include<algorithm>
using namespace std;
int n;
int path[10];
int flag[10];//用于标识该数是否已经选取
void dfs(int u)
{
if(u>n)
{
for(int i=1;i<=n;i++)
cout<<path[i]<<" ";
cout<<endl;
return;
}
else
{
for(int i=1;i<=n;i++)
{
if(flag[i]) continue;
path[u]=i;
flag[i]=1;//标识为已选
dfs(u+1);
path[u]=0;
flag[i]=0;//回溯到未选
}
}
}
int main()
{
cin>>n;
dfs(1);
return 0;
}