1、问题
(1)举一个实例,画出采用Prim算法构造最小生成树的过程,并编写算法。
(2)举一个实例,画出采用Kruskal算法构造最小生成树的过程,并编写算法。
2.解析
(1)Prim算法
Prim算法是从点的方面考虑构建一颗MST,大致思想是:设图G顶点集合为U,首先任意选择图G中的一点作为起始点a,将该点加入集合V,再从集合U-V中找到另一点b使得点b到V中任意一点的权值最小,此时将b点也加入集合V;以此类推,现在的集合V={a,b},再从集合U-V中找到另一点c使得点c到V中任意一点的权值最小,此时将c点加入集合V,直至所有顶点全部被加入V,此时就构建出了一颗MST。
如图,为例子:
(2)Kruskal算法
将所有边按照权值的大小进行升序排序,然后从小到大一一判断,条件为:如果这个边不会与之前选择的所有边组成回路,就可以作为最小生成树的一部分;反之,舍去。直到具有 n 个顶点的连通网筛选出来 n-1 条边为止。筛选出来的边和所有的顶点构成此连通网的最小生成树。
例如,如图:
3.设计
(1)Prim算法
Dist[V]=E[V,W]