A* 寻路中的奇怪行为

Strange behaviour in A* pathfinding

请观看此 GIF 以更好地理解

我在 A* 寻路中遇到了这种奇怪的行为。我要说的一件事是我的 G-cost 公式只是

distance(this, startNode)

我无法理解正确的 G-cost 公式。请纠正我,因为我可能错了。所以当前节点的G-cost应该是

this.gCost = parent.gCost + distance(this, parent);

Where distance(this, parent) returns 10 或 14。这样 gCost 将按照 parents 的路径而不是最短路径计算?我说得对吗?

此外 - 一旦设置了 parent,我就不会更新它 - 我认为这是主要问题。你能在 pseudo-code 中解释一下何时更改节点的 parent 吗?

是的,这是计算 g-cost 的正确方法。至于更新父级,当您计算的 g-cost 低于该节点的先前 g-cost 时,您会执行此操作。

如果有帮助,请将节点视为以无穷大的 g-cost 开始,只要可以降低节点的 g-cost,就设置节点的父节点。