Chinaunix首页 | 论坛 | 博客
  • 博客访问: 94907
  • 博文数量: 17
  • 博客积分: 1278
  • 博客等级: 中尉
  • 技术积分: 290
  • 用 户 组: 普通用户
  • 注册时间: 2006-06-08 13:26
文章分类

全部博文(17)

文章存档

2011年(4)

2010年(7)

2009年(1)

2008年(5)

我的朋友

分类: C/C++

2011-01-18 21:33:08

A*方法总结

先看明白 图例所示;
留意图例中的父指针;非常重要的要点;
然后对着以下说明,重新看一遍图示,有宏效;


好,现在你已经看完了整个说明,让我们把每一步的操作写在一起:
   1,把起始格添加到开启列表。
   2,重复如下的工作:
      a) 寻找开启列表中F值最低的格子。我们称它为当前格。
      b) 把它切换到关闭列表。
      c) 对相邻的8格中的每一个?
          * 如果它不可通过或者已经在关闭列表中,略过它。反之如下。
          * 如果它不在开启列表中,把它添加进去。把当前格作为这一格的父节点。记录这一格的F,G,和H值。
          * 如果它已经在开启列表中,(后面内容容易迷惑,指的是经由当前点计算出的新G值和原G值比较,如新G值更小,将新G值赋给当前点,并重新计算F值)用G值为参考检查新的路径是否更好。更低的G值意味着更好的路径。如果是这样,就把这一格的父节点改成当前格,并且重新计算这一格的G和F值。如果你保持你的开启列表按F值排序,改变之后你可能需要重新对开启列表排序。
      d) 停止,当你
          * 把目标格添加进了关闭列表(注解),这时候路径被找到,或者
          * 没有找到目标格,开启列表已经空了。这时候,路径不存在。
   3.保存路径。从目标格开始,沿着每一格的父节点移动直到回到起始格。这就是你的路径




 
阅读(856) | 评论(1) | 转发(1) |
给主人留下些什么吧!~~

chinaunix网友2011-03-07 13:35:23

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com