假设有向图G =(V,E),其边长可能为正和负,但没有负循环。设s∈V为给定的源顶点。如何针对在其中运行的单源最短路径问题设计算法 时间O k(| V | + | E |),如果从s到任何其他顶点的最短路径最多包含k条边,而我们不知道k是什么。
答案 0 :(得分:0)
这里的O(k(| V | + | E |))方法:
因此,如果在某些迭代中我们不能放松任何边缘,则意味着我们已经达到迭代k + 1,并且由于最短路径无法改善,因此可以终止算法
伪代码:
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;
}