星算法入门.docVIP

  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文档。上传文档
查看更多
星算法入门

网上下载的 5 b$ M6 l5 \) F??h学习了一下A*算法,但是天生对算法无奈??,还好一不小心找到下面这篇文章。如果你苦于无法理解网上各大牛人的巅峰讨论以及他们火星文般的源代码,那么这篇文章实在是太适合你不过了~? ?快来看吧,我也正在看,大家一起路过,学习下~~ $ {. _5 c; z g3 m+ \+ [* a8 V b4 c% O4 \: p% @; [- e( C 来源于: GameD ~9 D) S5 D$ ^0 L( w0 R 作 者: Patrick Lester [链接标记pwlester@] ) U. c; J5 m) F$ O* r0 n s$ O 翻 译: 孙璨 [链接标记tlwanan@]6 L- ] \3 C! t3 Y ??e+ {, n- P1 v) T0 f P A% C7 L- R. `$ [$ Z8 E虽然A*(读作A星)算法对初学者来说是比较深奥难懂,但是一旦你找到门路了,它又会变得非常简单。网上有很多解释A*算法的文章,但是大多数是写给那些有一定基础的人看的,而您看到的这一篇呢,是真正写给菜鸟的。- ?, J O7 O- q5 z/ s; D+ n0 `4 ? k8 ~8 K. b( v2 b 本篇文章并不想给这个算法题目作一些权威性论断,而是阐述它的基本原理,并为你理解更多相关资料与讨论打下基础。文章末尾给出了一些比较好的链接,放在“进阶阅读”一节之后。# ^1 z# s, q+ z0 P 9 u y2 N: ~$ C??D* R最后,本文不是编程规范,你将可能使这里讲述的东西编写成任何计算机语言。在本文的末尾我还给出了一个例子程序包的下载链接,也许正合你意。在这个包中有C++和Blitz Basic两个版本的程序代码,如果你只是想看看A*算法是如何运作的,该包中也有可直接执行的文件供你研究。 ( z. t U. h: N0 z; r( P$ m4 |??h6 X( B, x3 z! q4 C8 {$ X! @ 我们还是要超越自己的(把算法弄懂),所以,让我们从头开始吧!2 a5 F) k% z- {# x1 t7 k# y  6 p6 p+ k* n* H9 ~ 初步:搜索区域 $ n: a0 x4 H4 | B6 D4 B ! J1 d, A @2 s U( V我们假设某个人要从A点到达B点,而一堵墙把这两个点隔开了,如下图所示,绿色部分代表起点A,红色部分代表终点B,蓝色方块部分代表之间的墙。- t; D7 b2 f: m e v) j3 W 7 Z9 }5 M% {3 i- x+ R$ A; O; _7 E T* S S% p ??~1 o, \1 O X5 U [图一] / B7 a6 T$ Q6 R3 V# U% @, J你首先会注意到我们把这一块搜索区域分成了一个一个的方格,如此这般,使搜索区域简单化,正是寻找路径的第一步。这种方法将我们的搜索区域简化成了一个普通的二维数组。数组中的每一个元素表示对应的一个方格,该方格的状态被标记为可通过的和不可通过的。通过找出从A点到B点所经过的方格,就能得到AB之间的路径。当路径找出来以后,这个人就可以从一个格子中央移动到另一个格子中央,直到抵达目的地。 1 { Z M1 k9 K y这些格子的中点叫做节点。当你在其他地方看到有关寻找路径的东西时,你会经常发现人们在讨论节点。为什么不直接把它们称作方格呢?因为你不一定要把你的搜索区域分隔成方块,矩形、六边形或者其他任何形状都可以。况且节点还有可能位于这些形状内的任何一处呢?在中间、靠着边,或者什么的。我们就用这种设定,因为毕竟这是最简单的情况。 _1 A6 f0 Y2 ^% N- V T ^4 X- C9 F. P3 P) ^开始搜索/ v* a# F* a4 M, g( K . N7 I L4 k- b% _ 当我们把搜索区域简化成一些很容易操作的节点后,下一步就要构造一个搜索来寻找最短路径。在A*算法中,我们从A点开始,依次检查它的相邻节点,然后照此继续并向外扩展直到找到目的地。 4 H( W9 ~+ \2 l+ [9 F+ \9 l$ N我们通过以下方法来开始搜索:, J/ P7 y x$ t3 h G 1.3 q2 K% [! h, o) X! j O \# Y1 @9 d 从A点开始,将A点加入一个专门存放待检验的方格的“开放列表”中。这个开放列表有点像一张购物清单。当前这个列表中只有一个元素,但一会儿将会有更多。列表中包含的方格可能会是你要途经的方格,也可能不是。总之,这是一个包含待检验方格的列表。1 c0 X3 G. N2 @( x y5 a7 z 2.% e0 R( ^: h4 V2 L% E. r, ~ C8 B 检查起点A相邻的所有可达

文档评论(0)

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

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

1亿VIP精品文档

相关文档