箱子装载问题.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
箱子装载问题 箱子装载问题 PAGE5 箱子装载问题 实验五箱子装载问题一、实验目的 1、理解和复习所学各样算法的观点;2、掌握和复习所学各样算法的基本因素;3、掌握各样算法的长处和差别; 4、经过应用典范掌握选择最正确算法的设计技巧与策略; 二、实验内容及要求1、使用贪婪算法、回溯法、分支限界法解决箱子装载问题。(任选两种)2、经过上机实验进行算法实现。 3、保留和打印出程序的运转结果,并联合程序进行剖析,上交实验报告。 三、实验原理 回溯法原理: 从开始结点出发,以深度优先方式搜寻整个解空间。这个节点成为活结点,同时也成为目前的扩展节点。在目前的扩展节点处,搜寻向纵深方向一致一个新节点。 贪婪算法原理:贪婪算法经过一系列的选择来获得问题的解。他所做的每一个选择都是目前状态下局部最好选择,即贪婪选择。 四、程序代码 (1)贪婪算法 #include#includevoidswap(intx,inty){//互换intt;t=x; x=y;y=t;} voidsort(intw[], intt[],intn) //排序,有小到大 {for(intm=0;mn;m++)//为每个物件编序号t[m]=m;inti,j;intlastExchangeIndex;i=n-1;while(i0){lastExchangeIndex=0;for(j=0;ji;j++){ if(w[j+1]w[j]){swap(w[j+1], w[j]);//物件的重量互换lastExchangeIndex=j;swap(t[j],t[j+1]);} }i=lastExchangeIndex;}}voidloading( intx[], intw[], intc,intn,int*t) //最有装载{sort(w,t,n);for(inti=0;i n;i++)x[i]=0;for(intj=0;j nw[t[j]]= c;j++){x[t[j]]=1;c-=w[t[j]];//装入}}intmian(){intn,c;printf( 请输入物件个数:);scanf(%d,n);printf( 请输入最大容量:);scanf(%d,c);intx[200];//储存物件编号intw[200];//储存每个物件重量for(inti=0;in;i++){printf( 请输入第%d个物件重量:,i);scanf(%d,w[i]); }int*t=newint[n]; //物件能否装入 for(intj=0;jn;j++)x[j]=0;//初始化物件均未装入loading(x,w,c,n,t);printf( 装入物件编号为:);for(intk=0;kn;k++)if(x[k]==1)printf( %d,t[k]);return0;} (2)回溯法#include#include#definenum100intbestx[num]={0};//寄存最优解intw[num];//集装箱重量intx[num];//解intbestw=0;//最优装船重量intcw=0;//目前已装船重量intn;//集装箱个数intc1;//第一船的重量intc2;//第二船的重量//限界函数intbound(intt)//选择目前节点又分支的节余集装箱重之和{intrw=0;for(inti=t+1;tn;t++)rw=rw+w[i];return(rw+cw);//上界}//递归求解voidloadingRec(intt){inti;if(tn)//究竟叶子节点,求得一个可行解{if(cwbestw){//目前解比从前解更优bestw=cw;for(i=1;i=n;i++)bestx[i]=x[i];};return; }else{if(cw+w[t]c1) //左分支知足拘束条件 {x[t]=1;cw=cw+w[t];loadingRec(t+1);//行进持续搜寻下一节点//回溯;答复 cw与x[t]的值cw=cw-w[t];x[t]=0;}if(bound(t)bestw)//右分支知足限界条件loadingRec(t+1);}}intmain(){n=4;//集装箱个数w[1]=4,w[2]=5,w[3]=3,w[4]=2;//集装箱重量c1=8;//第一个船重量c2=7;//第二个船重量cw=0;bestw=0;loadingRec(1);//从第一个集装箱开始装箱printf( 第一船的最优装载量为:%d\n,bestw);printf( 第一船的最优解为);for(inti=1;i=n;i++)printf( %d,bestx[i]);求节余集装箱的重量intcw2=0;for(inti=0;i=n;i++)if(bestx[i]==0)cw2+=w[

文档评论(0)

136****9452 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档