c语言来实现贪心算法之装箱问题
装箱问题,贪心算法求近似最优解
importjava.util.Arrays; importjava.util.Comparator; //装箱问题,贪心算法 publicclassEnchase{ publicvoidtest1(){ Integer[]boxs={34,6,40,2,23,12,12}; intboxCaptation=40;//箱子容量 //倒序 Arrays.sort(boxs,newComparator<Integer>(){ @Override publicintcompare(Integero1,Integero2){ returno2-o1; } }); intunEnchase=boxs.length;//未装箱数 intminIndex=boxs.length-1;//最小的箱子指向 while(unEnchase>0){ for(inti=0;i<boxs.length;i++){ //位置箱子重量为零跳过 if(boxs[i]==0){ continue; } unEnchase--; while((boxCaptation-boxs[i])>=boxs[minIndex]){ intk=i+1; for(;k>i;k++){ //位置箱子重量为零跳过 if(boxs[k]==0){ continue; } //将箱子加上去,原来位置清零 boxs[i]+=boxs[k]; inttemp=boxs[k]; boxs[k]=0; unEnchase--; if(boxs[i]>boxCaptation){ //超过最大可容纳体积,状态复原 unEnchase++; boxs[k]=temp; boxs[i]-=boxs[k]; continue; } //最小箱子更新 if(k==minIndex){ for(inty=minIndex;y>0;y--){ if(boxs[y]!=0){ minIndex=y; } } } break; } } } } //统计箱子数 intBoxcount=0; System.out.println("装箱结果:"); for(inti=0;i<boxs.length;i++){ System.out.print(boxs[i]+"\t"); if(boxs[i]==0){ continue; } Boxcount++; } System.out.println("\n箱子数:"+Boxcount); } publicstaticvoidmain(String[]args){ newEnchase().test1(); } }
以上就是本文的全部内容了,希望大家能够喜欢。