请编写程序输出前n个正整数的全排列(n<10),并通过9个测试用例(即n从1到9)观察n逐步增大时程序的运行时间。
输入格式:
输入给出正整数n(<10)。
输出格式:
输出1到n的全排列。每种排列占一行,数字间无空格。排列的输出顺序为字典序,…(省略)。
输入样例:
3
输出样例:
123
132
213
231
312
321
思路:递归实现。
#include <cstdio>
const int maxn = 11;
int n, P[maxn], hashTable[maxn] = {false};//c++用法
void generateP(int index) {
if (index == n + 1) {//递归边界
for (int i = 1; i <= n; i++) {
printf("%d", P[i]);
}
printf("\n");
return;
}
for (int x = 1; x <= n; x++) {
if (hashTable[x] == false) {
P[index] = x;
hashTable[x] = true;//标记x已在P中
generateP(index + 1);//处理下一位
hashTable[x] = false;//处理完子问题后还原状态
}
}
}
int main() {
scanf("%d", &n);
generateP(1);
return 0;
}