A星算法是一种探测性算法,实现需要关注的重点:二维地图数组,关闭列表,开放列表(小根堆),每个点的父节点。
二维地图数组用来存储地图上是否可通过的标记信息,假设现在要从地图的起始点A移动到目的点B,如何寻找到最短的路径呢?
1. 把地图上的A点放入关闭列表中,然后将A点周围的可走点放入一个以小堆为结构的开放列表,并把它们的父节点指向A点。
2. 计算周围可走点到A点的距离H和周围可走点到B点的预测距离V,将H和V相加调整更新小根堆。
3. 取出堆顶的点放到关闭列表中,继续把该点的周围可走点(该点不在关闭和开放列表中)放入开放列表中,重复第2步。(如果该点已经在开放列表中,就需要再次计算H 值,是否可以更改它的父节点值)
4. 直到最后遇到B点才结束探测。
5. 最后通过父节点不断追溯,便可以得到最短的路径。