贪心算法-----------------装箱问题
创始人
2024-02-10 19:31:18
0

贪心算法中必须设定一个贪心准则-----来寻求每一步的最优解,但最后往往不是问题的整体最优解。

问题:假设有n个物品,其体积为V1,V2,V3,V4.......Vn,有若干个体积为V的箱子(理论物品的体积应该小于箱子的体积)

要求把所有物品全部装入箱子中,要求打开的箱子数最少。

分析:怎样合理化分配才能使得打开的箱子数最少呢?首先我们应该把所有的物品体积进行降序排序,先把体积最大的物品进行装箱

第二个物品从第一个箱子进行遍历看第一个箱子剩余的空间是否能容纳此物品,如果可以就装入,如果不可以就再开一个箱子,剩余

的物品依次类推。------------这也就是装箱问题的贪心准则。

声明物品信息的结构体-------物品编号,物品体积

声明物品节点和箱子节点的结构体---------相当于所有打开的箱子拉成了一条链表每个箱子上面的物品又会形成一条链表

#include
#include
#define N 5
#define V 10
typedef struct
{int gno;//物品编号int gv;//物品体积
}ElemG;//物品信息
typedef struct node
{int gno;struct node *link;
}GoodsLink;//物品节点
typedef struct box
{int reminder;//剩余体积GoodsLink *hg;//物品节点的头指针struct box *next;
}BoxLink;//箱子节点
BoxLink *BinPacking()
{
ElemG *g;
int i,j;
BoxLink *p,*tail,*hbox=NULL;
GoodsLink *new1,*q;
g=(ElemG *)malloc(N *sizeof(ElemG));
//物品信息的初始化
for(i=0;iremindernext);if(!p)//开新箱子(1.第一个物品进入2.遍历箱子后没有一个箱子的剩余空间可以放下此物品){//创建箱子节点p=(BoxLink *)malloc(sizeof(BoxLink));//初始化箱子p->reminder=V;p->next=NULL;p->hg=NULL;if(!hbox)//挂箱子hbox=tail=p;elsetail=tail->next=p;}//创建物品节点new1=(GoodsLink *)malloc(sizeof(GoodsLink));new1->gno=g[i].gno;new1->link=NULL;if(!p->hg)//判断要挂的箱子上是不是NULLp->hg=new1;else{for(q=p->hg;q->link;q=q->link);//遍历箱子节点上的物体尾插q->link=new1;}p->reminder=p->reminder-g[i].gv;//每次放入一个物品都需要算出剩余空间
}
return hbox;
}
int main()
{
BoxLink *p,*hbox;
GoodsLink *q;
int cnt=0;
//输出
hbox=BinPacking();
for(p=hbox;p;p=p->next)
{printf("第%d个箱子:",++cnt);for(q=p->hg;q;q=q->link)printf("%3d",q->gno);printf("\n");
}
}

相关内容

热门资讯

AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWR报告解读 WORKLOAD REPOSITORY PDB report (PDB snapshots) AW...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
群晖外网访问终极解决方法:IP... 写在前面的话 受够了群晖的quickconnet的小水管了,急需一个新的解决方法&#x...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
Azure构建流程(Power... 这可能是由于配置错误导致的问题。请检查构建流程任务中的“发布构建制品”步骤,确保正确配置了“Arti...