英语原文地址:http://www.policyalmanac.org/games/aStarTutorial.htm
译文原文地址:http://blog.youkuaiyun.com/kenkao/article/details/5476392
一、A*寻路算法的基本流程
1、开启列表保存待探索的节点
2、关闭列表保存已经探索过的节点
3、将起始点加入开启列表
4、从开启列表选择F值最低的节点,将该节点作为当前节点
5、将当前节点从开启列表删除,将当前节点加入到关闭列表
6、获得当前节点附近所有有效的节点(排除超过边界的节点、已经在关闭列表的节点、障碍物、跨过拐角的节点)
7、遍历第6步所得的附近的节点,如果该节点不在开启列表,则添加到开启列表,并把当前节点作为它的父节点
如果该节点已经在开启列表,比较该节点的G值与以当前节点为父节点的G值,如果新路径的G值较低,则修改该节点的父节点为当前节点
8、继续从第4步循环,直到终点添加进了关闭列表或者开启列表已经空了
9、如果终点添加进了关闭列表说明有可行的路径
10、从终点开始,根据每个节点的父节点往上递推,直到起点,则这条路径就是最优路径
二、整个算法的核心就是F值的计算,F为G值和H值的和
G值为当前节点到下一个节点的移动耗费,斜向移动为水平或垂直移动的1.4倍(2开根号),G值决定经过哪些点
H值为当前节点到终点的移动耗费,用曼哈顿算法计算,H值影响前进的大方向
三、带地形惩罚的A*算法
每个节点设定该节点的地形,不同的地形有不同的地形值,越难走的地形值越高
在计算G值的时候加上地形值
地形惩罚值的具体数字应该根据需要调整,总之值越大,在选择路径的时候优先级越低
示例程序源代码地址:http://pan.baidu.com/s/1nuY4Qhj