本文实例讲述了C语言基于贪心算法解决装箱问题的方法。分享给大家供大家参考,具体如下:

问题描述:

有一些箱子,容量为V,同时有n个物品,每个物品有一个体积(小于等于箱子容量),要求将物品全部装入箱子中,使占用的箱子数尽量少。

贪心算法中要求每一步的解都是当前步骤中的最优解。原问题的解可以通过一系列局部最优的选择来达到,这种选择并不依赖于子问题的解。

算法思想:

1、数据结构

要求求解箱子数目,也就是说不能确定会占用多少个箱子,因此采用链表的形式来存储箱子及其信息。

同时,每个箱子中物品的数目也无法确定,同理采用链表来存储每个箱子中的物品信息。

由此得出数据节点的定义:

typedef struct

{

int gno;

int gv;

}Goods;

typedef struct node

{

int gno;

struct node *link;

}GNode;

typedef struct node1

{

int remainder;

GNode * head;

struct node1 * next;

}GBox;

2、求解思路

使打开的箱子数尽量少,也就是说每个箱子容积被尽可能多地占用。将物品按照体积降序排列后,再从第一个物品开始,挨个寻找能放下它的箱子,这样可以保证局部最优。

void GoodsSort(Goods goods[], int n)

{

int i, j;

Goods t;

for (i = 0; i

{

for (j = i + 1; j

{

if (goods[i].gv

{

t = goods[i];

goods[i] = goods[j];

goods[j] = t;

}

}

}

for (i = 0; i

printf("%d %d\n", goods[i].gno, goods[i].gv);

排序完成,就可以正式开始装箱子了。

每次都从第一个箱子开始,查看它的剩余容积还能不能放下当前的物品,能放下最好咯,放不下的话就继续查看下一个箱子的剩余容量。如果所有的已经打开的箱子都放不下当前的物品,那就只好再打开一个空箱子,把它塞进去。

GBox * GoodsBox(Goods goods[], int n)

{

GNode *h = NULL, *pg, *t;

GBox *hbox = NULL, *pb, *qb;

int i;

for (i = 0; i

{

pg = (GNode *)malloc(sizeof(GNode));///分配货物节点单元

pg->gno = goods[i].gno;

pg->link = NULL;//货物节点初始化

if (!hbox)//若一个箱子都没有

{

hbox = (GBox *)malloc(sizeof(GBox));

hbox->remainder = 10;

hbox->head = NULL;

hbox->next = NULL;

}

qb=pb = hbox;//都指向箱子头

while (pb)//找箱子

{

if (pb->remainder >= goods[i].gv)/能装下

break;//找到箱子,跳出while

else

{

qb = pb;

pb = pb->next;//qb是前驱

}

}/遍历箱子结束

if (pb==NULL)/需要新箱子

{

pb = (GBox *)malloc(sizeof(GBox));//分配箱子

pb->head = NULL;

pb->next = NULL;

pb->remainder = 10;//初始体积

qb->next = pb;//前驱指上

}

if (!pb->head)//如果箱子里没货

{

pb->head = pg;

t = pb->head;

}

else

{

t = pb->head;

while (t->link) t = t->link;//货尾 尾插

t->link = pg;

}

pb->remainder -= goods[i].gv;

装箱

}

return hbox;

希望本文所述对大家C语言程序设计有所帮助。

c语言装箱问题思路,C语言基于贪心算法解决装箱问题的方法相关推荐

  1. 装箱问题c语言函数,C语言基于贪心算法解决装箱问题的方法

    本文实例讲述了C语言基于贪心算法解决装箱问题的方法.分享给大家供大家参考,具体如下: 问题描述: 有一些箱子,容量为V,同时有n个物品,每个物品有一个体积(小于等于箱子容量),要求将物品全部装入箱子中 ...

  2. 背包问题 贪心算法 java_JS基于贪心算法解决背包问题

    前面我们分享了关于js使用贪心算法解决找零问题,本文我们接着为大家介绍JS基于贪心算法解决背包问题. 贪心算法:在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做 ...

  3. 背包问题 贪心算法 java_JS基于贪心算法解决背包问题示例

    本文实例讲述了JS基于贪心算法解决背包问题.分享给大家供大家参考,具体如下: 贪心算法:在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局 ...

  4. 算法经典“钓鱼”问题详解 基于贪心算法 C语言描述

    算法经典"钓鱼"问题详解 基于贪心算法 初始条件 在一条水平路边,有 n 2 ≤ n ≤ 25个钓鱼池,从左到右编号为1.2.3.--.n.小明有H1 ≤ H ≤ 16个小时的空余 ...

  5. C语言会场安排问题贪心算法,贪心算法解决会场安排问题多处最优服务次序问题(含源代码).doc...

    贪心算法解决会场安排问题多处最优服务次序问题(含源代码) 西 安年月日-,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源.每个活动i都有一个要求使用该资源 ...

  6. 贪心算法解决最优装载问题c语言,贪心算法解决最优装载问题

    <贪心算法解决最优装载问题>由会员分享,可在线阅读,更多相关<贪心算法解决最优装载问题(4页珍藏版)>请在人人文库网上搜索. 1.author : Kevin Black/这个 ...

  7. 转载︱案例 基于贪心算法的特征选择

    本文转载于R语言中文社区,详情链接 相关帖子 转载︱案例 基于贪心算法的特征选择 用GA算法设计22个地点之间最短旅程-R语言实现 ---------------------------------- ...

  8. 基于贪心算法的马踏棋盘哈密顿回路问题

    基于贪心算法的马踏棋盘哈密顿回路问题 Github 链接 问题分析 马踏棋盘其实相当于一个解空间的搜索问题,而遍历到每一个节点并要求最后可以回到起点本质上是一个哈密顿回路问题 目前大部分马踏棋盘的相关 ...

  9. rgv动态调度MATLAB代码,基于贪心算法的智能RGV的动态调度策略

    李胜成 摘  要:一种智能加工系统由8台计算机数控机床(CNC).1辆轨道式自动引导车(RGV).1条RGV直线轨道.1条上料传送带.1条下料传送带等附属设备组成.文章通过研究RGV的选择判断规律,以 ...

最新文章

  1. Python+selenium 自动化-基本环境搭建,调用selenium库访问百度查询天气实例演示
  2. 金字塔式梯度方向直方图(PHOG)
  3. 【SpringBoot 2】(三)SpringBoot相较于Spring的特点
  4. linux上的web服务器搭建
  5. Python+pandas+matplotlib数据分析与可视化案例(附源码)
  6. 将js对象转化为树形结构
  7. 【Away3D代码解读】(一):主要类及说明
  8. 用于语音识别的数据增强
  9. gff3转mysql_GBrowse的安装和使用
  10. Socket(网络编程)面试题
  11. 计算机专业就业发展现状,计算机专业就业形势分析
  12. Excel妙用-公式结果我都要
  13. 公司最大的内卷,是“管理错位”
  14. 转自于四火的唠叨(工程师的生活)
  15. 小红书笔记api_小红书学习笔记
  16. [原创] HBuildX,微信小程序模拟器报错(如若已在管理后台更新域名配置,请刷新项目配置后重新编译项目)
  17. DFD图练习题(信用卡管理系统CCMS)
  18. 国密算法Go语言实现(详解)(九) ——SM2(椭圆曲线公钥密码算法)
  19. Electron 麒麟 Linux 系统 root 账户报错
  20. mysql数据库relay_MySQL 数据库主从复制小知识

热门文章

  1. 正则表达式匹配 类C语言注释
  2. UI 意见征集 - 博客文章、个人主页
  3. 国内手机强删谷歌服务,告诉你该怎么办
  4. Python SimpleITK提取三维Canny Sobel边界代码
  5. daemonize(daemonized)
  6. [转] 钉钉的H5性能优化方案
  7. 百家号怎么写爆文?百家号写爆文有哪些技巧
  8. STS 使用git 更新代码时,冲突解决
  9. 技术讨论:我心中TOP1的编程语言
  10. 新品周刊 | 杰克宝与布加迪推出独家联名腕表;特步騛速系列跑鞋全面上市