- 1、本文档共12页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
蛤蟆的数据结构笔记之四十五克鲁斯卡尔算法
45. 蛤蟆的数据结构笔记之四十五克鲁斯卡尔算法
本篇名言:“假如生活欺骗了你 , 不要忧郁 , 也不要愤慨 ! 不顺心的时候暂且容忍 : 相信吧 , 快乐的日子就会到来。-- 普希金”
上两篇学习了弗洛伊德和迪杰特斯拉算法。这次来看下克鲁斯卡尔算法。
1. 克鲁斯卡尔算法
克鲁斯卡尔(Kruskal)算法是在剩下的所有未选取的边中,找最小边,如果和已选取的边构成回路,则放弃,选取次小边。是实现图的最小生成树最常用的算法。
1.1 生成树定义
对于有 n 个顶点的无向连通图 G, 把遍历过程中顺序访问的两个顶点之间的路径记录下来,这样G中的n个顶点以及由出发点一次访问其余 n-1 个顶点所经过的 n-1 条边就构成了G 的极小连通子图,也就是 G 的一棵生成树,出发顶点是生成树的根。
1.2 最小生成树
给定一个连通网络, 要求构造具有最小代价的生成树时, 也即使生成树的各边的权值总和达到最小。 把生成树各边的权值总和定义为生成树的权, 那么具有最小权值的生成树就构成了连通网络的最小生成树。
构造最小生成树的算法有很多种,其中大多数的算法都利用了最小生成树的一个性质 ,
简称为 MST 性质:假设 G=(V,E)是一个连通网络,U 是 V 中的一个真子集,若存在顶点 u ∈U 和顶点v∈(V ? U ) 的边(u,v)是一条具有最小权值的边,则必存在 G 的一棵最小生成树包括这条边(u,v)。
构造最小生成树的常用算法主要有:Prim(普里姆)算法和 Kruskal(克鲁斯卡尔)算法。
本篇将的是克鲁斯卡尔算法,下篇我们将普里姆算法。
1.3 克鲁斯卡尔算法
设 G=( V,E )是一个有 n 个顶点的连通图,则令最小生成树的初始状态为只有 n 个顶点而无任何边的非连通图 T={V,{?}},图中每个顶点自成一个连通分量。依次选择 E 中的最小代价边,若该边依附于 T 中的两个不同的连通分量,则将此边加入到 T 中;否则,舍去此边而选择下一条代价最小的边。以此类推,直到 T 中所有顶点都在同一连通分量上为止。这时的 T 就是 G 的一棵最小生成树。
1.4 典型案例
最典型的是一个题目如下:
如下图1所示的赋权图表示某七个城市及预算它们之间的一些某些直接通信道路造价(单位:万元) ,试给出一个设计方案,使得各城市之间既能够通信又使总造价最小并计算其最小值。
该图2的邻接矩阵为
赋权图3中 i,j 两个城市之间的造价费用边记为S ij, ,则从小到大排序
? 步骤1
初始化如下图4:
? 步骤2
从图5中选择造价最小的边,S17 ,此时 T={{2,3,4,5,6},{ S 17 }},造价 Cost=1
? 步骤3
图6接着选择造价第二小的序号 2 的边,即S 34 ,加入 T 中,此时 T={{2,5,6},{ S 17 , S34 }},造价 Cost=1+3=4
? 步骤4
以此类推,直到选择造价第五小的序号为 5 的边,即S 23,由于加入后边S23, S27,S37 将构成回路,因此舍弃该边.图7
? 步骤5
以此类推,直到所有顶点已包含在树中,整棵最小生成树已经构造完成。如图8
2. 代码实现
2.1 结构体定义
typedef struct
{
int begin;
int end;
int weight;
}edge;
typedef struct
{
int adj;
int weight;
}AdjMatrix[MAX][MAX];
typedef struct
{
AdjMatrix arc;
int vexnum, arcnum;
}MGraph;
定义边,包括开始、结束和权值。
定义一个矩阵,每个矩阵点包含是否邻接数值以及权值。
定义一个图,包括矩阵和顶点数量。
2.2 main
根据输入来创建图,
然后生成最小生成树。
如下图9
2.3 CreatGraph
构造图。
输入城市和边数。
城市数量就是顶点数量。
根据顶点的数量,将每个顶点间的距离初始化为0。
然后输入城市之间的费用。先输入两个城市的坐标然后输入城市的费用(权值)。
如下图10:
2.4 sort
对权值进行排序
输入参数为一个边的数组,图指针。
根据图中边的总数进行处理,
从第一个边开始,和其余的边进行比较,如果大于其它边则调用Swapn函数进行互换。
实现所有边权值从小到大的排列。
2.5 Swapn
将两个边的信息进行互换,包括起点、终点和权值。
2.6 MiniSpanTree
该函数用于生成最小生成树。
定义一个临时边的数组和整型数组。
根据顶点数量(城市数量),来处理所有边的起始点和结束点,以及权值,并保持在临时边数组中。
调用sort函数进行排序。
然后初始化临时的整型数组都为0.
最后循环,根据边的总
您可能关注的文档
- 高考数学核心考点集锦课件:第讲 直线与圆锥曲线.ppt
- 高考选考题集锦坐标系与参数方程.ppt
- 高考调研理科数学课本讲解- 平面向量基本定理及坐标运算.ppt
- 高职英语教学中低情感障碍教学研究.ppt
- 高考生物第二单元 第讲细胞内物质的合成转运及废物的排出细胞的生物膜系统.ppt
- 高考理数(安徽专用) 正弦余弦定理及解三角形.ppt
- 高聚物加工基础-总结.ppt
- 高英unit.ppt
- 高考语文二轮专题课件:变换句式.ppt
- 高量- 不可约张量算符.ppt
- 某县纪委监委开展“校园餐”突出问题专项整治工作汇报22.docx
- 中小学校园食品安全与膳食经费管理专项整治工作自查报告66.docx
- 某县委常委、宣传部部长年度民主生活会“四个带头”个人对照检查发言材料.docx
- XX县委领导班子年度述职述廉报告3.docx
- 某县纪委关于校园餐问题整治工作落实情况的报告.docx
- 中小学校园食品安全与膳食经费管理专项整治工作自查报告22.docx
- 某县税务局党委领导班子年度民主生活会“四个带头”对照检查材料.docx
- 某县委书记在县委常委班子年度民主生活会专题学习会上的讲话.docx
- 某县纪委校园餐问题整治工作落实情况的报告.docx
- 某区委副书记、区长年度民主生活会对照检查材料.docx
文档评论(0)