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

 更新时间:2015年03月13日 14:54:51   投稿:hebedich  
这篇文章主要介绍了c语言来实现贪心算法之装箱问题,需要的朋友可以参考下

装箱问题,贪心算法求近似最优解

复制代码 代码如下:

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();
    }
}

以上就是本文的全部内容了,希望大家能够喜欢。

相关文章

  • SpringCloud整合分布式服务跟踪zipkin的实现

    SpringCloud整合分布式服务跟踪zipkin的实现

    这篇文章主要介绍了SpringCloud整合分布式服务跟踪zipkin的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • java8新特性之接口默认方法示例详解

    java8新特性之接口默认方法示例详解

    这篇文章主要给大家介绍了关于java8新特性之接口默认方法的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用java8具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-08-08
  • Java实现Excel导出并添加水印

    Java实现Excel导出并添加水印

    这篇文章主要为大家详细介绍了Java如何使用poi-ooxml包导出xlsx添加水印,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-11-11
  • SpringCloud Config分布式配置中心使用教程介绍

    SpringCloud Config分布式配置中心使用教程介绍

    springcloud config是一个解决分布式系统的配置管理方案。它包含了 client和server两个部分,server端提供配置文件的存储、以接口的形式将配置文件的内容提供出去,client端通过接口获取数据、并依据此数据初始化自己的应用
    2022-12-12
  • Spring事务失效之常见场景分析

    Spring事务失效之常见场景分析

    这篇文章主要介绍了Spring事务失效之常见场景,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • 详解SpringCloudGateway内存泄漏问题

    详解SpringCloudGateway内存泄漏问题

    这篇文章主要介绍了详解SpringCloudGateway内存泄漏问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • SpringBoot如何自动生成API文档详解

    SpringBoot如何自动生成API文档详解

    网络程序正朝着移动设备的方向发展,前后端分离、APP,最好的交互交互方式莫过于通过API接口实现,这篇文章主要给大家介绍了关于SpringBoot如何自动生成API文档的相关资料,需要的朋友可以参考下
    2021-07-07
  • 深入理解Spring Boot属性配置文件

    深入理解Spring Boot属性配置文件

    这篇文章主要给大家深入的介绍了关于Spring Boot属性配置文件的相关资料,文中介绍的很详细,相信对大家具有一定的参考借鉴价值,需要的朋友们下面来一起看看吧。
    2017-02-02
  • java swing 实现加载自定义的字体

    java swing 实现加载自定义的字体

    这篇文章主要介绍了java swing 实现加载自定义的字体,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • MapStruct实体间转换的简单用法

    MapStruct实体间转换的简单用法

    今天小编就为大家分享一篇关于MapStruct实体间转换的简单用法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03

最新评论