递归算法之排列问题

#include 
#include 
using namespace std;
const int N = 5;

/**
*排列问题,对王晓东的《算法设计与分析》3,做了些改动,加入了一个
*const int start,可以决定所有排列从第几个元素开始输入,个人觉得
*书上的从0开始输出不好(指的是第17行,若我的代码没有被修改)
*zzuwenjie 2017-3-8 14:25:07
**/
template 
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

对书上的排列问题的函数做了一点改动

STL中的next_permutation()函数完全可以取代该函数。而且更安全。上述算法有问题

NOJ1103 by myorange 2017-4-28 17:56:45

你可能感兴趣的:(ACM算法,数学)