求集合子集問題

來源:互聯網
上載者:User
//src是來源資料集合,currentIndex是在源集合裡的當前下標,length為源集合的大小,dest是結果集合,num是結果集合的元素個數,初始化時,結果集合要和源集合的個數相等.
void match(int* src,int currentIndex,int length,int* dest,int num)
...{
    if(currentIndex == length)
        return ;

    dest[num++] = src[currentIndex++];//採用當前元素
    for(int i =0 ; i < num; i++)
    ...{
        cout << dest[i]<<" ";
    }
    cout << endl;
    match(src,currentIndex,length,dest,num);//選用當前元素進行遞迴
    match(src,currentIndex,length,dest,num-1);//去除當前元素再進行遞迴
}

 int src[] = {1,2,3};
 int* dest = new int[3];列印的結果是:

 1
1 2
1 2 3
1 3
2
2 3
3

所以這個演算法可以求背包問,加和問題等。凡是與子集合相關的問題,全部可以用這個方法解決。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.