子集和問題的乙個例項為〈s,t〉。其中,s=是乙個正整數的集合,c是乙個正整數。子集和問題判定是否存在s的乙個子集s1,使得子集s1和等於c。 設計乙個回溯法來求解該問題。
解題思路:對於該集合的每乙個子集,若元素和為正整數c,則將該子集放入解集中,最後返回解集即可。
/**
* @param list 存放所有滿足要求的解
* @param templist 存放每一輪的解
* @param nums 正整數集合
* @param target 目標和
* @param start 開始位置
* @param sum 每乙個子集和
*/public void backtrack(list> list, arraylisttemplist,
int nums, int target, int start, int sum)
for (int i=start; i> list = new arraylist<>();
arraylisttemplist = new arraylist<>();
backtrack(list, templist, s, target, 0, 0);
if (list.size() == 0)
system.out.println("no solution");
else
system.out.println(arrays.tostring(list.toarray()));
}
也可以省去backtrack函式中的引數sum。**如下:public void backtrack(list> list, arraylisttemplist,
int nums, int target, int start)
for (int i=start; i非遞迴回溯法:
子集和問題
題目描述 子集和問題的乙個例項為 s,t 其中,s 是乙個正整數的集合,c是乙個正整數。子集和問題判定是否存在s的乙個子集s1,使得s1中的各元素之和等於c。題目出自 計算機演算法設計與分析 第3版 王曉東 思路 用回溯法解這道題,我本來想修改排列樹使之可以求出乙個集合的所有子集。但是分析了一下,時...
子集和問題
問題描述 子集和問題的乙個實力為。其中,s 是乙個正整數的集合,c是乙個正整數。判定是否存在s的乙個子集s1使得s1的和為c。輸入 輸入含多組測試用例!對每組測試用例,第一行有兩個正整數n和c,n表示s的大小,c是子集和的目標值。接下來的一行,有n個正整數 1 n 10000 表示集合s中的元素。當...
子集和問題
今天程式考試受挫,遂打算寒假空閒時間刷刷題,練練手感。今天有一題是這樣的,檔案 data.txt 有n 1行,每一行都為乙個正整數,第一行為n,剩餘n行為任意n個正整數。對於正整數m m 2 輸出m個數的和,要求和不大於100,並列出表示式 並且要求表示式不相同。若表示式中的元素相同則表示式就相同,...