数据结构课程设计最小生成树问题 .docVIP

数据结构课程设计最小生成树问题 .doc

  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文档。上传文档
查看更多
数据结构课程设计最小生成树问题 .doc

实习5、最小生成树问题 一、需求分析 问题描述 若要在n个城市间建设通信网络,只需要架设n-1条线路即可。如何以最低的经济代价建 设这个通信W,是一个W的最小生成树问题。 基本要求 利用克魯斯卡尔算法求网的最小生成树。 实现教科书6.5节中定义的抽象数据类型MFSeto以此表示构造生成树过程中的连通分 量。 ⑶以文本形式输出生成树中各边以及它们的权值。 测试数据 4.实现提示 通信线路一旦建立,必然是双向的。因此,构造最小生成树的网一定是无向网。设图的顶 点数不超过30个,并为简单起见,网中边的权值设成小于100的整数,可利川C语言提 供的随机函数产生。 阁的存储结构的选取应和所做操作相适应。为了便于选择权伉最小的边,此题的存储结构 既不用邻接矩阵的数组表示法,也不选用邻接表,而是以存储边(带权)的数组表示图。 二、概要设计 ADT Gra ph{ 数椐对象V: V是具有相同特性的数裾元素的集合,成为顶点集。 数据关系R: R={VR} V,wev且P(V,表示从V到W的弧,谓词P(V,w}定义了弧<^77>的意义或信息} 基本操作: CreateUDN ( *G) 操作结果:创建无向阁。 Mini SpanTree(G,minedge)(使用克里斯卡尔算法始终调试不成功只好改用普利姆算 法) 初始条件:图G存在。 操作结果:求图G的最小生成树。 PrintMinE dge(G,mine dge) 初始条件:阁G存在。 操作结果:输出图G的最小生成树。 }ADT Graph 三、详细设计(源代码) (使用C语言吋指针参数传递总是出问题只好改用C++语言) #tdio.h #in lib.h〉 #define MAX 10//本程序设最大顶点数为10 typede f struct { int vex num;//点数量 int arc num;//边数 US: int arc s[MAX][MAX ];//边存储 char vexs [MAX];//点存储 }iGraph; t ypedef str uct close { int ad jvex; i nt endvex; int lo wcost;//最小权值 }*closed ge,closedg es; void CreateUDN(iG raph *G) {//创建无向图 int i,j,m,k,l,cost; char na me 1,name2; printf(”请输入顶点数和边数(注意:边数大于或等于顶点数):\n); scan f(%d %d,m); getchar(); printf(请输入各个顶点名字:\n’’); fo vexnum;i++) { scanf vexs[i]); get char(); } for(exnum;i++) fo〉vexnum;j++) G-arcs [i][j]=100; //初始化边的权值此程序设100为最大值 for(rcnum;i++) { printff请输入第%(1条边(输入格式为:端点1-端点2:权值):\n,i+l); scanf (%c-%c:%d t); getchar(); f -vexnum;j ++)//在表屮查找点 { if(namel ==G-vexs[j]) k=j; } G-〉vexnum;m++)//卉:表屮査找点 { if(name 2==G-〉vexs [mJ) 1 =m; } if(k ==1)//两个点如果相同,报错 { i ―; printf(输入错误的数据,请重新输入\n); conti nue; } G-arcs lkj[lj=cos t;//无向边赋权值 G-arc s[l][k]=co st; } //使输入的边赋值 for(i xnum;i++) for vexnum;j++) if(i=j) G-〉arc s[il[jl=O;//如果端点相同,则不存在边 } void MiniSpanTr ee(iGraph G,closedge {//求最小生成树 int i,j,k,z; int temp; int cur rentmin; k=0; minedge=(c losedge)ma lloc((G.ve xnum+1 )*si zeof(close dges)); for(j=l;jj++) { min edge[j-1 ] .adj vex=k; min edge|j-1 J.endvex=j; min edge[j-1 ] .lo wcost=G .arcs[k] [j ]; } G.vexnum-1 ;i++) cu rrentmin=m inedge[i].lowcost; k=i; foG.vexnum-1 ;j++) { if(m inedge[j].rre

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档