1、-本页仅作为文档封面,使用时请直接删除即可-内页可以根据需求调整合适字体及大小-最小生成树问题(总10页) 榆林学院12届课程设计 最小生成树问题课程设计说明书 学生姓名: 赵佳 学 号: 12 院 系: 信息工程学院 专 业: 计算机科学与技术 班 级: 计14本1 指导教师: 答辩时间: 年 月 日 最小生成树问题一、 问题陈述最小生成树问题设计要求:在n个城市之间建设网络,只需保证连通即可,求最经济的架设方法。存储结构采用多种。求解算法多种。二、 需求分析1. 在n个城市之间建设网络,只需保证连通即可。2. 求城市之间最经济的架设方法。3.采用多种存储结构,求解算法也采用多种。三、 概要
2、设计1、 功能模块图开始创建一个图功能选择1.建立邻接矩阵2.建立邻接表算法4. PRIM算法结束2、功能描述(1) CreateUDG()创建一个图:通过给用户信息提示,让用户将城市信息及城市之间的联系关系和连接权值写入程序,并根据写入的数据创建成一个图。(2) Switch()功能选择:给用户提示信息,让用户选择相应功能。(3) Adjacency_Matrix()建立邻接矩阵:将用户输入的数据整理成邻接矩阵并显现在屏幕上。(4) Adjacency_List()建立邻接表:将用户输入的数据整理成临接表并显现在屏幕上。(5) MiniSpanTree_KRSL()kruskal算法:利用k
3、ruskal算法求出图的最小生成树,即:城市之间最经济的连接方案。(6) MiniSpanTree_PRIM()PRIM算法:利用PRIM算法求出图的最小生成树,即:城市之间最经济的连接方案。四、 详细设计本次课程设计采用两种存储结构以及两种求解算法。1、两种存储结构的存储定义如下:typedef struct Arcell double adj; Arcell,AdjMatrixMAX_VERTEX_NUMMAX_VERTEX_NUM; typedef struct char vexsMAX_VERTEX_NUM; 开始标志顶点1加入U集合寻找满足边的一个顶点在U,另一个顶点在V的最小边形成
4、n-1条边的生成树顶点k加入U修改由顶点k到其他顶点边的权值结束得到最小生成树CreateUDG()main()Adjacency_Matrix()Adjacency_List()MiniSpanTree_KRSL()MiniSpanTree_PRIM()locateVex()locateVex()Minimum()locateVex()Sortdge()dj=MAX; cout请输入两个城市名称及其连接费用(严禁连接重复输入!):endl; for(k=0;k dgevaluek.ch1 dgevaluek.ch2 dgevaluek.value; i = LocateVex(G,dgeva
5、luek.ch1); j = LocateVex(G,dgevaluek.ch2); ij.adj = dgevaluek.value; ji.adj = ij.adj; return OK; int LocateVex(MGraph G,char ch) dj=MAX)cout0 ; elsecoutij.adj ; coutendl; void Adjacency_List(MGraph G,Dgevalue dgevalue) h1=i&dgevaluej.ch2!=i)coutdgevaluej.ch2;else if(dgevaluej.ch1!=i&dgevaluej.ch2=i)
6、coutdgevaluej.ch1;coutbb endl;void MiniSpanTree_KRSL(MGraph G,Dgevalue & dgevalue)h1); p2 = bjLocateVex(G,dgevaluei.ch2); if(p1 != p2) cout 城市dgevaluei.ch1与城市dgevaluei.ch2连接。endl; for(j=0; j dgevaluej.value) temp = dgevaluei.value; dgevaluei.value = dgevaluej.value; dgevaluej.value = temp; ch1 = dge
7、valuei.ch1; dgevaluei.ch1 = dgevaluej.ch1; dgevaluej.ch1 = ch1; ch2 = dgevaluei.ch2; dgevaluei.ch2 = dgevaluej.ch2; dgevaluej.ch2 = ch2; void MiniSpanTree_PRIM(MGraph G,char u)djvex = u; closedgej.lowcost = kj.adj; closedgek.lowcost = 0; for(i=1; i; i+) k = Minimum(G,closedge); cout 城市closedgek.adjv
8、ex与城市k连接。endl; closedgek.lowcost = 0; for(j=0; j; +j) ifkj.adj closedgej.lowcost) closedgej.adjvex = k; closedgej.lowcost= kj.adj; int Minimum(MGraph G,Closedge closedge) owcost != 0 & closedgei.lowcost k) k = closedgei.lowcost; j = i; return j; void main() MGraph G; Dgevalue dgevalue; CreateUDG(G,d
9、gevalue); char u; cout图创建成功。; cout请根据如下菜单选择操作。n; cout1、用邻接矩阵存储:endl; cout2、用邻接表存储:endl; cout3、克鲁斯卡尔算法求最经济的连接方案endl; cout4、普里姆算法求最经济的连接方案endl; int s; char y=y; while(y=y) cout请选择菜单:s; switch(s) case 1: cout用邻接矩阵存储为:endl; Adjacency_Matrix(G); break; case 2: cout用邻接表存储为:endl; Adjacency_List(G,dgevalue)
10、; break; case 3: cout克鲁斯卡尔算法最经济的连接方案为:endl; MiniSpanTree_KRSL(G,dgevalue); break; case 4: cout普里姆算法最经济的连接方案为:endl; coutu; MiniSpanTree_PRIM(G,u); break; default: cout输入有误!; break; coutendly; if(y=n) break; 五、 运行结果与测试六、 设计体会与总结通过本次课程设计,我在程序设计中,用邻接矩阵和邻接表这两种存储结构进行编程,且对Prim算法和Kruskal算法生成最小生成树有了一个初步的了解,同
11、时也为日后的毕业设计打下了良好的基础。而且通过课程设计在下述各方面得到了锻炼:1、能根据实际问题的具体情况,结合数据结构课程中的基本理论和基本算法,正确分析出数据的逻辑结构,合理地选择相应的存储结构,并能设计出解决问题的有效算法。2、提高程序设计和调试能力。通过上机实习,验证自己设计的算法的正确性。学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改。3、培养算法分析能力。分析所设计算法的时间复杂度和空间复杂度,进一步提高程序设计水平。在本次课程设计中,知道如何在n个城市之间建设网络,只需保证连通即可,求最经济的架设方法。并且用了多种求解方式。这几天的课程设计让我充分地体会到了上机实践对于计算机编程的重要性。只顾学习理论是远远不够的。实践中可以发现许许多多的问题,然后通过同学老师的帮助,得以解决,让自己的编程能力得到极大的提升。
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。