数据结构——构造最小生成树
来源:互联网 发布:介绍自己的淘宝店铺 编辑:程序博客网 时间:2024/06/07 20:05
给定一个带权的无向连通图,如何选取一棵生成树,使树上所有边上权的总和为最小,这叫最小生成树.
求最小生成树的算法
(1) 克鲁斯卡尔算法
图的存贮结构采用边集数组,且权值相等的边在数组中排列次序可以是任意的.该方法对于边相对比较多的不是很实用,浪费时间.
(2) 普里姆算法
图的存贮结构采用邻接矩阵.此方法是按各个顶点连通的步骤进行,需要用一个顶点集合,开始为空集,以后将以连通的顶点陆续加入到集合中,全部顶点加入集合后就得到所需的最小生成树 .
下面来具体讲下:
克鲁斯卡尔算法
方法:将图中边按其权值由小到大的次序顺序选取,若选边后不形成回路,则保留作为一条边,若形成回路则除去.依次选够(n-1)条边,即得最小生成树.(n为顶点数)
第一步:由边集数组选第一条边
第二步:选第二条边,即权值为2的边
第三步:选第三条边,即权值为3的边
第四步:选第四条边,即权值为4的边
第五步:选第五条边
普里姆算法
方法:从指定顶点开始将它加入集合中,然后将集合内的顶点与集合外的顶点所构成的所有边中选取权值最小的一条边作为生成树的边,并将集合外的那个顶点加入到集合中,表示该顶点已连通.再用集合内的顶点与集合外的顶点构成的边中找最小的边,并将相应的顶点加入集合中,如此下去直到全部顶点都加入到集合中,即得最小生成树.
例在下图中从1点出发求出此图的最小生成树,并按生成树的边的顺序将顶点与权值填入表中.
———————>先写出其邻接矩阵
第一步:从①开始,①进集合,用与集合外所有顶点能构成的边中找最小权值的一条边
①——②权6
①——③权1 -> 取①——③边
①——④权5
第二步:③进集合,①,③与②,④,⑤,⑥构成的最小边为
①——④权5
③——⑥权4 -> 取③——⑥边
第三步:⑥进集合,①,③,⑥与②,④,⑤构成的各最小边
①——②权6
③——②权5
⑥——④权2 -> 取⑥——④边
第四步:④进集合,①,③,⑥,④与②,⑤构成的各最小边
①——②权6
③——②权5 -> 取③——②边
⑥——⑤权6
第四步:②进集合,①,③,⑥,②,④与⑤构成的各最小边
②——⑤权3 -> 取②——⑤边
这也是在网上找到的一个Kruskal和Prim构造过程图,贴出来:
- 顶
- 数据结构——构造最小生成树
- 数据结构——最小生成树
- 数据结构-图-最小生成树(1)普利姆算法构造
- 构造最小生成树的算法——Prim算法
- 构造最小生成树——Kruskal算法
- 【数据结构】最小生成树
- [数据结构]最小生成树
- [数据结构]最小生成树
- 数据结构---最小生成树
- 数据结构——邻接矩阵的最小生成树Kruskal算法
- 《大话数据结构》最小生成树——Prim算法
- 《大话数据结构》最小生成树——Kruskal算法
- 数据结构_课程设计——最小生成树:室内布线
- 数据结构——邻接矩阵的最小生成树Prim算法
- 数据结构例程——最小生成树的普里姆算法
- 数据结构OJ作业——最小生成树
- 数据结构与算法-最小生成树—普里姆算法
- 数据结构 图 最小生成树
- servlet异常如何处理
- 原型设计模式
- Cpp类和对象之四个默认成员函数和运算符重载
- bootstrap 网格系统(Grid system) 总结与实践
- Python的多种安装方式,到Spyder快捷键
- 数据结构——构造最小生成树
- 【数学分析+DFS】BZOJ1053(HAOI2007)[反素数ant]题解
- List集合排序
- 洛谷Oj-榨取kkksc03-二维背包
- 多条目展示
- JS面向对象原理和
- 05_ARM汇编自学笔记模型之程序状态寄存器
- Perf工具
- php类abstract和final,类方法abstract和final, interface