我在许多应用程序中使用A*(和Dijkstra的算法),但我卡在了寻找拐点最少的路径上,而路径长度无关紧要。我正在使用上下左右网格,没有对角线。
A * 定义成本=从起点的距离+启发式(
曼哈顿
)
,而我尝试通过添加numTurns
成本来扩展它。这个方法在处理如下情况时非常完美:
(
*
=墙,0
=空,S
=起点,E
=终点)您会发现路径
S->1->2->+
与s->1'->2'->+
的成本相同。它们都已经拐了一次弯,距离S
相同,并且曼哈顿距离也相同。然而,从+
开始,如果我们选择使用'
路线,则无需拐弯。但是,如果我们选择使用1 2
路线,则必须向右转(代价为+1
)。因此,即使我们可能先到达那里,使用1 2
不是最少拐弯的路径。
我尝试过调整,例如允许多个相同的方格同时在优先队列中,以便它们都有机会(如果它们在堆中的值是最小的),以及其他“hacky”解决方案,但仍然存在未覆盖的情况。是否有一种直观的方法来解决这个问题呢?
谢谢!