更新时间: 2023-05-26 08:49:53#A* 寻路算法 https://zhuanlan.zhihu.com/p/54510444 https://blog.csdn.net/hitwhylz/article/details/23089415 https://www.redblobgames.com/pathfinding/a-star/introduction.html A*算法通过下面这个函数来计算每个节点的优先级。 其中: f(n)是节点n的综合优先级。当我们选择下一个要遍历的节点时,我们总会选取综合优先级最高(值最小)的节点。 g(n) 是节点n距离起点的代价。 h(n)是节点n距离终点的预计代价,这也就是A算法的启发函数。关于启发函数我们在下面详细讲解。 A算法在运算过程中,每次从优先队列中选取f(n)值最小(优先级最高)的节点作为下一个待遍历的节点。 另外,A*算法使用两个集合来表示待遍历的节点,与已经遍历过的节点,这通常称之为open_set和close_set。 完整的A*算法描述如下: * 初始化open_set和close_set; * 将起点加入open_set中,并设置优先级为0(优先级最高); * 如果open_set不为空,则从open_set中选取优先级最高的节点n: * 如果节点n为终点,则: * 从终点开始逐步追踪parent节点,一直达到起点; * 返回找到的结果路径,算法结束; * 如果节点n不是终点,则: * 将节点n从open_set中删除,并加入close_set中; * 遍历节点n所有的邻近节点: * 如果邻近节点m在close_set中,则: * 跳过,选取下一个邻近节点 * 如果邻近节点m也不在open_set中,则: * 设置节点m的parent为节点n * 计算节点m的优先级 * 将节点m加入open_set中