DFS
DFS指数型枚举模板
#include<iostream>
using namespace std;
int arr[20];
int n;
void dfs(int x){
if (x > n ){ // 出口 DFS位置大于选择的n
for (int i = 1; i <=n ; ++i){
if (arr[i] == 1){ // 如果标志为1 的 被选中的打印出
cout << i << " ";
}
}
cout << endl;
return;
}
arr[x] = 1; // 选中
dfs(x + 1); // DFS
arr[x] = 0; // 回溯
arr[x] = 2; // 不选中
dfs(x + 1); // DFS
arr[x] = 0; // 回溯
}
int main(){
cin >> n;
dfs(1);
}
全排列
#include<bits/stdc++.h>
using namespace std;
int n;
bool st[20];
int arr[20];
void dfs(int x){
// 出口条件
if (x > n){
for (int i = 1;i <= n ; ++i){
cout <<" "<< arr[i];
}
cout << endl;
return;
}
// 三个分支
for (int i = 1; i<= n; ++i){
if (!st[i]){ // 如果这个数没被选中
st[i] = true; // 上锁
arr[x] = i; // 给予这个数
dfs(x+1); // DFS
st[i] = false; // 回溯
arr[x] = 0;
}
}
}
int main(){
cin >> n;
dfs(1);
}
DFS组合枚举
#include<bits/stdc++.h>
using namespace std;
int n, r;
int arr[20];
void dfs(int x, int start){
if (x > r){
for ( int i = 1; i <= r ; ++i){
cout << setw(3) << arr[i];
}
cout << endl;
return;
}
for (int i = start ; i <= n ;++i ){
arr[x] = i;
dfs(x+1,i+1);
arr[x] = 0;
}
}
int main(){
cin >> n >> r;
dfs(1,1);
return 0;
}
标签:arr,20,int,namespace,dfs,DFS
From: https://www.cnblogs.com/wbcde116/p/18132871