迪杰斯特拉算法中,如何找到相邻节点?

如何查找节点的邻居?什么使得一个节点成为另一个节点的邻居?顺便提一下,我是用Lua编写代码的。

点赞
用户798888
用户798888

使用 A* 算法,您需要定义以下三个参数:

  1. 从一个相邻节点移动到另一个相邻节点的移动成本
  2. 一个给定节点到目标节点的距离
  3. 任何给定节点的相邻节点

第一个参数可以简单或复杂,视情况而定。例如,在所有节点之间的距离都一样的简单网格路径查找中,您可以始终返回 1。

Dijkstra 算法通常覆盖第二个参数,通过返回 0 来实现。

但是,您的问题涉及第三个参数:

如果您正在处理网格,可以找到欧几里得相邻网格空间,它是指对于网格空间 x2y2,相邻节点是在欧几里得空间中 x1y2,x3y2,x2y1 和 x2y3。

如果您没有使用网格,我猜您需要在将节点放入世界或直接在之后填充每个节点的兄弟数据,并将其存储在与该节点相关联的列表中。可以通过计算从一个节点到每个其他节点的距离并找到最短距离来实现。虽然这可能很耗费资源,但您只需要在开头执行一次,因此如果这些节点不是动态的,则应该可以接受。

2013-06-11 20:23:15