A是一种启发式的搜索算法,是基于Dijkstar算法的一种改进,A具有启发式。
废话不多说,先上效果图
![](https://i-blog.csdnimg.cn/blog_migrate/547fb7747eb4b11b8aea428061e1521d.png)
图中LM1-LM6可以表示站点、城市、火车站等概念(统一可以用x,y来表示的点)
搜索LM1到LM6的最短路径
蓝色的线表示通过A*算法搜索出来的最短路径,红色的线表示站点之间存在的路径(或者说道路),
A*算法的核心算法计算公式:
f为所经路径的所有代价值
g为从起点处到当前节点的代价值
h为当前节点到目标点的代价值
h有包含启发式函数:一般是欧氏距离或者曼哈顿距离等公式。
维护两个容器openList,closeList
openList将当前节点所有可到达节点放入容器中,并且按照节点的f,h值的大小进行排序(此操作在遍历栅格类型的地图可能造成大量重复计算),将f值最小的节点当成下一个遍历中心节点.
closeList将遍历过的节点放入容器中,避免重复计算,同时可以用于路径回溯
代码链接:
本代码对参考代码做了改进,节点之间的路径用邻接矩阵表示修改成邻接表来表示。
新人萌新一枚,如有错误请联系改正,参考资料如有侵权请联系删除。