模板题,直接上递归!
2023-07-25 18:50:18
发布于:浙江
46阅读
0回复
0点赞
本人代码并非最优解,仅供参考!
// 全排列(排列从 1~n 的数字)
#include <bits/stdc++.h>
using namespace std;
int *arr; // 数组
bool *vis; // 标记数组
int n; // 数组长度
void func(int pos) {
if (pos == n) { // 一次枚举结束
for (int i = 0; i < n; ++i) cout << arr[i] << ' ';
cout << '\n';
return;
}
for (int i = 0; i < n; ++i) {
if (!vis[i]) {
vis[i] = true; // 标记
arr[pos] = i + 1; // 将可能性记录下来
func(pos + 1); // 递归排列下一位
vis[i] = false; // 回溯
}
}
}
int main() {
cin >> n;
arr = new int[n];
vis = new bool[n];
func(0); // 从数组的开头开始全排列
return 0;
}
这里空空如也
有帮助,赞一个