AcWing_94 递归实现排列型枚举(递归、dfs、模板)

AcWing

94. 递归实现排列型枚举

image

使用二叉树模拟每一位的选择情况,a[N]数组当前每一位的选择数,visited[N]数组表示某个数是否已经被其他数位选择过。

#include <bits/stdc++.h>
using namespace std;
int n;
const int N = 10;
bool visited[N];
int a[N];
void dfs(int digit){
    if(digit > n){
        for(int i = 1; i <= n; i++) cout << a[i] << " \n"[i == n];
        return;
    }
    for(int i = 1; i <= n; i++){
        if(!visited[i]){
            a[digit] = i;
            visited[i] = true;
            // cout << digit << ' ' << i << endl;
            dfs(digit + 1);
            visited[i] = false;
        }
    }
}
int main(){
    cin >> n;
    dfs(1);
    return 0;
}