源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

c语言来实现贪心算法之装箱问题

  • 时间:2020-02-10 03:33 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:c语言来实现贪心算法之装箱问题
装箱问题,贪心算法求近似最优解
[u]复制代码[/u] 代码如下:
import java.util.Arrays; import java.util.Comparator; //装箱问题,贪心算法 public class Enchase {     public void test1() {         Integer[] boxs={34,6,40,2,23,12,12};         int boxCaptation=40;//箱子容量         //倒序         Arrays.sort(boxs, new Comparator<Integer>() {             @Override             public int compare(Integer o1, Integer o2) {                 return o2-o1;             }         });         int unEnchase=boxs.length;//未装箱数         int minIndex=boxs.length-1;//最小的箱子指向         while (unEnchase>0) {             for(int i=0;i<boxs.length;i++){                 //位置箱子重量为零跳过                 if(boxs[i]==0){                     continue;                 }                 unEnchase--;                 while((boxCaptation-boxs[i])>=boxs[minIndex]){                     int k=i+1;                     for(;k>i;k++){                         //位置箱子重量为零跳过                         if(boxs[k]==0){                             continue;                         }                         //将箱子加上去,原来位置清零                         boxs[i]+=boxs[k];                         int temp=boxs[k];                         boxs[k]=0;                         unEnchase--;                         if(boxs[i]>boxCaptation){                             //超过最大可容纳体积,状态复原                             unEnchase++;                             boxs[k]=temp;                             boxs[i]-=boxs[k];                             continue;                         }                         //最小箱子更新                         if(k==minIndex){                             for(int y=minIndex;y>0;y--){                                 if(boxs[y]!=0){                                     minIndex=y;                                 }                             }                         }                         break;                     }                 }             }         }         //统计箱子数         int Boxcount=0;         System.out.println("装箱结果:");         for(int i=0;i<boxs.length;i++){             System.out.print(boxs[i]+"\t");             if(boxs[i]==0){                 continue;             }             Boxcount++;         }         System.out.println("\n箱子数:"+Boxcount);     }     public static void main(String[] args) {         new Enchase().test1();     } }
以上就是本文的全部内容了,希望大家能够喜欢。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部