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();
}
}
以上就是本文的全部内容了,希望大家能够喜欢。