A*算法

  A*读作A-star。是用来寻找最短路径的一种算法实现。

  • 原理:

  它仅仅是一个启发式搜索算法。就是说在一个可以被穷举的有限解空间集中,用比较有效的方法(主要是利用估价函数)求出最优解的算法。

把地图分成若干个格子,把起始点的格子上标作 0 。然后根据将周围一圈可以通畅的格子上标为1。然后再把所有标上 1 的格子周围可以通达的格子标为 2 ,当然,如果那些格子上已经有过数字了(一定比 2 小)就不用标了。

  如此反复迭代下去,我们地图上的终点只要可以通达,就一定会被标上数字。而这个数字就是理论最短的距离,而标记过的每个格子都有一个前导的入口(即它由附近一个比它小 1 的格子引导过来)整个标记的过程逆推,也就找到了最短路径。

备注:原理这块文字直接从云风BLOG中CTRL+C,CTRL+V来的,如果作者觉得不合适,可以随时删除掉。

  • 关键点:

如果一个格子被多个路径同时需要存值时:
1、如果为空,填值;
2、被非第一次填值时,需要判定已有值与将被填的值大小:如果小,则填充;大,放则弃;相等,存储为集合。
3、存在一种可能,找不到解(需要设定一些界限,来优化)。(这种情况下,会遍历图中所有可以到达的点)

  • 示例:

存储路径方式一:
(1,1)=>(0,0),(1,1)
 (2,2) =>(0,0),(1,1),(2,1)
 (3,2) =>(0,0),(1,1),(2,1),(3,2)
 (4,2) =>(0,0),(1,1),(2,1),(3,2),(4,2)
 (5,3) =>(0,0),(1,1),(2,1),(3,2),(4,2),(5,3)
存储路径方式二:
存前置的点,也可能前置有多个点(同时到达),类似链表的存储方式。

 

说明:以上内容是记录和同事liuhaosong一起研读云风的文章《A* 算法之误区》的过程记录。

参考:云风BLOGhttp://blog.codingnow.com/2006/07/astar.html

 

posted @ 2017-03-09 03:54  cctext  阅读(382)  评论(0编辑  收藏  举报