我为图定义了节点和边,我想使用它们来解决A *算法中的寻路问题。我有一个似乎可以运行的A *算法,但现在需要防止掉头。这些不是2条或更多条车道的道路,它们只是单向的,尽管两个节点形成了两个边缘(任一方向都是一个)。
因此,例如,如果我要从1114-1105计算路线,该算法将给我1114-1112-1105。这是无效的,因为它涉及从1112到1105的掉头。我想要实现的结果更像是1114-1110-1111-1113-1112-1105。
我天真地以为我可以计算上一个,当前和下一个节点之间的角度,在这种情况下,该角度将为0,然后将一个较大的数字添加到“ f”值。但这似乎无能为力。
有关如何实施此建议?谢谢
答案 0 :(得分:1)
图中的“状态”取决于两件事:
为此建模,我们可以创建一个新的(有向)图,其中每个“状态”都是其自己的节点。换句话说,您可以通过将旧图中的每个节点拆分为新图中的(其中N是该旧节点的传入边数)的N个节点来创建新图。这样,新节点的出站边缘将更少。
这可能会将您的开始/结束节点拆分为多个节点。要解决此问题,您可以创建新的单个起点/终点节点,并将其连接到成本为0的边的旧起点/终点节点。