簡單的揹包問題--java遞迴實現
阿新 • • 發佈:2019-02-11
1.主程式
package recursion; //簡單揹包問題-遞迴實現- //將不同重量的資料項放入揹包中,以使揹包的最後 //-----------達到指定的總重量------------- public class Pairing { private int weight = 20; // 揹包承受的重量 private int target; private int[] items = { 11, 8, 7, 6, 5 };// 可選的總量資料項 private int size; // 可選物體的數目 private int j = 0; // ------------建構函式---------------- public Pairing() { this.size = items.length; } // -------------主程式---------------- public String pairing() { target = weight; String result = ""; for (int i = j; i < size; i++) { if (target > items[i]) { // 目標重量大與選擇資料項 result = result + " " + String.valueOf(items[i]); System.out.println(result + " --target is " + target + "--" + items[i] + " is too small"); target = target - items[i]; } else if (target < items[i]) { // 目標總量小於選擇的資料項 System.out.println(result + " --target is " + target + "--" + items[i] + " is too big"); } else { // 目標重量等於選擇的資料項 result = result + " " + String.valueOf(items[i]); System.err.println(result + " --target is " + target + "--" + items[i] + " is success"); return "success"; } } // 當以items[j]為首個匹配項的匹配不存在是,遞迴處理從j+1到size範圍內的數 j = j + 1; pairing(); // 沒有恰好等於目標的匹配組合 return "fail"; }//end pairing }//end
2.測試程式
package recursion;
public class App {
public static void main(String[] args) {
Pairing pair = new Pairing();
pair.pairing();
}
}
3.運算結果
11 8 --target is 9--8 is too small 11 8 --target is 1--7 is too big 11 8 --target is 1--6 is too big 11 8 --target is 1--5 is too big 8 --target is 20--8 is too small 8 7 --target is 12--7 is too small 8 7 --target is 5--6 is too big 8 7 5 --target is 5--5 is success