Java 用 棧 解決《揹包問題》

這個包由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過去跑跑看。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章