前言
A*搜寻算法俗称A星算法。这是一种在图形平面上,有多个节点的路径,求出最低通过成本的算法。常用于游戏中的NPC的移动计算,或线上游戏的BOT的移动计算上。在网上查找了一些资料,通过java简单的实现了算法,先看一看效果
//通过二维数组构建的一个迷宫,“%”表示墙壁,A为起点,B为终点,“#”代表障碍物,“*”代表算法计算后的路径</span>
% % % % % % %
% o o o o o %
% o o # o o %
% A o # o B %
% o o # o o %
% o o o o o %
% % % % % % %
=============================
经过A*算法计算后
=============================
% % % % % % %
% o o * o o %
% o * # * o %
% A o # o B %
% o o # o o %
% o o o o o %
% % % % % % % </span>
算法理论
算法的核心公式为:F = G + H
把地图上的节点看成一个网格。
G = 从起点A,沿着产生的路径,移动到网格上指定节点的移动消耗,在这个例子里,我们令水平或者垂直移动的耗费为10,对角线方向耗费为14。我们取这些值是因为沿对角线
的距离是沿水平或垂直移动耗费
的的根号2,或者约1.414倍。为了简化,我们用10和14近似。
既然我们在计算沿特定路径通往某个方格的G值,求值的方法就是取它父节点的G值,然后依照它相对父节点是对角线方向或者直角方向(非对角线),分别增加14和10。例子中这
个方法的需求会变得更多,因为我们从起点方格以外获取了不止一个方格。
H = 从当前格移动到终点B的预估移动消耗。为什么叫”预估“呢,因为我们没有办法事先知道路径的长度,这里我们使用曼哈顿方法,它计算从当前格到目的格之间水平和垂直
的方格的数量总和,忽略对角线方向。然后把结果乘以10。
F的值是G和H的和,这是我们用来判断优先路径的标准,F值最小的格,我们认为是优先的路径节点。