Dijkstra的算法长度

时间:2016-09-07 01:33:33

标签: pseudocode dijkstra

来自this website's伪代码:



Given a graph, G, with edges E of the form (v1, v2) and vertices V, and a
source vertex, s

dist : array of distances from the source to each vertex
prev : array of pointers to preceding vertices
i    : loop index
F    : list of finished vertices
U    : list or heap unfinished vertices

/* Initialization: set every distance to INFINITY until we discover a path */
for i = 0 to |V| - 1
    dist[i] = INFINITY
    prev[i] = NULL
end

/* The distance from the source to the source is defined to be zero */
dist[s] = 0

/* This loop corresponds to sending out the explorers walking the paths, where
 * the step of picking "the vertex, v, with the shortest path to s" corresponds
 * to an explorer arriving at an unexplored vertex */

while(F is missing a vertex)
   pick the vertex, v, in U with the shortest path to s
   add v to F
   for each edge of v, (v1, v2)
        /* The next step is sometimes given the confusing name "relaxation"
        if(dist[v1] + length(v1, v2) < dist[v2])
            dist[v2] = dist[v1] + length(v1, v2)
            prev[v2] = v1
            possibly update U, depending on implementation
        end if
    end for
end while
&#13;
&#13;
&#13;

是什么意思: if(dist [v1] + length(v1,v2)&lt; dist [v2])

特别是:长度(v1,v2)

不应该 dist [v1]&lt; dist [v2] 够吗?

1 个答案:

答案 0 :(得分:0)

length(v1, v2)是从节点v1到v2的边的权重。

此条件检查通过转到v1然后通过edge(v1,v2)可以改善v2的路径。