1.问题
(1)举一个实例,画出采用Prim算法构造最小生成树的过程,并编写算法。
(2)举一个实例,画出采用Kruskal算法构造最小生成树的过程,并编写算法。
2.解析
定义无向加权图的生成树代价为树中所有边的代价(权值)之和。最小代价生成树是具有最小代价的生成树。求无向连通图的最小代价生成树,这里分别应用Prim算法、Kruskal算法,这两种算法的设计技术都属于贪心法。用贪心法求解优化问题,最优解是在一系列求解步骤的最后得出的,每一步求解都在当前所有可能的选取中(按某种判据)做最优选取。对于最小代价生成树问题,目标判据为最小代价,应满足如下限定:
(1)只选图中出现的边;
(2)只选n-1条边;
(3)不选构成环路的边。
Prim算法:
任意选定开始节点可。选一条最小代价的边(u,v)加入T,使T∪{(u,v)}还是棵树,重复这样的选边以及插入过程,直到T中包括n-1条边为止。
画出最小生成树的过程实例:
Kruskal算法:
构造最小代价生成树T的 Kruskal算法。边按权值非递减的顺序每一次向T中加入一条边,保证每次加入的边都不构成环路。
画出最小生成树的过程实例:
3.设计
(1)Prim算法: