【学习笔记】“智能的”A*算法
A*算法适用无权图中的最短路径搜索,通过一个简单的函数f(n)=g(n)+h(n)来评估可能路径的“代价”。随着反复更新“价值”由此得到最短路径。
其中
h(n)是“已经过路径的总代价”,一般可以用移动前后的欧几里得距离(h(n) = √((x₁ - x₂)² + (y₁ - y₂)²))、曼哈顿距离(h(n) = |x₁ - x₂| + |y₁ - y₂|))、
对角线距离(h(n) = max(|x₁ - x₂|, |y₁ - y₂|))。
g(n)是“将要经过路径的代价”,一般是:欧几里得距离、曼哈顿距离、对角线距离。
f(n)是“综合代价”。
同时创建两个表:开放表、封闭表
举例如下

要从D1到A5,选择曼哈顿距离做g(n),则部分过程如下:
1.遍历D1相邻的5个方块(C1、C2、D2、E2、E1),(假设移动到C1或C2......)分别计算f(n)。例如C2:h(n) = |1 - 0| + |2 - 3| = 2,g(n) = |4 - 1| + |0 - 2| = 5,f(n) = 7。
全部计算完后,E1、E2相等,C1 ~ D2 相等,且 C1 ~ D2 更小
2.将g(n)中最小值(本情况下有相等的随机选择一个)存入封闭表,其余存入开放表。
3.(假如存入C2)继续执行上面的计算,注意h(n+1) = h(n) + “本次的h(n)”,g(n)一样。
4.再次存入最小值,执行计算.......
完成。
浙公网安备 33010602011771号