您的位置:首页 > 其它

回溯法:最优装载问题

2016-04-10 19:54 295 查看
回溯法对解空间进行深度优先搜索,在一般情况下可用递归方法实现回溯法。

空间树理解:



假设装载的集装箱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));
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: