A*算法的核心:
-
有一个OpenList:起点在OpenList中,查看与起点相邻的且可到达的方格放入OpenList,把起点设置为这些方格的父亲方格
-
有一个CloseList:CloseList中的方格不需要关注
-
等式:F = G + H
G为起点到当前方格的消耗值,八个方向,斜方向消耗大于正方向
H为当前方格到终点方格的估计最小消耗值,有4个方向,每一个方格的消耗相等,包括障碍物(Obstacles) -
重复步骤
从OpenList找到F值最小的方格,从OpenList中删除, 放入CloseList;
检查所有与它相邻的方格,忽略已经在CloseList中和阻碍(Obstacles),如果方格不在OpenList中,就把它们加入OpenList,把选中的最小F的方格设置为这些方格的父亲方格;
如果相邻的方格已经在OpenList中,则检查这个方格的G值是否更小。 如果没有,不做任何操作; 如果有, 就把已经在OpenList中的那个方格的父亲设置为当前方格,并重新计算F值与G值;
直到把终点加入到OpenList;
如果open list 是空的,此时没有路径; -
保存路径。从终点开始,每个方格沿着父节点移动直至起点,这就是你的路径。