2021.5.23
dfs全排列题目:给定一个n(n<=10)求1~n的所有排列方案
输入:一行,一个n
输出:每一行为一种排列方案,输出所有方案
解题思路:dfs,包含一个参数为第几层(位),到达n+1代表排序完为一种方案。循环访问所有的点,如果bk数组内没标记代表可用,将其添加进输出数组并在bk进行标记,进入下一层,最后返回时将bk置0,输出数组将其删除
#include<bits/stdc++.h>
using namespace std;
const int maxn=15;
int n,bk[maxn];
vector<int>a;
void dfs(int st)
{
if(st==n+1)
{
for(auto g:a)
cout<<g<<" ";
cout<<endl;
return ;
}
for(int i=1;i<=n;i++)
{
if(bk[i])continue;
bk[i]=1;
a.push_back(i);
dfs(st+1);
a.pop_back();
bk[i]=0;
}
}
int main()
{
cin>>n;
dfs(1);
return 0;
}