这个问题在这里已有答案:
假设有向图G =(V,E)具有潜在的正和负边长,但没有负循环。设s∈V是给定的源顶点。如何设计一个在时间O k(| V | + | E |)运行的单源最短路径问题的算法,如果从s到任何其他顶点的最短路径最多需要k个边缘,我们不知道什么是k。
这里是O(k(| V | + | E |))方法:
for each vertex v in vertices:
D[v] := +oo
D[s] = 0
lastRelaxation = 0
for i in [1,n]:
{
for each edge (u, v) with weight w in edges:
if D[u] + w < D[v]:
{
D[v] = D[u] + w
lastRelaxation = i
}
if lastRelaxation != i) break;
}