优先队列bfs.pptVIP

  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文档。上传文档
查看更多
优先队列bfs

POJ2044 Weather Forecast 有一朵2*2的云朵,和一个4*4的地区。被云层覆盖的区域在当天一定有雨下,云层有4种移动方式 。已知N天内的节日日期,希望在这N天内,节日期间不要下雨,并且每个地方不能连续7天不下雨。问能否满足上述要求? 分析发现,只要4*4的地区中,四个角在6天内都下过雨,那么其它地方肯定也下过雨。 因此只需在状态中记录:当前日期、云朵位置、四个角上次下雨分别是在几天前,BFS搜索每天云朵的移动方式,最终检查N天后是否存在合法的状态即可。 POJ1475 Pushing Boxes /problem?id=1475 双重BFS(对箱子,对人) 箱子的状态总数:坐标+方向,20*20*4。 主框架是对箱子进行BFS,尝试向4个方向移动。若能移动,再对人BFS,检查人能否到达箱子的一侧把箱子推走。 除了初始状态外,每次箱子移动后,人一定在箱子移动方向的后边邻格中。因此人的位置不必添加入总状态。 POJ3322/3323 Bloxorz /problem?id=3322 /problem?id=3323 Bloxorz是一款风靡世界的小游戏。Bloxorz I是带有各种障碍物、机关的搜索。 Bloxorz II是纯滚动,没有任何机关,但是地图无限大,需要用一些数学方法来优化。 首先BFS预处理出起点到[-10..10,-10..10]内的各个点、各个状态(直立、横卧、竖卧)的最小步数。 如果最初那个木块是立着的,那么肯定先让它尽快地滚到[-10..10,-10..10]内,然后再考虑如何进洞。怎么尽快到呢?肯定是立着滚更快,而不是躺下来横着滚。所以可以直接计算出木块滚到[-10..10,-10..10]内的最小步数,然后加上BFS出的进洞的步数即为答案。 但是如果最初那个木块是躺着的,还需要枚举10个点,让它分别立到这10个点上,再采用上面的方法尽快滚到[-10..10,-10..10]内。这10个点的位置就是枚举木块横滚[-2,2]步再向上或下直立起来。 同余类BFS POJ3492 Knapsack II /problem?id=3492 题意:N种长度的小木条(最大公约数为1)最长不能够拼成多长的木条。 把木条按照长度最短的木条的长度分为几个同余类,我们只需要求出每个同余类内能够拼成的最短的木条,那么这个同余类内比他长的木条都可以通过添加最短的那根木条拼成。 可以把同余类看成节点,从每个 x 到 (x+Ai) mod L 连一条长度为 Ai 的边(Ai为每根木条长度,L为最短木条长度),然后以0为起点求单源最短路。 在所有点到0号点的最短路中取最大值记为T,那么最长不能够拼成的木条就是T-L。 A*算法 A*算法给每个状态进行一次评估,每次取出“当前实际代价+未来预期代价”最小的状态进行扩展。 因此我们可以用一个二叉堆来保存这些状态,以实现取出最小值、插入新状态等操作。 A*算法第一次从堆中把终态作为最小值取出时,就找到了最优解。 A*算法核心在于设计预期未来代价的“估价函数”,设计标准是估计值不劣于未来的实际值。 若估计值劣于未来实际值,则有可能本来在最优解搜索路径上的状态被错误地估计了较差的值,导致非最优解的搜索路径上的状态在最优解之前被取出,答案错误。 若估计值优于未来实际值,则仅仅是在最优解取出之前多搜索了一些状态,在此基础上A*算法一定正确,估价越接近未来实际值,效率越高;估价为0时,退化为普通的搜索。 POJ2449 第K短路 题意:有若干个询问,每次询问图中从a到b的可重复第k短路的长度。 首先在反向图上使用Spfa或Dijkstra求出所有点到终点的最短路径。 估价函数:当前走过的距离+该点到终点的最短路长度。 用堆(优先队列)维护,每次取出估价函数最小的一个点扩展。 第几次从堆中取出点u,就是找到了u的第几短路。 第K次取出终点时程序结束。 POJ1077 八数码 POJ1945 Power Hungry Cow /problem?id=1945 给定两个变量a、b,起初a=x,b=1,每次可以执行a*a,a*b,b*b,a/b,b/a,a/a,b/b七种操作,并且把结果存到其中一个变量里,另一个变量不变,并且执行过程中变量里存储的必须是整数。问至少需要多少步使得两个变量中其中一个的值为x^p。 问题可以转化为直接记录a和b的指数,这样乘除法操作可以变为加减法操作,最终让a和b中的一个等于p。搜索每次采用哪种操作,并使用Hash进行判重。 A*算法,估价函数:a和b中较大的一个自乘2直到=p所需的步数。 剪枝一:a,b两个数实际上是无序的,不妨始终令a为较大者,b为较小者,剪去一半的状态。 剪枝二:如果gcd(a,b)不能整除p,该状态一定不能达到目标,直接舍弃

文档评论(0)

ailuojue + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档