以下是我们实现 A* 算法的方式:
将开始点放入开放列表(open list)中
当开放列表不为空时我们重复执行以下操作:
从开放列表中取出 F 值最小的节点并将他放入关闭列表中(我们后续不会再考虑关闭列表中的节点...使用 字典(或者说优先级队列) 或者 堆 来替代 列表 也可以加速 A* 算法.在这些数据结构中遍历元素非常之快,这会非常有助于你在其中搜索某一节点,同样的,在有序字典或者最小堆中,我们也能很方便的找到具有最低...(因为这个节点在扩展其他节点时会被评估是否要加到开放列表中)....如果你不知道上述代码里模板参数中的 compare 是什么,你可以简单理解是一种定义了如何比较节点的简单数据结构.
?...我们将当前节点的分值设置为最低,并且将其 on_close 变量设置为 true,正常来说,我们应该将节点放置于关闭列表中,但是设置节点变量数据是效率更高的一种方式.OK,现在是时候扩展相邻节点了,扩展之前我们需要检查相邻节点是否已经处于关闭列表中