#include <bits/stdc++.h>
using namespace std;
vector<vector<int> >ps;
void Insert(vector<int> s, int i, vector<vector<int> >&ps1) {
vector<int> s1;
vector<int>::iterator it;
for(int j = 0; j < i; j++) {
s1 = s;
it = s1.begin() + j; // 求出插入位置
s1.insert(it, i); // 插入整数i
ps1.push_back(s1);
}
}
void Perm(int i, int n) {
vector<vector<int> >ps1;
vector<vector<int> >::iterator it;
if(i <= n) {
for(it = ps.begin(); it != ps.end(); it++) {
Insert(*it, i, ps1);
}
ps = ps1;
Perm(i + 1, n);
}
}
void disps() {
vector<vector<int> >::reverse_iterator it; // 全排列的反向迭代器
vector<int>::iterator sit;
for(it = ps.rbegin(); it != ps.rend(); it++) {
for(sit = (*it).begin(); sit != (*it).end(); sit++) {
cout << *sit;
}
cout << " ";
}
cout << endl;
}
int main() {
int n = 3;
cout << "1~" << n << "的全排列如下:\n";
vector<int> s;
s.push_back(1);
ps.push_back(s);
Perm(2, n);
disps();
return 0;
}
4.3.2用递归方法求解全排列问题
最新推荐文章于 2023-03-06 12:39:46 发布