Prim(G) 输入:加权连通图 G=<V,E> 输出:Et, 组成G的MST边的集合 BEGIN Vt= {Vo};// 可以用热议低昂点来初始化树的顶点集合 Et = {∅}; for i in [1..|V|-1) 在所有的边(v,u)中,求权重最小的边 e' = (v', u'),使v在Vt中,而u在V-Vt中; Vt = Vt ∪ {u'}; Et = Et ∪ {e'}l end for return Et; END
Kruscal(G) 输入:加权连通图 G=<V, E> 输出:Et,组成G的MST的边的集合 BEGIN 按照边的权重 w(ei1 ≤ ... ≤ ei|E|)的非递减顺序对E排序; Et={∅}; // 初始化边的集合 ec = 0; // 集合的规模 k = 0; // 初始化已经处理边的数量 while ec < |v| - 1 k++; if Et ∪ {ejk} 无回路 Et = Et ∪ {ejk}; ec++; end if end while return Et; END
Floyd(w[1..n, 1..n]) 输入:图的权重矩阵w 输出:包含最短路径长度的距离矩阵D BEGIN D=w; for k in [1..n] for i in [1..n] for j in [1..n] D[i,j]=min{D[i,j], D[i,k]+D[k,j]} end for end for end for return D; END ```language
Dijkstra(G, S) 输入:加权连通图G=<V, E>,以及出发点S 输出:对于V中的每个顶点v来说,从S到V的最短路径长度dv,以及路径上倒数第二个顶点Pv BEGIN Initialize(Q);// 将顶点优先队列初始化为空 for V中的每一个顶点 v dv= ∞; pv = null; Insert(Q, V, dv);// 初始化优先队列中顶点的优先度 end for
ds=0; Decrease(Q, S, ds);// 将s的优先级更新为ds Vt = ∅; for i in [0..|v|-1) u' = DeleteMin(Q);// 删除优先级最小的元素 Vt = Vt ∪ {u'}; for V-Vt中每一个与u'相邻的顶点u if du' + w(u', u) < du du = du' + w(u', u); Pu = u'; Decrease(Q, u, du);// 将u的优先级更新为du end if end for end for END