- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
广度优先搜索第一讲
第八章 广度优先搜索 广度优先搜索的过程 广度优先搜索算法(又称宽度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想。 那么广度优先搜索到底是怎样的呢,我们来看一下这个例子: (广度优先一般用于解决图的问题) 马老师走一个迷宫,以前的走法是:发现岔路,那么就选择一条,走到底,如果走不通,再回到岔路口,走另一条路。这个就是深搜。 广度优先搜索的过程 但是这一次,马老师打算改变策略。从起点开始走,一旦发现岔路,马老师就释放分身,分别在每个方向上都放上一个分身,例如有两个方向:那么我们暂且给两个分身取名为1,2。但是马老师一心不能两用,同时为了保证公平,他决定每次控制一个分身走一步路,然后切换控制另一个分身。例如:先让1走一步,然后控制2走一步,但是,某个时刻,马老师发现,有一个分身又遇到了岔路,这个时候,只能让分身再次施展分身之术了,那么举个例子:某个时刻,1又到了一个3岔路口,为此,1分身为了11,12,13。这么一来,马老师在控制方案就变为先让11走一步,然后12,接着13,最后2。一次循环下去(当然又出现新分支那么同理)。直到有 一个分身走到终点,那么就完成了目标。 那么具体如何实现这个操作呢?相对于深搜来说可能就更直观一点了。 为了模拟如何控制每个分身,我们可以来看上图的一种数据结构队列。 为了更好的理解,我们可以把他认为是一个数组。 这么一来,我们可以发现,为了循环控制1,2,首先我将1,放到a[1]中去,2放到a[2]中去,然后我开始控制他们,首先将a[1]取出来,走一步,然后把1放到a[3]里,接着取出a[2]走一步,再把2放到a[4]里……假如某个时刻1在a[n]中,2在a[n+1],当我们取出1是发现,有新的3岔路口,那么1就分成了11,12,13。那么我们分别把他们放入a[n+2],a[n+3],a[n+4]中去(当然1就消失了)……直到走到出口,我们就停下来。 通过上面的操作,我们发现一些关于这个队列(数组)的特性。 队列有两个口子,一个是拿出元素的(出队操作),一个是塞进元素的(进队操作)。 为了准确找到进队和出队的位置(数组元素的位置),我们要用到两个指针(变量)来指向(记录)当前元素的位置,常用的就是上图所示的front,rear两个变量名,当然你也可以取名为f,r。 那么如何实现操作呢? 我们先来看中文写成的代码: a[1] = 起始点 F=1 R =2 // 一开始头指向第一个位置,尾巴指向要放进元素的位置,当然你f=r=1也是可以的。 While (直到我们无路可走,或者走到目的地才跳出) begin 从当前的队列中取出头一个也就是a[f]; a[f]向前走一步,如果有岔路11,12……1n,那么依次放到队列中去,同时r= n+2,指向最后一个元素的后一位。 End. 以上就是简化版的框架了,用数组模拟队列是不是就没那么复杂了! 那么什么是无路可走,因为有可能没有情况能到达终点,都是死路,所以当我们把里的数字全部取完了(有可能取出1以后1不能向前走了,也没岔路了,那就不能再放到队列里去了),数字取完的意思就是(f=r)当然如果一开始f=r=1那么就是fr的时候取完了。 那么什么是走到目的地了呢,有时候是坐标,有时候是一个值。 Program Bfs; 初始化,初始状态存入队列; 队列首指针head:=0; 尾指针tail:=1; repeat 指针head后移一位,指向待扩展结点;(取出当前元素,因为一开始为0) for I=1 to max do //max为产生子结点的规则数(可以走的岔路个数) begin if 子结点符合条件 then(也就是说岔路能不能走) begin tail指针增1,把新结点存入列尾;(r+1,a[r+1]中放入新元素) if新结点与原已产生结点重复then删去该结点(取消入队,tail减1) (上面这句话的意思,有可能2走和1走的下一步都是同一个点,那就要取消一个分身了,或者所一个分身就没必要再进入队列了,建议在入队列前就判断。) else if新结点是目标结点then输出并退出; end; end; until(head=tail); //队列为空 广度优先搜索注意事项(结
您可能关注的文档
- 平面的基本性质与推论课件2_共面共线共点.ppt
- 平面中,不同尺度下的“点、线、面”要素认知.ppt
- 平面直角坐标系学案-个人整理精华版.docx
- 平面直角坐标系中的平行直线.ppt
- 平面直角坐标系2 修改.pptx
- 平面直角坐标系(全).ppt
- 平面直角坐标系面积问题整合.ppt
- 平江基地分析.ppt
- 平面构成教学课件1.ppt
- 平面直角坐标系第1课时.ppt
- 8 黄山奇石(第二课时)课件(共22张PPT).pptx
- 22《纸船和风筝》教学课件(共31张PPT).pptx
- 17 松鼠 课件(共23张PPT).pptx
- 23《海底世界》课件(共28张PPT).pptx
- 21《大自然的声音》课件(共18张PPT).pptx
- 第12课《词四首——江城子 密州出猎》课件 2025—2026学年统编版语文九年级下册.pptx
- 第2课《济南的冬天》课件(共42张PPT) 2024—2025学年统编版语文七年级上册.pptx
- 17 跳水 第二课时 课件(共18张PPT).pptx
- 第六单元课外古诗词诵读《过松源晨炊漆公、约客》课件 统编版语文七年级下册.pptx
- 统编版六年级语文上册 22《文言文二则》课件(共27张PPT).pptx
原创力文档


文档评论(0)