提示:本篇难点: 生成树概念的理解
重点:是普利姆算法、克鲁斯卡尔算法构造最小生成树
超超超重点的是 普利姆和克鲁斯卡尔构造最小生成树的算法,这部分可能需要同学们自行去学习了。 一定要理解后用代码能够实现这两个算法已经了解应用场景
文章目录
- 图的生成树
- 网的最小生成树
- 请同学们思考,如何构造图的最小生成树?
- 克鲁斯卡尔算法 构造最小生成树
- 普利姆算法构造最小生成树
图的生成树
无向连通图的生成树举例
如图所示:有如下无向连通图
根据上述条件分析结果得出它的生成树有如下:
网的最小生成树
请同学们思考,如何构造图的最小生成树?
克鲁斯卡尔算法 构造最小生成树
构造思想:
任给一个有n个顶点的连通图N={V,E},
首先构造一个由这n个顶点组成、不含任何边的图G={V,NULL},其中每个顶点自成一个连通分量(集合),其次不断从E中取出权值最小的一条边(若有多条权值相等任取其一),若该边的两个顶点来自不同的连通分量,则将此边加入到G中。如此重复,直到所有顶点在同一个连通分量上为止。
综上所述:每次迭代时,选出一条具有最小权值的边,且边的两端点不在同一连通分量(集合)上,则加入生成树。
克鲁斯卡尔算法思想的起始条件就是 生成树只包含图的所有顶点。
上图也可以构造最小生成树。
所以最小生成树不一定唯一。
普利姆算法构造最小生成树
思想:每次选边的时候是从两个集合中的顶点直接相连的边中选取权值最小的那一条。
构造顺序:1-2 2-3 2-4 2-6 4-5