A*算法

我自己是通过这篇博文博文去理解A*算法的   所以希望读者先看看这篇博文  https://blog.csdn.net/hitwhylz/article/details/23089415

关于A*的解释在上面链接中的博文已经讲得足够详细     下面的文章中我只写我在编写A*算法时遇到的一些问题和其他的理解

同时我将A*寻路过程可视化  可以通过gif每一帧观察整个过程


先上几张·gif看看整个寻路过程

第一张  只能以上下左右四个方向作为路径

第二张  可以以上下左右·左上·左下·右上·右下八个方向作为路径

我解释一下图片中一些量的意义         也可以在 这篇博文 中理解这些量

红色为起始点 

黑色为目标点   

浅蓝色方块为close set

黄色方块为open set

灰色方块为障碍物

绿色方块为未搜索区域

深蓝色方块为最终搜索的路径

方块的左上角为F量

方块的左下角为H量

方块的右下角为G量

其中F =  H + G

G量为该点和目标点的线段距离长度

H量为起始点到该点的路径长度

如何理解线段距离长度和路径距离长度     [路径总是绕过障碍物]

(如下图 蓝色表示两点间线段距离长度    粉红色表示红点到黑点的路径距离长度)

关于两点间距离可以使用不同的距离计算公式  可以参考 距离计算方法总结    我自己在代码中使用的是曼哈顿距离

此外需要知道比较重要的两个点

1.   A*算法不会因为当前路径未死胡同而无法寻找路径    除非起始点无论怎么走都无法到达目标点

2.    A*算法为启发式算法 它无法保证找到的最终路径一定是最优路径(这个和选择的距离计算公式有关系)

转载务必注明出处 博客主页http://www.cnblogs.com/magicianlyx/ 作者:魔术师LYX
原文地址:https://www.cnblogs.com/magicianlyx/p/9196747.html