Prim的演算法是一种用于寻找最小生成树的贪婪演算法。
简单来说,Prim演算法通过从一个起点开始,选择边的方式来构建一个最小生成树。演算法开始时,选择任意一点作为起点,然后选取与该起点相连的最小权值边,a和b两个点在生成树上,没有其他的路线能够从a和b这两个点达到,接着选择与a或b相连的点到生成树上(由于是连到a或b点,最小权值边的选择是唯一的),此过程迭代直到生成树中包含了所有顶点。
例如,考虑下图:
C
/ | \
3/ |2\ \4
A---F---B
2\ |5/ /3
\ | /
D
从节点A开始,该该节点被添加到生成树中。 节点A与节点F之间的边(权值为2)是包含节点A的最小权值边,添加节点F。节点A与节点C之间的边(权值为3)是包含节点A的最小权值边,添加节点C。 节点F与节点B之间的边(权值为2)是包含节点B,F的最小权值边,添加节点B。 节点F与节点D之间的边(权值为5)是包含节点B、F、D的最小权值边,添加节点D。 节点F与节点E之间的边(权值为4)是包含节点B、F、E、D的最小权值边,添加节点E。
最终生成树如下所示:
C
|
(3) A
|
F
/ | \
2/ | \2
B E D
A --2-- B --1-- C
/ | / |
8 3 1 5
/ | / |
D --2-- E --4-- F --3-- G
答案:11
A --2-- B --1-- C --2-- D
/ | / | |
3 1 6 3 4
/ | / | |
E --5-- F --2-- G --5-- H --3-- I
答案:13
A --2-- B --1-- C --2-- D --3-- E
/ | / | | |
7 6 1 2 8 5
/ | / | / |
F --3-- G --4-- H --10-- I --2-- J --1-- K
答案:16
A --3-- B --1-- C --2-- D --5-- E
/ | / | | |
10 2 5 4 7 8
/ | / | / |
F --8-- G --3-- H --1-- I --2-- J --4-- K
答案:19
A --2-- B --1-- C --2-- D --3-- E
/ | / | | |
8 10 6 2 1 2
/ | / | / |
F --3-- G --4-- H --7-- I --9-- J --3-- K
答案:19