【dfs算法模板】
dfs算法常表现为复杂的递归函数形式,因此掌握递归是理解dfs算法的基础。
void dfs(int step){
判断边界{
输出解
}
尝试每一种可能{
满足check条件{
标记
继续下一步:dfs(step+1)
恢复初始状态(回溯的时候要用到)
}
}
}
【全排列算法代码】
#include <bits/stdc++.h>
using namespace std;
const int maxn=10;
int a[maxn];
int f[maxn]; //flag
int n;
void dfs(int t){
if(t==n+1){
for(int i=1;i<=n;i++){
cout<<a[i]<<" ";
}
cout<<endl;
return;
}
for(int i=1;i<=n;i++){
if(f[i]==0){
a[t]=i;
f[i]=1;
dfs(t+1);
f[i]=0;
}
}
return;
}
int main() {
cin>>n;
dfs(1);
return 0;
}
/*
in:
3
out:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
*/