避免在A *算法中掉头

时间:2018-11-14 19:19:34

标签: path-finding a-star

我为图定义了节点和边,我想使用它们来解决A *算法中的寻路问题。我有一个似乎可以运行的A *算法,但现在需要防止掉头。这些不是2条或更多条车道的道路,它们只是单向的,尽管两个节点形成了两个边缘(任一方向都是一个)。

因此,例如,如果我要从1114-1105计算路线,该算法将给我1114-1112-1105。这是无效的,因为它涉及从1112到1105的掉头。我想要实现的结果更像是1114-1110-1111-1113-1112-1105。

我天真地以为我可以计算上一个,当前和下一个节点之间的角度,在这种情况下,该角度将为0,然后将一个较大的数字添加到“ f”值。但这似乎无能为力。

有关如何实施此建议?谢谢

Example graph

1 个答案:

答案 0 :(得分:1)

图中的“状态”取决于两件事:

  • 您所在的节点
  • 您来自的节点

为此建模,我们可以创建一个新的(有向)图,其中每个“状态”都是其自己的节点。换句话说,您可以通过将旧图中的每个节点拆分为新图中的(其中N是该旧节点的传入边数)的N个节点来创建新图。这样,新节点的出站边缘将更少。

这可能会将您的开始/结束节点拆分为多个节点。要解决此问题,您可以创建新的单个起点/终点节点,并将其连接到成本为0的边的旧起点/终点节点。