A 寻路算法

启发式算法,网格搜索算法。

先评估(代价函数 f(n) = g(n) + h(n) )更新网格信息,进行寻路。
其中 g(n) 指的是从起始格子到格子 n 的实际代价,而 h(n) 指的是从格子 n 到终点格子的估计代价。
对于 h(n)

  • 使用 欧氏距离(小于等于实际距离)作为估算(本质是结合了二维空间距离,也就是平面上的寻路,如此计算会变得复杂。
  • 使用 曼哈顿距离(大于等于实际距离):即不准走斜线的距离计算,就是向量差各维度取绝对值的和。
  • 使用 对角线 + 直线距离 :先用正方形走斜线,然后在走剩下的水平距离,利用了,这样一定是最短路线(最降速?),优化浮点用近似解决无理数带来的根号问题。

首先有一个源 src 和目的地 dst,每个网格可以查看周围的网格进行估价(估计时不考虑障碍物),在不断贪婪地选取中到达目的地(每到一个格子要对周围格子进行一个松弛操作:当周围格子已经计算过时,计算本格子的代价加上周围格子的间接代价和原本代价比如何如果更短就把格子上的父格子指向本格子并更新代价值)。

如果 h(n)=0 就变成 dijkstra 算法,如果 h(n) 过大就变为 BFS(因为不考虑当前位置了)。

具体考虑估算值相同时应该如何选取?(策略影响启发搜索过程,当障碍物少时选取 h(n) 更小的,意味着离终点更近)。

当路径上节点为障碍物缺口时,可以根据缺口做分段路径搜索(这些点可以在地图位置设计初进行考虑)。