全排列问题题解
2025-12-07 11:19:17
发布于:北京
0阅读
0回复
0点赞
int vis[N] = {0}, ans[N] = {0}, ai = 0;
int a[N];
// n 个数字的全序列
void dfs(int dep) {
if (dep >= k + 1) {
// 找完了,可以输出 ans
} else {
// 去选第 dep 个数
ans[++ ai] = a[dep];
dfs(dep + 1);
// 不选第 dep 个数
ai --;
dfs(dep + 1);
}
}
代码
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int num[10],vis[10];
int n;
void dfs(int m){
if(m == n+1){
for(int i = 1; i <= n; i++){
printf("%5d",num[i]);
}
cout << endl;
return;
}
for(int i = 1; i<= n;i++){
if(vis[i]) continue;
num[m] = i;
vis[i] = 1;
dfs(m+1);
vis[i] = 0;
}
}
int main(){
cin >> n;
dfs(1);
return 0;
}
这里空空如也





有帮助,赞一个