BFS作为寻路算法初步思想.docVIP

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
BFS作为地图寻路算法的思想 张季伦 很早以前在博客园看到一篇翻译国外的文章,讲的是BFS,DFS,以及A*几个图遍历算法在实际中的应用,当然,A*可以作为人工智能的一个初步了。 但是感觉很悬呼,不过现在看来要明白一些了。 下面就来分享一下BFS作为寻路算法的思想(只是思想,没有实现)。 在一般的数据结构教材里,都会用一个队列实现迷宫算法来当作简介堆栈数据结构的应用,这个算法实现了走迷宫的问题解决。不过这个算法的效率狠狠低的;并且它的复杂度很容易就会被支路的选择来左右,这时唯一需要确定的就是随机选择支路会降低这种影响。 今天的问题环境也是这样的,我们同样处于一个迷宫中,而且这个迷宫被网格化。不过我们的目标不是走出去,而是用比较低的代价找到迷宫中一个可用点到另一个可用点的路径,走出整个迷宫是这个问题的一个特殊解。具体的实例如下图: 我们网格化了如下迷宫: S S S S S S S S S S S S 我们规定S标记的方格是不可用的障碍,而空白方格是可以走的通路,于是我们的目标可以这样描述: S S Start S S S S S S S S S S End 我们任意设定了两个可用的通路点,一个为Start,一个为End,意为起点和终点;我们需要找到一条介于Start和End之间的最短路径。从这个实际例子来说,这路径我们可以标记出来(如下图): S S Start S S N1 S S S N2 S S N3 S S S N4 End 依次沿着N1,N2,N3,N4就能最快达到终点,但是实际我们如果不用某些更高级的算法的话我们只不可能一次就找到这个路径的。堆栈寻路算法很容易在这个例子中犯错,如图: S S N6 N7 . Start S N5 S . N1 S N4 S . S N2 N3 S . S S S . S End N15 . 他可能沿着一条较远的路径一直寻找,较好的结果是好在它依靠这条路径找到了终点,比较悲剧的结果是走了很长的路却发现是死胡同,只好折返。这一切都是由既定点对于未知点的随机选择而引起的。 接下来描述这个BFS寻路算法的基本思想: 我们首先确定起点和中点(以坐标确定)。 自起点和终点同时开始做条件式的BFS搜索(至于什么是条件式的BFS搜索一会儿会解释)。 当两个搜索范围第一次出现焦点时,搜索完成。 链接两个搜索范围内的最短路径,这个路径就是期望的较短路径。 算法完成。 下面来具体解释: 在这个示例中,我们仍然将进行BFS中的节点(坐标方块)划分为三种颜色:黑色(Black),灰色(Gray),白色(White)。黑色代表已经被发现且处于图内部的,灰色表示处于当前图边缘的,白色表示为被发现的。 对一个节点来说,与它的六个方向相邻的可用节点(方块)被认为是相邻(有弧)节点。 所谓的条件式BFS搜索就是对S方块(障碍)做预处理把它们直接pass掉。 下面还是以上面这个图为实例: 1.原始状态 S S Start S S S S S S S S S S End 2.开始算法Step1 G S S Start G S S G G S S S S S G S S S G End G 第一轮搜索结束,起点和终点相邻的可用节点全部被着色为灰色。 2.开始算法Step2 B S S Start B S S B B S S S G G G S S B S S G S B End B G 这一次可以看到,刚才的灰色节点被着为黑色,他们的邻接可用节点变成了灰色,而且也出现了相遇(已经用蓝色标出)。 2.收尾算法Step1 B S S Start B S S B W S S S G W G S S W S S G S W End B G 将最最直接的被发现节点连起来,用W标记,就是一个较短的路径了,在这个特例里,它也是最最短的。我们先不考虑收尾算法的实现,BFS至少是缩小了寻路范围。这比堆栈寻路扫描整个迷宫要聪明得多。 OK,这就是BFS寻路的一点基本思想了。即时战略游戏中单位的移动就是有这种寻路的思考在里面,当然那会复杂得多。

文档评论(0)

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

分享好文档!

1亿VIP精品文档

相关文档