图的最小生成树的实现..docVIP

  1. 1、本文档共28页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
图的最小生成树的实现.

数据结构课程设计 设计说明书 图的最小生成树的实现(Kruskal算法) (Kruskal算法) 计算机科学与技术系 2011 年 3 月 4 日 数据结构课程设计评阅书 题 目 图的最小生成树的实现(Kruskal算法) 学生姓名 学号 指导教师评语及成绩 成绩: 教师签名: 年 月 日 答辩教师评语及成绩 成绩: 教师签名: 年 月 日 教研室意见 总成绩: 室主任签名: 年 月 日 注:指导教师成绩60%,答辩成绩40%,总成绩合成后按五级制记入。 指导教师(签字): 教研室主任(签字): 批准日期: 年 月 日 摘 要 图的最小生成树的实现(Kruskal算法)是一种按照网中边的权值递增的顺序构造最小生成树的方法.在构造过程中,按照网中边的权值由小到大的顺序,不断选取当前当前为被选取的边集中权值最小的边.最后形成的连通分量便是最小生成树.在存储图时选取邻接矩表.此算法的关键问题是如何判断回路,解决办法是定义一个一维数组,让f[i]=I,在增加边时判断f[i]是否和f[j]相同.这样的设计更方便实用,可以使用户更好的使用. 关键词: 1 课题描述 1 2问题分析和任务定义 2 3 逻辑设计 3 4 程序编码 5 6 总结 10 参考文献 11 1 课题描述 图的最小生成树的定义:设图连通G的所有边的集合E(G),在从任意顶点出发便利图时,必定将E(G)分为两部分,一个是便利的边的集合,另一个是剩余的.把经历的边的集合和图G中所有顶点一起构成连通图G的极小连通子图。这个连通图是一棵生成树,无向连通图的生成树不是唯一的,连通图的一次遍历所经历的边的集合及图中所有顶点的集合就构成了该图的一棵生成树,对连通图的不同遍历,就可得到不同的生成树。如果无相连通图是一个网,那么它所有生成树中必有一棵边的权值总和最小的生成树,我们称这棵树是最小生成树。本次课设将采用Kruskal算法解决最小生成树问题。 2问题分析和任务定义 假设T中的边和顶点均涂成红色,其余边为白色。开始时G中的边均为白色。 1)将所有顶点涂成红色; 2)在白色边中,挑选一条权最小的边,使其与红色边不形成圈,将该白色边涂红; 3)重复2)直到有n-1条红色边,这n-1条红色边便构成最小生成树T的边集合。 注意到在算法执行过程中,红色顶点和红色边会形成一个或多个连通分支,它们都是G的子树。一条边与红色边形成圈当且仅当这条边的两个端点属于同一个子树。因此判定一条边是否与红色边形成圈,只需判断这条边的两端点是否属于同一个子树。 上述判断可以如此实现:给每个子树一个不同的编号,对每一个顶点引入一个标记t,表示这个顶点所在的子树编号。当加入一条红色边,就会使该边两端点所在的两个子树连接起来,成为一个子树,从而两个子树中的顶点标记要改变成一样。综上,可将Kruskal算法细化使其更容易计算机实现。逻辑设 图 3.1 kruskal流程图 4 程序编码#includestdio.h #includestdlib.h #define MaxVertexNum 12 #define MaxEdgeNum 20 #define MaxValue 1000 typedef int VertexType; typedef VertexType vexlist[MaxVertexNum]; typedef int adjmatrix[MaxVertexNum][MaxVertexNum]; int visited[MaxVertexNum]={0}; struct edgeElem { int fromvex; /*边的起点域*/ int endvex; /*边的终点域*/ int weight; /*边的权值域*/ }; typedef struct edgeElem edgeset[MaxEdgeNum]; void Kruskal(edgeset GE ,edgeset C,int n) { int i,j,k,d,m1,m2; a

您可能关注的文档

文档评论(0)

sfkl + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档