當前位置: 首頁>>算法&結構>>正文


組合算法的遞歸實現(C版)

問題描述:給定一個集合x1,x2,…,xn, 輸出從這n個元素中取m個的所有組合。

算法基本思想:如果xi為組合的一個元素,那麽組合的下一個元素在x(i+1), x(i+2),….,Xn中選取。

遞歸實現如下:VC++編譯測試通過。

#include 
#include 
#include 

#define MAX_LENGTH 20
char a[MAX_LENGTH]; //存儲初始字符串
char r[MAX_LENGTH]; //存儲組合結果

//n, 初始字符串的長度
//m, 所求組合的長度
//k, 初始集合中當前處理位置, a[k]
//index, 所求組合結果數組的索引, r[index]
void combination(int n, int m, int k, int index)
{
    int i;
    if(index == m) //輸出組合結果
    {
        for(i = 0; i < m; ++i)
            printf("%c", r[i]);
        printf("\n");
        return;
    }

    for(i = k; i < n; ++i)
    {
        r[index] = a[i];
        combination(n, m, i + 1, index + 1);//注意第三個參數是i + 1
    }
}

int main(int argc, char** argv)
{
    strcpy(a, "abcde");
    combination(5, 3, 0, 0);
    system("pause");
    return 0;
}
本文由《純淨天空》出品。文章地址: https://vimsky.com/zh-tw/article/194.html,未經允許,請勿轉載。