信息学奥赛:广度搜索课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《信息学奥赛:广度搜索课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 信息学 广度 搜索 课件
- 资源描述:
-
1、广度搜索在程序设计中的应用深度优先:SLMN F F O P F Q F 广搜优先:SLOMF PQN FFF“广搜广搜”用来解决那类问题用来解决那类问题?用深度优先搜索找最优解时必须搜索完所有路径,即使一个目标用深度优先搜索找最优解时必须搜索完所有路径,即使一个目标结点在很浅的树枝上,也得等到它左边所有结点均被搜索后才能结点在很浅的树枝上,也得等到它左边所有结点均被搜索后才能找到它。用这种方法求某些最优解时,效率比较低。而广度优先找到它。用这种方法求某些最优解时,效率比较低。而广度优先搜索,能较好地解决这个问题。搜索,能较好地解决这个问题。广度优先搜索是最简便和常用的图形搜索算法之一,从对图
2、形的广度优先搜索是最简便和常用的图形搜索算法之一,从对图形的遍历来看,遵循遍历来看,遵循“从浅入深从浅入深”的搜索策略。在这种搜索过程中,的搜索策略。在这种搜索过程中,树上的结点扩展是沿着深度的树上的结点扩展是沿着深度的“断层断层”进行的,所以这种方法一进行的,所以这种方法一定能保证找到最短(步数最少)的解答序列。在不少题中要求找定能保证找到最短(步数最少)的解答序列。在不少题中要求找到经历步骤最少而达到目标的方案时,多采用此种搜索方法。到经历步骤最少而达到目标的方案时,多采用此种搜索方法。“广搜广搜”所用的数据结构所用的数据结构-队列队列为了体现先生成先扩展的执行方式又能保留所有生成的结点以
3、待为了体现先生成先扩展的执行方式又能保留所有生成的结点以待进一步扩展,广度优先搜索在数据结构上引用了进一步扩展,广度优先搜索在数据结构上引用了“队列队列”结构。结构。队列是一种线性表,具有队列是一种线性表,具有先进先出先进先出的特点,对于它所有的插入和的特点,对于它所有的插入和删除操作分别仅在队列尾和队列首进行。定义两个删除操作分别仅在队列尾和队列首进行。定义两个“指针指针”变量变量head和和tail,分别用来指向队列的头和尾。初始结点先入队,头,分别用来指向队列的头和尾。初始结点先入队,头指针指向待扩展结点,每生成一个子结点,则尾指针指针指向待扩展结点,每生成一个子结点,则尾指针tail增
4、加增加1,当前结点的所有子结点均生成后,头指针向后移动(即加当前结点的所有子结点均生成后,头指针向后移动(即加1),),位于位于head指针之前的(已被删除)为已扩展结点,指针之前的(已被删除)为已扩展结点,tail指向所有指向所有已生成结点的最后一个。若已生成结点的最后一个。若head指针大于指针大于tail指针,表示所有解指针,表示所有解答树上的结点已产生。如果目标结点仍求出现,说明答树上的结点已产生。如果目标结点仍求出现,说明“无解无解”。原理解析原理解析headtailsLOMFPQNFFF01122334678广度优先搜索的算法描述广度优先搜索的算法描述Procedure BFS初始
5、化,初始状态存入初始化,初始状态存入OPEN表;表;队列首指针队列首指针head:=0;尾指针;尾指针tail:=1;repeatfor I:=1 to max do /其中,其中,max为产生子结点的规则数为产生子结点的规则数 begin if 子结点符合条件子结点符合条件 then begin tail指针增指针增1,把新结点存入队列尾;,把新结点存入队列尾;if 新结点与原已产生的结点重复新结点与原已产生的结点重复 then 删去该结点(取消入队,删去该结点(取消入队,tail减减1)else if 新结点是目标结点新结点是目标结点 then 输出并退出;输出并退出;end endunt
6、il(head=tail);广度优先搜索的注意事项广度优先搜索的注意事项(1)每生成一个子结点,就要提供指向它们)每生成一个子结点,就要提供指向它们父亲结点的指针。当解出现时,通过逆向跟踪,父亲结点的指针。当解出现时,通过逆向跟踪,找到从根结点到目标结点的一条路径。找到从根结点到目标结点的一条路径。(2)生成的子结点要与前面的所有已产生结)生成的子结点要与前面的所有已产生结点比较,以免出现重复结点,浪费时间,还可点比较,以免出现重复结点,浪费时间,还可能陷入死循环。能陷入死循环。(3)广度优先搜索的效率还有赖于目标结点)广度优先搜索的效率还有赖于目标结点所有位置情况,如果目标结点处在比较深的层
展开阅读全文