- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构课程设计报告(最小生成树)
《数据结构》课程设计报告课程名称:最小生成树 课题负责人名(学号):同组成员名单(角色):指导教师:评阅成绩:评阅意见:提交报告时间:2011年12月19日最小生成树计算机科学与技术 专业学生:指导老师:[摘要]选择一颗生成树,使之总的消费最少,也就是要构造连通网的最小代价生成树(简称为最小生成树)的问题,一颗生成树的代价就是树上各边的代价之和,构造最小生成树可以有多种算法,其中多数算法利用了MST的性质。关键词:最小生成树 连通图 普里姆算法 克鲁斯卡尔算法 MST设计目的了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;提高综合运用所学的理论知识和方法独立分析和解决问题的能力;训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。算法思想分析该设计的要求是在n个城市之间建设网络,不仅要保证连通,还要求是最经济的架设方法。根据克鲁斯卡尔和普里姆算法的不同之处,该程序将城市个数大于十个时应用普里姆算法求最小生成树,而城市个数小于十个时则应用克鲁斯卡尔进行计算。算法思想普里姆(Prim)算法思想选择从0节点开始,并选择0节点相关联的最小权值边,将与这条边相关联的另一顶点出列;在出列的节点中相关联的所有边中选择一条不与另一个已出列的节点相关联的权值最小的边,并将该边相关联的节点出列;重复b)直到所有的节点出列。克鲁斯卡尔(Kruskal)算法思想为了使生成树上总的权值之和最小,应该使每一条边上的权值尽可能的小,所以应从权值最小的边选起,直至选出n-1条不能构成回路的权值最小的边位置。具体做法如下:首先构造一个含n个顶点的森林,然后按权值从小到大从连通图中选择不使森林中产生回路的边加入到森林中去,直至该森林变成一棵树为止,这棵树便是连通图的最小生成树。由于生成树上不允许有回路,因此并非每一条居当前最小的边都可选。从生成树的构造过程可见,初始态为n个顶点分属n棵树,互不连通,每加入一条边,就将两棵树合并为一棵树,在同一棵树上的两个顶点之间自然相连通,由此判别当前权值最小边是否可取只要判别它的两个顶点是否在同一棵树上即可。系统采用的数据结构和算法数据结构TypedefintVertextype;Typedefintadimatrix[MaxVertexNum][MaxVertexNum];TypedefintVertextypevexlist[MaxVertexNum];TypedefintVexType;TypedefintAdjType;TypedefstructedgeElemedgeset[MaxVertexNum];structedgeElem{intfromvex;//头顶点intendvex;//尾顶点int weight;//权};Typedefstruct{int n;//图的顶点个数AdjTypeacrs[MAXVEX][MAXVEX];//边信息}GraphMatrix;Typedefstruct{intstart_vex,stop_vex;//边的起点和终点AdjType weight;//边的权}Edge;Edge mst[5];算法Great_adjmatrix();Great_adjmatrix2();Kruskal();out_edgeaet();prim();算法的描述与实现Great_adjmatrix()和Great_adjmatrix2()是两种建立图的方法;克鲁斯卡尔算法(Kruskal):Void kruskal(GraphMatrix * pgraph,Edgemst[]){inti,j,min,vx,vy;intweight,minweight;Edge edge;for(i=0;ipgraph-n-1;i++){mst[i].start_vex = 0;Mst[i].stop_vex = i+1;Mst[i].weight = pgraph-arcs[0][i+1];}for(i=0;ipgraph-n-1;i++)//共n-1条边{minweight = MAX;min = i;for(j=i;jpgraph-n-1;j++)//从所有(vx,vy)(vx∈U,vy∈V-U)中选出最短的边if(mst[j].weightminweight){minweight = mst[j].weight;min = j;}//mst[min]是最短的边(vx,vy)(vx∈U,vy∈V-U),将mst[min]加入最小生成树edge = mst[min];mst[min] = mst[i];mst[i] = edge;vx = mst[i].stop_ve
文档评论(0)