最近在做搜索的练习,老是听到大神们说什么A*算法,听起很高大上的样子,于是我这个菜鸟出于好奇百度了一下,发现真是好玩死了,对于搜索算法我们都知道有深搜和广搜,深搜一般用来解决数据不是很大(二维数组一般不超过20),并且有的时候需要搜索全部可能性的时候,而广搜除了可以用来解决上述问题以外,还可以用来解决最优解问题。但是大家都清楚,深搜对于时间复杂度有要求而广搜对于空间的消耗也是很大,那么A*算法便脱颖而出,它所做的主要优化就是对于路径的点,除了考虑该点和起始点的距离之外,还考虑和终点的距离,而对于和终点的距离由于有障碍物的存在,使得我们无法精确计算出来,那么便采用估计值的方式来进行处理。(对于障碍物我们是不考虑是否跳过的问题!即,障碍物也当做正常的一个格子!这也是H值仅仅是预测的而已的原因!即所谓启发式! )。毕竟怎么着也不不优化强吧。。。。那么问题就是计算估计值,一般情况下有以下两种方式:
①计算横着竖着的距离和
②计算两个点之间的距离(对角)
即主要是计算一个函数f(n)=g(n)+h(n)
g(n)该点和起始点的距离,
h(n)是该点
和终点的距离
这个博主讲得很通俗易懂,大家可以参考一下:http://blog.csdn.net/zgwangbo/article/details/52078338#reply
由于我理解不是很到位,我就不多说了,持续更新。。。
这篇文章也不错,