排列组合算法

1. 递归算法

void Perm(char list[], int k, int m) 
{ //生成list [k:m ]的所有排列方式 
    int i; 
    if (k == m) {//输出一个排列方式 
        for (i = 0; i <= m; i++) 
            putchar(list[i]); 
        putchar('\n'); 
    } 
    else // list[k:m ]有多个排列方式 
        // 递归地产生这些排列方式 
        for (i=k; i <= m; i++) { 
            Swap (list[k], list[i]); 
            Perm (list, k+1, m); 
            Swap (list [k], list [i]); 
        } 
} 

ref: http://tieba.baidu.com/f?kz=12248706

原文地址:https://www.cnblogs.com/bouygues/p/4479999.html