我一直在使用Dijkstra算法来查找普林斯顿大学算法第2部分给出的图谱API中的最短路径,并且我已经找到了如何找到切比雪夫距离的路径。
尽管Chebyshev可以以仅1的成本移动到节点的任何一侧,但是对总成本没有影响,但是根据图表,红色圆圈,为什么路径查找线在没有移动的情况下移动锯齿形直行?
如果我使用A *算法会重复同样的事情吗?
答案 0 :(得分:5)
如果你想优先考虑"直线"你应该考虑上一步的方向。一种可能的方法是创建图G'(V', E')
,其中V'
由所有邻居顶点对组成。例如,顶点v = (v_prev, v_cur)
将在路径中定义一个顶点,其中v_cur
是路径的最后一个顶点,v_prev
是前一个顶点。然后在"更新距离"最短路径算法的步骤,您可以选择最佳(不变)方向的最佳距离。
此外,我们可以添加额外属性到等于改变方向的距离,并找到最小距离方式,方法更改次数最少。
答案 1 :(得分:2)
Dijkstra和A *没有内心的不喜欢"奇怪的路径",他们只是明确地关心成本,隐含地意味着他们也关心你如何处理同等成本。您可以采取以下措施: