AcWing 842. 排列数字
原题链接
简单
作者:
cordis
,
2020-08-12 23:35:20
,
所有人可见
,
阅读 367
注意
1. dfs是一条路走到黑
2. dfs重要的是顺序
3. dfs回溯要恢复现场
4. dfs要记得有递归终点
本题
1.确定达到题目条件时输出
2.确定搜索顺序(因为dfs类似一棵树,可以从根节点开始,然后一条道走到黑,中间在回溯)
3.探索题目搜索的条件(本题是全排列,排过的不能再排(指的是一条路))
代码
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int N=1e3+10;
int p[N];
bool dv[N];
int n;
void dfs(int u)
{
if(u==n) {
for(int i=0;i<n;i++) cout<<p[i]<<" ";
cout<<endl;
}
for(int i=1;i<=n;i++)
{
if(!dv[i])
{
p[u]=i;
dv[i]=1;
dfs(u+1);
dv[i]=0;
}
}
}
int main ()
{
cin>>n;
dfs(0);
return 0;
}