先介绍生成排列的方法
最简单的方法是用STL自带的next_permutation() 参数为要生成下一个排列的区间
int n, p[10];
cin >> n;
for (int i = 0; i < n; i++) cin >> p[i];
sort(p, p + n);
do {
for (int i = 0; i < n; i++) cout << p[i];
cout << endl;
} while (next_permutation(p, p + n)); //若已经是最后一个排列则返回false
这个函数还可以接受比较函数,默认是小于号
利用字典序方法(其实上面这个函数就是用这个方法生成下一个排列的)
先说下方法吧,以排列P1,P2,P3...Pn为例
1 先从又右向左找到第一个满足Pi-1<Pi的i
2 再从右向左找第一个比Pi-1大的数,假设是Pk
3 交换Pi-1与Pk,重新排列pi-1之后的数&