最小生成树程序算法.docVIP

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

目录 摘要…………………………………………………..1 概述…………………………………………………..1 Prim算法……………………………………………2 程序运行结果………………………………………..3 结论…………………………………………………..3 参考文献……………………………………………..3 程序代码……………………………………………..5 一、摘要 1、最小生成树得定义: 在一个具有几个顶点的连通图G中,如果存在子图G包含G中所有顶点和一部分边,且不形成回路,则称G为图G的生成树,代价最小生成树则称为最小生成树 二、概述 离散(Discrete mathematics)是研究离散量的结构及其相互关系的数学,是现代数学的一个重要分支。它在各学科领域,特别在领域有着广泛的应用随着信息时代的到来,工业革命时代以为代表的连续占主流的地位已经发生了变化,离散数学的重要性逐渐被人们认识。离散数学课程所传授的思想和方法,广泛地体现在科学技术及相关专业的诸领域,从科学计算到信息处理,从到计算机应用技术,从计算机软件到,从到认知,无不与离散数学密切相关。 三、Prim算法 假设G(V,E)是有n个顶点的连通网络,用T=(U,TE)表示要构造的最小生成树,其中U为顶点集合,TE为边的集合。Prim算法的具体步骤描述如下: (1) 初始化:令U={ ? },TE={ ? }。从V中取出一个顶点u0放入生成树的顶点集U中,作为第一个顶点,此时T=({u0},{ ? }); (2) 从uU,vV-E的边(u,v)中找一条代价最小的边(u*,v*),将其放入TE中,并将v*放入U中。 (3) 重复步骤(2),直至U=V为止。此时集合TE中必有n-1条边,T即为所要构造的最小生成树。 上述过程的具体细节如算法见代码所示。 四、程序运行结果 执行结果: 五、结论 1、该程序成功解决了“最小树生成问题”,完成了题目要求。 2、根据算法分析出Prim算法的复杂度与网的边数无关,适合边稠密网络的最小生成树,但时间复杂度大,程序运行较慢。 3、Kruskal算法仅与网中边数有关,适合于边稀疏网络的最小生成树,在时间复杂度方面小于Prim算法,提高程序运行速度。 六、参考文献 1、《软件技术基础》 西安电子科技大学出版社 周大伟、钟桦等编著 2、《离散数学导论》 高等教育出版社 徐洁磐编著 3、百度百科——“离散数学”,“图论”,“最小生成树” 七、程序代码 1、Prim算法: typedef struct //边的存储结构 { int fromvex,endvex; //边的起点和终点 int length; //边的权值 }edge; edge T[n-1]; //最小生成树 float dist[n][n]; //连通网络的带权邻接矩阵 void Prim(int i) //i表示最小生成树所选取的第一个顶点下标 { int j,k,m,v,min,max=100000; float d; edge e; v=i; //将选定顶点送入中间变量v for(j=0;j=n-2;j++) //构造第一个顶点 { T[j].fromvex=v; if(j=v) { T[j].endvex=j+1; T[j].length=dist[v][j+1]; } else { T[j].endvex=j; T[j].length=dist[v][j]; } for(k=0;k=n-1;k++) //求第k条边 { min=max; for(j=k;j=n-1;j++) //找出最短的边并将最短边的下标记录在m中 if(T[j].lengthmin) { min=T[j].length; m=j; } e=T[m]; //将最短的边交换到T[k]单元 T[m]=T[k]; T[k]=e; v=T[k].endvex; //v中存放新找到的最短边在V-U中的顶点 for(j=k+1;jn-1

文档评论(0)

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

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

1亿VIP精品文档

相关文档