Data Structures Algorithms 简明教程
Prim’s Minimal Spanning Tree
普里姆最小生成树算法是查找图的最小生成树的有效方法之一。最小生成树是一个子图,它使用最少的边和最少的成本(分配给每条边的权重的和)连接主图中存在的所有顶点。
与任何最短路径算法类似,该算法从设置为主根的顶点开始,并通过确定成本最低的邻接边遍历图中的所有顶点。
Prim’s Algorithm
要执行 prim 算法,算法需要的输入是图 G {V, E}(其中 V 是顶点集,E 是边集)和源顶点 S。图 G 的最小生成树作为输出获得。
Algorithm
-
声明一个数组 visited[] 来存储已访问的顶点,首先将任意根(例如 S)添加到 visited 数组中。
-
检查最后一个已访问顶点的相邻顶点是否存在于 visited[] 数组中。
-
如果顶点不在 visited[] 数组中,请比较边的成本并将成本最低的边添加到输出生成树中。
-
将具有最小成本边的相邻未访问顶点添加到 visited[] 数组中,并将最小成本边添加到最小生成树输出中。
-
对图中的所有未访问顶点重复步骤 2 和 4,以获得给定图的完整最小生成树输出。
-
计算获得的最小生成树的成本。
Solution
Step 1
创建一个已访问数组来存储所有已访问的顶点。
V = { }
任意的根被提及为 S,所以在所有连接到 S 的边中,我们需要找到成本最低的边。
S → B = 8
V = {S, B}
Step 2
因为 B 是最后访问的,所以检查连接到顶点 B 的成本最低的边。
B → A = 9
B → C = 16
B → E = 14
因此,B → A 是添加到生成树中的边。
V = {S, B, A}
Step 3
因为 A 是最后访问的,检查与顶点 A 连接的最低成本边。
A → C = 22
A → B = 9
A → E = 11
但是,A→ B 已经包含在生成树中,检查下一个最低成本边。因此,A→ E 被添加到生成树中。
V = {S, B, A, E}
Step 4
因为 E 是最后访问的,检查连接到顶点 E 的成本最低的边。
E → C = 18
E → D = 3
因此,E→ D 被添加到生成树中。
V = {S, B, A, E, D}
Step 5
因为 D 是最后访问的,检查与顶点 D 连接的最低成本边。
D → C = 15
E → D = 3
因此,D→ C 被添加到生成树中。
V = {S, B, A, E, D, C}
采用最低成本获得最小生成树 = 46