图---Prim
求最小生成树主要有两种基本的算法:
Prim算法和Kruskal算法。
Prim算法主要是着眼于顶点,而Kruskal算法主要是着眼于边。
下面介绍Prim算法的过程。
PRIM(G, s) for u in G.V u.key ← ∞ // u.key: 包含U的边中,最短的那条边长 u.π ← NULL // u.π : u的父节点 //初始化起始点 s.key ← 0 Q ← G.V // 将所有点插入优先队列Q中 while Q ≠ 0 u ← getMin(Q) //获取拥有最小key的点 for v in G.Adj[u] // 遍历所有与u毗邻的点 if v ∈ Q && w(u, v) < v.key //如果有更小的边出现,则刷新 v.π ← u v.key ← w(u, v)
画图验证更容易理解~