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

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

ID:22287455

大小:73.00 KB

页数:6页

时间:2018-10-28

数据结构课程设计-最小生成树问题 _第1页
数据结构课程设计-最小生成树问题 _第2页
数据结构课程设计-最小生成树问题 _第3页
数据结构课程设计-最小生成树问题 _第4页
数据结构课程设计-最小生成树问题 _第5页
数据结构课程设计-最小生成树问题 _第6页
资源描述:

《数据结构课程设计-最小生成树问题 》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、实习5、最小生成树问题一、需求分析1.问题描述若要在n个城市间建设通信网络,只需要架设n-1条线路即可。如何以最低的经济代价建设这个通信W,是一个W的最小生成树问题。2.基本要求(1)利用克魯斯卡尔算法求网的最小生成树。(2)实现教科书6.5节中定义的抽象数据类型MFSeto以此表示构造生成树过程中的连通分量。⑶以文本形式输出生成树中各边以及它们的权值。3.测试数据4.实现提示通信线路一旦建立,必然是双向的。因此,构造最小生成树的网一定是无向网。设图的顶点数不超过30个,并为简单起见,网中边的权值设成小于100的整数,可利川C语言提供的随机函数产生。阁的存储

2、结构的选取应和所做操作相适应。为了便于选择权伉最小的边,此题的存储结构既不用邻接矩阵的数组表示法,也不选用邻接表,而是以存储边(带权)的数组表示图。二、概要设计ADTGraph{数椐对象V:V是具有相同特性的数裾元素的集合,成为顶点集。数据关系R:R={VR}V,wev且P(V,表示从V到W的弧,谓词P(V,w}定义了弧<^77>的意义或信息}基本操作:CreateUDN(*G)操作结果:创建无向阁。MiniSpanTree(G,minedge)(使用克里斯卡尔算法始终调试不成功只好改用普利姆算法)初始条件:图G存在。操作结果:求图G的最小生成树。Print

3、MinEdge(G,minedge)初始条件:阁G存在。操作结果:输出图G的最小生成树。}ADTGraph三、详细设计(源代码)(使用C语言吋指针参数传递总是出问题只好改用C++语言)#tdio.h>#inlib.h〉#defineMAX10//本程序设最大顶点数为10typedefstruct{intvexnum;//点数量intarcnum;//边数US:intarcs[MAX][MAX];//边存储charvexs[MAX];//点存储}iGraph;typedefstructclose{intadjvex;intendvex;intlowcost;/

4、/最小权值}*closedge,closedges;voidCreateUDN(iGraph*G){//创建无向图inti,j,m,k,l,cost;charname1,name2;printf(”请输入顶点数和边数(注意:边数大于或等于顶点数):");scanf("%d%d",m);getchar();printf("请输入各个顶点名字:’’);fo>vexnum;i++){scanfvexs[i]);getchar();}for(exnum;i++)fo〉vexnum;j++)G->arcs[i][j]=100;//初始化边的权值此程序设100为

5、最大值for(rcnum;i++){printff请输入第%(1条边(输入格式为:端点1-端点2:权值):",i+l);scanf("%c-%c:%dt);getchar();f->vexnum;j++)//在表屮查找点{if(namel==G->vexs[j])k=j;}G-〉vexnum;m++)//卉:表屮査找点{if(name2==G-〉vexs[mJ)1=m;}if(k==1)//两个点如果相同,报错{i―;printf("输入错误的数据,请重新输入");continue;}G->arcslkj[lj=cost;//无向边赋权值G->arc

6、s[l][k]=cost;}//使输入的边赋值for(ixnum;i++)forvexnum;j++)if(i=j)G-〉arcs[il[jl=O;//如果端点相同,则不存在边}voidMiniSpanTree(iGraphG,closedge{//求最小生成树inti,j,k,z;inttemp;intcurrentmin;k=0;minedge=(closedge)malloc((G.vexnum+1)*sizeof(closedges));for(j=l;jj++){minedge[j-1].adjvex=k;minedge

7、j-1J.endvex=j

8、;minedge[j-1].lowcost=G.arcs[k][j];}G.vexnum-1;i++)currentmin=minedge[i].lowcost;k=i;foG.vexnum-1;j++){if(minedge[j].rrentmin){currentmin=minedgefjl.lowcost;k=j;}}//交换第k个元素和第i个元素temp=minedge[i].adjvex;minedge[i].adjvex=minedge[k].adjvex;minedge[k].adjvex=temp;ternp=minedge[ij.endve

9、x;minedge[i].endvex=minedg

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。