// 主循环 DIJKSTRA(G, w, s) // 初始化 for each vertex v in G.V: l(v) = ∞ z(v) = NIL l(s) = 0 S_i = while Q is not empty: u = EXTRACT-MIN(Q) // 从 Q 中取出 l(v) 最小的顶点 u S_i = S_i ∪ {u} // 将 u 加入永久标号集合 S_i for each vertex v in G.Adj[u]: // 遍历 u 的所有邻接顶点 v if l(v) > l(u) + w(u, v): // 松弛操作 l(v) = l(u) + w(u, v) z(v) = u DECREASE-KEY(Q, v, l(v)) // 更新 Q 中 v 的优先级
l, z = dijkstra(graph, 'A') print("最短距离:", l) print("父顶点记录:", z)
2.Floid算法:(动态规划)
如果一个节点位于起点到重点的最短距离路径上,以节点0→8为例,
Python代码(片段):
1 2 3 4 5 6
for k inrange(self.V): for i inrange(self.V): for j inrange(self.V): ifself.D[i][k]+self[k][j]<self.D[i][j]: self.D[i][j]=self.D[i][k]+self[k][j] self.S[i][j]=self.S[i][k]