贪心算法-----------------装箱问题
创始人
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");
}
}

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...