Floyd Warshall:计算每个顶点对的top-k最短路径

时间:2014-08-22 20:44:55

标签: algorithm graph shortest-path floyd-warshall

在Floyd-Warshall算法中,计算任何顶点对的最短路径成本。额外的簿记使我们能够在最短路径上保留实际路径(顶点列表)。

如何扩展Floyd-Warshall,以便对于任何一对顶点,找到前K个最短路径?例如,对于K = 3,结果将是计算和维护3条最短路径?

我一直在使用Sedgewick的Java implementation

2 个答案:

答案 0 :(得分:2)

听起来更像Dijkstra更容易修改返回N个最短路径。允许搜索进入顶点,直到K个最短的替代品进入顶点。

有关详细信息,请查看wikipedia article

答案 1 :(得分:0)

您可以使用可能喜欢的额外条件多次调用循环

for (int i = 0; i < V; i++) { // compute shortest paths using only 0, 1, ..., i as intermediate vertices for (int v = 0; v < V; v++) { if (edgeTo[v][i] == null) continue; // optimization for (int w = 0; w < V; w++) { if (distTo[v][w] > distTo[v][i] + distTo[i][w] && distTo[v][i]+distTo[i][w]>min[k]) { //min[k] is the minimum distance calculated in kth iteration of minimum distance calculation distTo[v][w] = distTo[v][i] + distTo[i][w]; edgeTo[v][w] = edgeTo[i][w]; } } // check for negative cycle if (distTo[v][v] < 0.0) { hasNegativeCycle = true; return; } } } 此代码将计算不同的K最小距离。希望它会对你有所帮助。