1. 程式人生 > >簡單的揹包問題--java遞迴實現

簡單的揹包問題--java遞迴實現

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