继续学习装载问题
上一篇我们学习了用队列式分支限界法求解,这一次采用优先队列式分支限界法来求解。
有一批共n个集装箱要装上2艘载重量分别为c1,c2的轮船,其中集装箱i的重量为wi,且要求确定是否有一个合理的装载方案可将这n个集装箱装上这2艘轮船。
可证明,采用如下策略可以得到一个最优装载方案:先尽可能的将第一艘船装满,其次将剩余的集装箱装到第二艘船上。
其实质是要求第一艘船的最优装载。 其解空间树是一棵子集树。
《算法设计与分析》-王晓东著 一书P164-165给出的代码同样是存在问题,无法运行的。主要表现是MaxHeap的定义没有给出,循环变量i的初值是1,计算扩展结点相应载重量的for循环以及构造当前最优解的for循环中终止条件都没有考虑j=0的情况;
对代码的修订如下:
package ch06.book;
import java.util.PriorityQueue;
public class PiorityBBLoading {
static PriorityQueue<HeapNode> heap = null;
static int bestWeight = 0;
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] weight = {10,40,40};
int capacity = 50;
int [] bestSolution = new int[weight.length];
bestWeight = maxLoading(weight, capacity, bestSolution);
Sy