回溯法:最优装载问题

回溯法对解空间进行深度优先搜索,在一般情况下可用递归方法实现回溯法。
空间树理解:
《回溯法:最优装载问题》
假设装载的集装箱n=3,则空间树可以表示为上图,就是1表示装入该集装箱,0表示不装入该集装箱,最优装载问题就是在这些空间树里,寻找最优子结构。我想看到此处应该不难理解。

具体测试代码:

public class bestLoading {
    static int n;//集装箱数量
    static int []w;//箱子重量数组
    static int c;//第一艘船的载重
    static int cw;//当前的载重量
    static int bestw;//最优载重
    static int r;//剩余集装箱的重量
    public static int maxLoading(int []ww,int cc){
        n=ww.length-1;
        w=ww;
        c=cc;
        cw=0;
        bestw=0;
        r=0;
        for(int i=1;i<=n;i++){
            r+=w[i];
        }
        backtrack(0);
        return bestw;   
    }

    private static void backtrack(int i){
        if(i>n){
            if(cw>bestw) bestw=cw;
            return;
        }
        r-=w[i];
        if(cw+w[i]<=c){
            cw+=w[i];
            backtrack(i+1);
            cw-=w[i];
        }
        if(cw+r>bestw)
            backtrack(i+1);
        r+=w[i];

    }
    public static void main(String []args){
     int []ww={1,7,4,20,9,11};
     int c=26;
     System.out.println(maxLoading(ww,c));
    }

}
    原文作者:分支限界法
    原文地址: https://blog.csdn.net/qq_19341327/article/details/51114670
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞