我正在阅读Cormen的图算法书。下面是该书中的伪代码。
Prim算法用于最小生成树
MST-PRIM (G, w, r)
for each u in G.V
u.key = infinity
u.p = NIL
r.key = 0
Q = G.V
while Q neq null
u = EXTRACT-MIN(Q)
for each v in G.Adj[u]
if (v in Q) and (w(u,v) < v.key)
v.p = u
v.key = w(u,v)
迪杰斯特拉算法用于查找单源最短路径。
INITIALIZE-SINGLE-SOURCE (G,s)
for each vertex v in G.V
v.d = infinity
v.par = NIL
s.d = 0
DIJKSTRA (G, w, s)
INITIALIZE-SINGLE-SOURCE(G,s)
S = NULL
Q = G.V
while Q neq null
u = EXTRACT-MIN(Q)
S = S U {u}
for each vertex v in G.Adj[u]
RELAX(u,v,w)
我的问题是,为什么我们要检查顶点是否属于Q (
v in Q
),也就是说该顶点不属于树,而在Dijkstra算法中我们没有检查这个条件。有任何原因吗?