c语言-搜索算法.ppt

  1. 1、本文档共64页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
两种搜索(sōu suǒ)的比较 BFS:适合需要(xūyào)最优解,且状态较易保存的情况. DFS:适合是否存在可行解的判定.(其他算法中也有应用). * * 第六十三页,共64页。 * Welcome to HDOJ Thank You ~ * * 第六十四页,共64页。 优先(yōuxiān)队列 使用优先队列维护队列单调(dāndiào)性 使并不单调(dāndiào)入队的状态按照用时递增的顺序出队 * * 第三十一页,共64页。 Ignatius and the Princess I Sample Input 5 6 .XX.1. ..X.2. 2...X. ...XX. XXXXX. Sample Output It takes 13 seconds to reach the target position, let me show you the way. 1s:(0,0)->(1,0) 2s:(1,0)->(1,1) 3s:(1,1)->(2,1) 4s:(2,1)->(2,2) 5s:(2,2)->(2,3) 6s:(2,3)->(1,3) 7s:(1,3)->(1,4) 8s:FIGHT AT (1,4) 9s:FIGHT AT (1,4) 10s:(1,4)->(1,5) 11s:(1,5)->(2,5) 12s:(2,5)->(3,5) 13s:(3,5)->(4,5) FINISH 怎么(zěn me)还需要输出路径!? * * 第三十二页,共64页。 记录(jìlù)路径 记录(jìlù)前驱! 记录(jìlù)当前状态是由哪一个状态转移而来的 * * 第三十三页,共64页。 其他优先(yōuxiān)问题---逃离迷宫 Sample Input 2 5 5 ...** *.**. ..... ..... *.... 1 1 1 1 3 Sample Output no 与刚才(gāngcái)的BFS有什么区别,又有什么相同点? * * 第三十四页,共64页。 转弯(zhuǎn wān)次数优先 既然要求转弯次数最少,我们就要保证队列里的状态按转弯次数单调递增排列,这就要求各个(gègè)状态按照转弯次数递增的顺序入队.即转弯0次的全部入队以后,才允许转弯1次的入队.依次类推。 具体怎么操作? 将每个状态转一次弯所能达到的所有结点入队. 这样就保证了第一次搜到的目标状态即是所用转弯次数最少的答案. * * 第三十五页,共64页。 更加(gènjiā)强劲的DTBFS 双向广搜(Double Threshold BFS) * * 第三十六页,共64页。 双向广搜 一般来说,从初始结点和目标结点开始分别作两次BFS,每次选择队列中结点少的一边进行扩展,并且检测两边是否(shì fǒu)出现了状态重合. 有兴趣的同学可以试试 Solitaire * * 第三十七页,共64页。 来看另一类搜索(sōu suǒ)问题 深度(shēndù)优先搜索(depth first search ) * * 第三十八页,共64页。 深度优先(yōuxiān)搜索 DFS (depth first search )适用的范围: 用于快速(kuài sù)寻找可行解,但不要求解为最优. 应用不局限于搜索题. * * 第三十九页,共64页。 能走出去(chū qù)吗?这个…… * * 第四十页,共64页。 DFS的遍历(biàn lì)方式 每次访问到一个结点(状态)时,检查其邻接结点,若存在可访问子结点时,则递归访问该结点,若无子节点(jié diǎn)可以访问或子节点(jié diǎn)已全部被访问完毕则返回上一层。 * * 第四十一页,共64页。 DFS的遍历(biàn lì)路径 遍历(biàn lì)完成 * * 第四十二页,共64页。 补充(bǔchōng)知识 什么是递归? 关键字:调用自身 简单的例子: 阶层(jiēcéng)的递归实现 int func(int n){ if(n == 1) return 1; else return n * func(n – 1); } 递归的出口(chū kǒu) 优点:编码量小 缺点:效率低 * * 第四十三页,共64页。 递归过程(guòchéng) 调用 调用 调用 返回 返回 返回 * * 第四十四页,共64页。 连连看 Sample Input 3 4 1 2 3

文档评论(0)

158****8111 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档