请编写程序输出前n个正整数的全排列(n<10),并通过9个测试用例(即n从1到9)观察n逐步增大时程序的运行时间。
输入格式:
输入给出正整数n(<10)。
输出格式:
输出1到n的全排列。每种排列占一行,数字间无空格。排列的输出顺序为字典序,即序列a1,a2,⋯,an排在序列b1,b2,⋯,bn之前,如果存在k使得a1=b1,⋯,ak=bk 并且 ak+1<bk+1。
输入样例:
3
输出样例:
123
132
213
231
312
321
#include <iostream>
#include <algorithm>
using namespace std;
void dfs(int n, int cur, int* nums, bool* used) {
if (cur == n+1) { // 如果当前排列已经包含了 n 个数,输出并返回
for (int i = 1; i <= n; i++)
cout << nums[i];
cout << endl;
return;
}
for (int i = 1; i <= n; i++) { // 枚举每一个数
if (!used[i]) { // 如果该数没有被使用过
used[i] = true; // 标记该数已经被使用
nums[cur] = i; // 将该数加入到当前排列中
dfs(n, cur + 1, nums, used); // 递归地对剩下的数进行全排列
used[i] = false; // 回溯,将该数标记为未使用
}
}
}
int main() {
int n;
cin >> n;
int nums[n] = {0}; // 存储当前排列
bool used[n + 1] = {false}; // 标记每个数是否被使用过
dfs(n, 1, nums, used); // 从第 1 个位置开始进行全排列
return 0;
}
文章提供了一个C++程序,使用深度优先搜索(DFS)算法生成1到n的全排列,并通过递归和回溯方法处理全排列问题。程序会对n从1到9的每个值进行测试,观察随着n的增加,程序运行时间的变化。

被折叠的 条评论
为什么被折叠?



