你如何使用 Dijkstra 找到更多的路线?
How do you use Dijkstra to find more routes?
我实现了 Dijkstra 算法来找到 2 点之间的最短路径。如何修改它以找到 N 条最短路线?我的想法是在先前找到的路径的最后一个节点上添加一个小权重,但它并不总是能正常工作。有什么想法吗?
您要解决的问题被称为 K shortest path problem. The first algorithm to tackle the problem was proposed in 1971 by Yen,使用任何最短路径算法找到最佳路径,然后继续寻找最佳路径的 K − 1 个偏差.
算法的运行时间复杂度为O(kn(m + n log n))
,为伪多项式,其中m
表示边数,n
为边数顶点。
可以找到用多种编程语言实现的算法 here。
我实现了 Dijkstra 算法来找到 2 点之间的最短路径。如何修改它以找到 N 条最短路线?我的想法是在先前找到的路径的最后一个节点上添加一个小权重,但它并不总是能正常工作。有什么想法吗?
您要解决的问题被称为 K shortest path problem. The first algorithm to tackle the problem was proposed in 1971 by Yen,使用任何最短路径算法找到最佳路径,然后继续寻找最佳路径的 K − 1 个偏差.
算法的运行时间复杂度为O(kn(m + n log n))
,为伪多项式,其中m
表示边数,n
为边数顶点。
可以找到用多种编程语言实现的算法 here。