只用了一个数组就实现了
1 2 3 4 … n 的有序全排列:
1. 1 + [2 3 4 … n的有序全排列]
2. 2 + [1 2 3 … n的有序全排列]
3. ....
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int n;
vector<int> pm;
void cal(int x) {
if(x == n - 1) {
int flag = 0;
for(auto &e:pm)
if(flag == 0) {
cout << e;
flag = 1;
}else cout << " " << e;
cout << endl;
return;
}
for(int i = x; i < n; ++i) {
swap(pm[x], pm[i]);
cal(x + 1);
}
for(int i = x; i < n - 1; ++i)
swap(pm[i], pm[i+1]);
}
int main() {
cin >> n;
for(int i = 1; i <= n; ++i)
pm.push_back(i);
cal(0);
}