为什么在Bellman Ford算法的第一次迭代中没有放松所有边缘?

时间:2011-11-21 16:34:33

标签: algorithm graph-algorithm bellman-ford

请参阅以下页面了解Bellman ford算法(例如,它显示)。 http://compprog.wordpress.com/2007/11/29/one-source-shortest-path-the-bellman-ford-algorithm

我仍然没有得到它。在外环的第一次循环迭代中,假设通过该示例,首先修改边缘1-> 2和边缘1-> 4,放松边缘2-> 3,2->的问题是什么? 5,4-> 3,4-> 5,在同一步骤中,因为我们有d [2]和d [4]。

1 个答案:

答案 0 :(得分:1)

如果你使用一个不同版本的Bellman-Ford,这个问题会神奇地消失:

set toRelax = {initial_vertex}
while toRelax is not empty:
    u = remove a vertex from toRelax
    for each neighbour v of u:
       if we can relax u-v:
          relax u-v
          add v to toRelax

注意每个“步骤”现在如何涉及单个顶点!在“相同步骤”中完成的事情只是您使用的具体实现的工件,并且最终不会真正改变算法。