回溯法:最优装载问题

来源:互联网 发布:js的event对象 编辑:程序博客网 时间:2024/05/22 12:00

回溯法对解空间进行深度优先搜索,在一般情况下可用递归方法实现回溯法。
空间树理解:
集装箱n=3
假设装载的集装箱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));    }}
0 0
原创粉丝点击