文档介绍:一、实验目的与要求1、掌握装载问题的回溯算法;2、初步掌握回溯算法;二、实验内容有一批共n个集装箱要装上2艘载重量分别为c1和c2的轮船,其中集装箱i的重量为wi,且装载问题要求确定是否有一个合理的装载方案可将这个集装箱装上这2艘轮船。如果有,找出一种装载方案。三、实验步骤及程序代码packageunit1;;lassBacktrack{ staticintn;//集装箱数 staticint[]w;//集装箱重量数组 staticintc;//第一艘轮船的载重量 staticintcw;//当前载重量 staticintbestw;//当前最优载重量 staticintr;//剩余集装箱重量 staticint[]x;//当前解 staticint[]bestx;//当前最优解 publicstaticintmaxLoading(int[]ww,,int[]xx){ n=-1; w=ww; ; bestw=0; x=newint[n+1]; bestx=xx; for(inti=0;i<=n;i++) r+=w[i]; //计算最优装载重量 backtrack(0); returnbestw; } publicstaticvoidbacktrack(inti){ //搜索第i层结点 if(i>n){//到达叶结点 if(cw>bestw){ for(intj=0;j<=n;j++) bestx[j]=x[j]; bestw=cw; } return; } r-=w[i]; if(cw+w[i]<=c){//搜索左子树 x[i]=1; cw+=w[i]; backtrack(i+1); cw-=w[i]; } if(cw+r>bestw){ x[i]=0; backtrack(i+1); } r+=w[i]; } publicstaticvoidmain(String[]args){ Scannerin=newScanner(); ("请输入集装箱的数目:"); intp=(); int[]ww=newint[p];