题目要求:按照字典序输出自然数 1 到 n 所有不重复的排列,即 n 的全排列,要求所产生的任一数字序列中不允许出现重复的数字。
输入格式:一个整数 n。
输出格式:
由 1∼n 组成的所有不重复的数字序列,每行一个序列。
每个数字保留 5 个场宽。
1.c++数据结构递归求全排列:
按字典序排列(从小到大排序)
2.思路:
n:输出1-n的n个整数的全排列
P:存储我们数据的排列顺序
hashTable:判断当前数组中有无此元素
3.代码实现:
#include<iostream>
using namespace std;
const int maxn = 100;
int n;
int P[maxn];
bool hashTable[maxn]={false};
void generateP(int index) {
//防御性编程
if (index == n + 1) {
for (int i = 1; i <= n; i++) {
cout << P[i] << "\t";
}
cout << endl;
return;
}
//遍历每个位置的可能
for (int i = 1; i <= n; i++) {
if (hashTable[i] == false) { //判断当前排列中有无此元素
P[index] = i; //把元素按照顺序放到排列中
hashTable[i] = true;
generateP(index + 1); //往下一个位置插入元素
hashTable[i] = false;//从右往左抛出每个数据-->按照字典序排列
//回溯---->重置
}
}
}
int main() {
cin >> n;
generateP(1);
return 0;
}
此思路来自与b站视频C++数据结构递归求全排列_哔哩哔哩_bilibili