单源点最短路径 单源点最短路径 //对图进行初始化 INITIALIZE-SINGLE-SOURCE(G, s) 1 for each vertex v ∈ V[G] 2 do d[v] ← ∞ 3 π[v] ← NIL 4 d[s] 0 //Relaxation RELAX(u, v, w) 1 if d[v] > d[u] + w(u, v) 2 then d[v] ← d[u] + w(u, v) 3 π[v] ← u //Bellman-Ford的算法,如果有权值为负的回路则返回false BELLMAN-FORD(G, w, s) 1 INITIALIZE-SINGLE-SOURCE(G, s) 2 for i ← 1 to |V[G]| - 1 3 do for each edge (u, v) ∈ E[G] 4 do RELAX(u, v, w) 5 for each edge (u, v) ∈ E[G] 6 do if d[v] > d[u] + w(u, v) 7 then return FALSE 8 return TRUE //另一个算法 DAG-SHORTEST-PATHS(G, w, s) 1 topologically sort the vertices of G 2 INITIALIZE-SINGLE-SOURCE(G, s) 3 for each vertex u, taken in topologically sorted order 4 do for each vertex v ∈ Adj[u] 5 do RELAX(u, v, w) //最后是大名鼎鼎的Dijkstra's algorithm,条件是权值不为负 DIJKSTRA(G, w, s) 1 INITIALIZE-SINGLE-SOURCE(G, s) 2 S ← Ø 3 Q ← V[G] 4 while Q ≠ Ø 5 do u ← EXTRACT-MIN(Q) 6 S ← S ∪{u} 7 for each vertex v ∈ Adj[u] 8 do RELAX(u, v, w)