#include <iostream>
#include <algorithm>
using namespace std;
const int N = 5;
/**
*排列问题,对王晓东的《算法设计与分析》3,做了些改动,加入了一个
*const int start,可以决定所有排列从第几个元素开始输入,个人觉得
*书上的从0开始输出不好(指的是第17行,若我的代码没有被修改)
*zzuwenjie 2017-3-8 14:25:07
**/
template <class Type>
void Perm (Type listNum[], const int start, int k, int m) {
//产生lisk[k:m]的所有排列,start <= k(一般取等)
if (k==m) {
//只剩下1个元素
for (int i = start; i <= m; ++i) {
cout << listNum[i];
}
cout << endl;
} else {
for (int i = k; i <= m; ++i) {
swap(listNum[k], listNum[i]);
Perm(listNum, start, k+1, m);
swap(listNum[k], listNum[i]);
}
}
}
int main(){
int listNum[N];
for (int i=0; i<N; ++i){
listNum[i] = i;
}
Perm(listNum, N-3, N-3, N-1);
return 0;
}
//排列组合 Permutations and combinations
对书上的排列问题的函数做了一点改动
STL中的next_permutation()函数完全可以取代该函数。而且更安全。上述算法有问题
NOJ1103 by myorange 2017-4-28 17:56:45