這個包由3個.java組成。每個.java是一個類
類一:Node.java
package packet;
class Node {
int index;
int value;
public Node(int aa,int bb){
index = aa;
value = bb;
}
}
類二:array.java
package packet;
import java.util.Stack;
class packet {
int n;
int[] array;
Stack<Node> newstack = new Stack<Node>();
public packet(int aa){
array = new int[aa];
}
public void insert(int x){
array[n ++] = x;
}
public void findanswer(int aa){
pailie(0, aa);
}
public void pailie(int i,int max) {
if(i == n ){
if(newstack.isEmpty()){ //棧中元素都比揹包值大都不入棧
System.out.println("無解");
return;
}
Node temp = newstack.pop();
if(temp.index == n - 1 && newstack.isEmpty()){ //數組最後一個元素已是棧中唯一元素
System.out.println("無解");
}else{
pailie(temp.index + 1, max + temp.value);
}
return;
}
if(max == array[i]){
newstack.push(new Node(i,array[i]));
}else if(max > array[i]){
newstack.push(new Node(i,array[i]));
pailie(i + 1, max - array[i]);
}else if(max < array[i]){
pailie(i + 1,max);
}
}
public void display(){
while(!newstack.isEmpty()){
System.out.print(newstack.pop().value + " ");
}
}
}
類三:Main
package packet;
//解決揹包問題-計算機中的經典問題
public class Main {
public static void main(String[] args){
packet newarray = new packet(10);
newarray.insert(11);
newarray.insert(8);
newarray.findanswer(44);
newarray.display();
}
}
這個程序可以跑得起來,大家可以copy過去跑跑看。