//
src是源資料集合,currentindex是在源集合裡的當前下標,length為源集合的大小,dest是結果集合,num是結果集合的元素個數,初始化時,結果集合要和源集合的個數相等.
void
match(
int*
src,
intcurrentindex,
intlength,
int*
dest,
intnum)
...cout
<<
endl;
match(src,currentindex,length,dest,num);//選用當前元素進行遞迴
match(src,currentindex,length,dest,num-1
);//去除當前元素再進行遞迴
} int src = ;
int* dest = new int[3];列印的結果是:
11 2
1 2 3
1 32
2 33
所以這個演算法可以求揹包問,加和問題等。凡是與子集合相關的問題,全部可以用這個方法解決。
集合子集問題
集合子集問題 給的乙個集合按元素個數列出所有列出所有集合子集,如 0個元素 1個元素 2個元素 3個元素 輸出 方法 採用乙個二進位制數列表示解,如 000 代表 100 代表 演算法 1 乙個字串陣列儲存解。2 用乙個整形陣列儲存不同元素個數解應反正字串陣列中得位置。include include...
求集合子集 C 實現
思路 int arr 遞迴遍歷整個陣列,遍歷到第0個位置,我們就求出含有0的所有子集,遍歷到第1個位置,我們就求出含有1不含0的所有子集,依次類推,遍歷到第3個位置,我們求出含有3而不含0 1 2 的所有子集。loc表示當前位置 loc len為遞迴終止條件 void getallsubset in...
組合 子集問題彙總
子集的問題的思路也分兩個方向,一種是解空間樹是關於每個數選還是不選,結點取值範圍就是true or false。解向量的長度是固定的,即candidates的個數,而且只有完全解才是問題的解。解向量不是直接的答案,而是標誌每個candidates選還是不選。答案需要另乙個向量根據搜尋的路徑填充。第二...