伪代码:
设置一个待检测列表openList和一个不需检测列表closeList;
把起始点startPoint推入openList;
然后检测openList
如果不为空就找出其中F值最小的一个
将此节点做为当前节点(curNode),并且加入closeList中不再检测;
然后看看这个当前节点是不是我们要找的?
如果不是:
遍历curNode周围的节点(矩阵网格的话,周围是8格,左,上,右,下,左上,右上,右下,左下)?
如果是不可通过的、或者是在closeList中的、或者超过边界的都continue掉
保存parent、F值到curNode上以便后续通过parent溯源,再保存在openList中
如果是:
说明找到了(如果找到了就通过这个节点上保存的父节点层层查询,最终找到起始点,完成整条路径)
如果为空列表:
说明检测完了,但是没有找到目的地。
补充说明:
F值的计算公式:G(当前点和父节点的距离)+H(当前点和目的点的距离)))
G的值,如果是对角线的块按1.4倍长度来算
为了方便理解,我使用曼哈顿距离作为H的计算方式(横纵距离相加)
demo我放在gitee上,有兴趣的可以看一下,其实伪代码足以