代表一张地图和上面的 运行 A*

Representing a map and running A* on it

我的问题主要是关于地图表示的问题,想听听大家的意见。

有一张由一堆道路和它们之间的连接表示的地图 - 假设道路 A 在一条边上连接到 B、C、D,但只有从 A 到 C 和 D 的可能转弯。 假设我用一个图来表示它,其中每条道路是一条边,每条道路 meeting/end 是一个顶点。

我想 运行 一个 A* 或任何其他这样的表示,但是......在图中从一个节点移动到另一个节点,我非常需要知道我从哪里来......我的意思是 -从什么方向。我可以移动的下一个顶点取决于我拥有的开放转弯。

我可以保留我来自哪里,但我也希望它尽可能通用,简单的图形解决方案无法让我知道我来自哪里。

你能告诉我你会如何处理这个问题吗?

谢谢!

将每个节点表示为一堆节点,每条进入的道路一个。

所以让我们有下面的图表。

并让我们使用以下规则:

  • 如果从A来到B,我们只能转向D
  • 如果从C来到B,我们只能去E
  • 如果从 A 来到 C,那么我们可以去 B 和 D
  • 如果从E来到C,我们只能去B

比我们有以下等价图,现在每个节点都标有原始名称和传入道路:

这是一种通用方式,允许在这种情况下对有向图使用任何标准算法。对于某些算法,您可能需要创建伪造的源节点或初始节点和汇节点或目标节点来处理,在这样的图中,它们可以分别表示为多个节点,在当前情况下,如果我们从这个鼻子开始,我们可能需要一个额外的节点来描述行为,而不是来自其他的,但通常它只是原始结构,表示为经典图。

此外,如果 A、D 或 E 始终具有相同的行为,我们实际上并不需要拆分它们。