搜索深度优先剪枝PPT课件.ppt_第1页
搜索深度优先剪枝PPT课件.ppt_第2页
搜索深度优先剪枝PPT课件.ppt_第3页
搜索深度优先剪枝PPT课件.ppt_第4页
搜索深度优先剪枝PPT课件.ppt_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

,教学目标深度优先搜索的一般步骤如何剪枝如何编程内容要点复杂问题如何切入化简思维深度优先搜索的一般步骤写好递归程序,1,任务:登山人选问题攀登一座高山,假定匀速前进,从山脚登到山顶需走N天,下山也需N天。山上没有水和食品,给养要靠登山队员携带,而每个队员所携带的给养量要少于他登顶再返回山脚所消耗的给养量。因此,一定要组成一个登山队,在多人支援的情况下,保证有一个人登顶。现在登山俱乐部有P个人待选,我们将P个人依次编号为k=1,2,P,令Ek表示编号为k的人每日消耗的给养量,Mk表示编号为k的人最多可携带的给养量。登山计划要求所组成的登山队所有成员同时出发,其中一些人分别在启程若干天后返回,最终保证出发N天后至少有一人登顶,出发2N天后所有人都已返回山脚,无人滞留山上。,2,编程要求:用键盘输入天数N(NNP;for(inti=1;iEi;for(inti=1;iMi;,27,定义递归函数Search(intk,intdayUse)其中k表示要挑选登山队伍中的第k个人,dayUse表示目前队伍每天消耗的给养量。为了记录目前哪些人已被选入登山队伍中,我们用一个数组intwhoMAXP来记录,而数组元素的下标正好可以表示搜索树中的层数,即表示该队员是登顶者还是第几号支援者。Search函数可以实现如下:,28,voidSearch(intk,intdayUse)if(kP)return;/所有人均已入选,递归终止for(inti=1;i=minNeed)/所需太多continue;/换人再试(剪枝)takek=takek-1+Mi;,30,if(needk=takek)/组队完成,更新最优解/ifminNeed=needk;minP=k;takek=needk;/最后一人不必满负荷for(intj=1;jp;coutclubi.need;/forcoutclubi.take;clubi.t=(float)clubi.take/(float)clubi.need;/for,42,voidsort()/排序(对俱乐部的人,按独行天数从大到小排序)for(j=1;jclubi.t)q=clubi+1;clubi+1=clubi;clubi=q;,43,intcm(inta,intb)/向上取整函数if(a%b=0)returna/b;elsereturn(a/b)+1;,44,voiddisplay(intk1)/输出函数cout登山人数为k1,最小消耗为mimneedendl;for(i=1;i=k1;i+)cout入队者的号为listi.No登高为listi.hhkneed)/k个人所带已大于所需kd=0;/置所差为0elsekd=kneed-ktake;/计算k个人所差,47,intknd=0;/计算入队的k个人每日的消耗总和for(intm=1;m=k;m+)knd=clubm.need+knd;kh=cm(kd,knd);/计算对入队的k个人的支援高度,48,listk.No=clubi.No;/记第k个入队者的编号listk.hh=h;/记第k个入队者的支援高度if(kh=0)/不需支援了,队已组成/ifkhif(kneedmimneed)/如果k个人所需小于前次mimneed=kneed;/更新最小消耗值kk=k;/入队人数/ifkh,49,elseSe

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论