我正在查看 A* 寻路算法的定义,它在不同地方的定义似乎有所不同。
不同之处在于遍历节点的后继节点时执行的操作,并发现后继节点在封闭列表中。
- 一种方法(由Wikipedia和本文建议)说:如果继任者在封闭列表中,则忽略它
- 另一种方法(例如,在此处和此处建议)说:如果继任者在封闭列表中,请检查其成本。如果它高于当前计算的分数,则从封闭列表中删除该项目以供将来检查。
我很困惑 - 哪种方法是正确的?直觉上,第一个对我来说更有意义,但我想知道定义上的差异。其中一个定义是错误的,还是它们在某种程度上是同构的?