AcWing
94. 递归实现排列型枚举
使用二叉树模拟每一位的选择情况,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;
}