ImageVerifierCode 换一换
格式:DOCX , 页数:36 ,大小:222.96KB ,
资源ID:4069648      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4069648.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(城市通信网络建设系统.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

城市通信网络建设系统.docx

1、城市通信网络建设系统数据结构课程设计题目:城市通信网络建设系统班级:*姓名:*学号:*指导教师:完成日期:2015年6月13日1需求分析1.1 问题描述通信设施的安全保障是安全生产管理工作的一项重要内容。随着通信网络的不断扩大和各种先进的通信方式日益增多相应的通信设施也在快速扩展,在不同的环境、不同的地域受到各种客观条件的影响和破坏(包括自然因素和人为因素)以及通信设施在使用过程中的老化都会对全程全网的通信质量造成不同程度的影响。因此,采用通信设施安全保障计算机管理系统实现全区通信设施的集中管理,对保障通信设施安全,提高维护工作效率,及时发现与处理隐患问题,增强抵抗灾害能力,特别是在实现管理工

2、作的系统化、正规化、规范化方面是非常必要的。如何在最小的经济条件下达到利益最大化,是所有公司、企业已经政府部门一直所探讨和解决的问题。对于城市通信管理系统来说,若要在n个城市之间建设通信网络,只需要架设n-1条通信线路即可,建立最小生成树即能实现以最低的经济代价建设这个通信网。1.2 基本任务通过用户调查分析及实际需求,系统需要实现如下基本任务:(1)在纸上模拟设计n个城市的网络平面图,城市数不少于20个,相同的的城市数不少于2(n-1),顶点表示各城市,边表示城市间的距离;(2)编写算法,求解最小代价通信网络;(3)输出该通信网络中各边及其权值;n个城市间的线路连接属于图的结构,要构建最经济

3、的通信网络,即是构建图的生成树。把城市间的线路关系看成是图。城市间的距离即是图的权值。利用prim算法或kruskal算法即可求出最小生成树。2概要设计为了完成需求分析的基本任务,主要从以下3个方面进行设计:2.1 主界面设计为了使程序界面更加友好,建立了interface函数和choice函数,即欢迎界面以及实现用户可以按数字键选择相应的功能。欢迎界面如下图: 2.2 数据结构设计若要在n个城市之间建设通信网络,只需要架设n-1条通信线路即可。所以,将一个现实的经济问题,转变为一个求最小生成树的问题。本系统软件采用经典算法prim算法和kruskal算法实现求最小生成树,从而获取最经济的通信

4、路径。2.3 系统功能设计系统建立了interface函数和choice函数,其功能如下:(1)interface函数:使用户更清晰看到程序的主体,使得程序界面更为直观。程序如下: void interface() /初始界面 printf( _n); printf( 最小生成树的应用n); printf( 通信网络建设问题n); printf( MadeBy董卓琴 Version1.0n); printf(_n); printf( n); printf( n); printf(_n; printf( n); printf(_1.输入通信网络基本信息并将信息存储到文件中n); printf(_

5、2.将网络基本信息显示到屏幕上n); printf(_3.用kruskal算法算出最短路径,并将结果存储 到文件中n); printf(_4.用prim算法算出最短路径,并将结果存储到文件中n); printf(_5.退出n); printf( n); printf( n); printf( ttt请输入您要选择的选项(1-5):n); (2)choice函数:为用户提供了方便,用户可以通过按数字键来选择相应的功能。程序如下: void choice() /控制选项函数 MGraph G = MGraph(); int c; interface(); std:cinc; while(c) sw

6、itch(c) case 1: system(cls); system(color 1b); printf( n); printf( ntt*欢迎使用*); printf( n_Welcom_to_Use); printf(n*_*); printf( n); printf( n); printf( n); G=SaveGraph(G); system(cls); interface(); /system(PAUSE); std:cinc; continue; case 2: system(cls); system(color 1c); printf( n); printf( ntt*欢迎使用

7、*); printf( n_Welcom_to_Use); printf(n*_*); printf( n); printf( ttt下面显示的是通信网络的基本信息n); printf( n); G=SaveGraph(G); G=print(G); printf( nttt按任意键返回n); c=getchar(); /c=getchar(); system(cls); interface(); /system(PAUSE); std:cinc; continue; case 3: system(cls); system(color 1e); printf( n); printf( ntt*

8、欢迎使用*); printf( n_Welcom_to_Use); printf(n*_*); printf( n); printf( n); printf( n); G=SaveGraph(G); prim(G,G.vexs0); printf( tt*结果存入KruskalResult.dat中,按任意键返回*n); c=getchar(); c=getchar(); system(cls); interface(); system(PAUSE); std:cinc; continue; case 4: system(cls); system(color 1d); printf( n);

9、printf( ntt*欢迎使用*); printf( n_Welcom_to_Use); printf(n*_*); printf( n); printf( n); printf( n); G=SaveGraph(G); G=kruskal(G); printf( tt*结果存入PrimResult.dat中,按任意键返回*n); c=getchar(); c=getchar(); system(cls); interface(); system(PAUSE); std:cinc; continue; case 5: return; 3模块设计3.1 模块设计系统主要包含主程序模块和其它操作

10、模块。其调用关系如下图所示。 3.2 系统子模块及其功能设计本系统共设计了5个子模块,各程序的函数名及功能说明如下:(1)CreateGraph(G); /创建图模块(2)SaveGraph(G); /存储图模块(3)Print(G); /输出图模块(4)Kruskal(G); /kruskal算法求最小生成树模块 Kruskal算法的基本思想是: 1、若网络G的边数en1,则G即为所求的最小生成树,否则,一定有en-1. 2、将网络的e条边按权值自小到大顺序排列。 3、将网络G中的边都去掉,只留下n个孤立顶点作为初始的最小生成树T,再按边的排放顺序逐个考察,若与当前E(T)中的边不构成圈,便

11、将它加入到边集E(T),直至E(T)中边数满n-1为止。(5)Prim(G); /prim算法求最小生成树模块 Prim算法是另一种求最小生成树的方法,它的基本思想是按权值局部最小逐次将顶点和边加入到T中,直至V(T)满n个顶点为止。Prim算法步骤为: 1、设最小生成树T的V(T)和E(T)均为空。 2、从顶点集V(G)中任取一顶点加到顶点集V(T)中。 3、在与V(T)中各顶点相关的所有边中,取一条权值最小的边(Vi,Vj),其中,Vi包含于V(T),Vj包含于V(T)。 4、(Vi,Vj)加入到E(T)中,将顶点Vj加入到V(T)中。 5、若V(T)已满n个顶点,则算法终止,否则转步骤(

12、3)。 3.3 系统模块之间的调用关系系统的5个子模块之间的主要调用关系如下图所示: 4详细设计 4.1 数据结构设计 系统采用邻接矩阵存储信息,定义如下: / 图的数据结构typedef struct MGraph /建立图 MGraph() memset(vexs, 0, MAX_VERTEX_NUM); Vertex vexsMAX_VERTEX_NUM;/ 城市名称 intAdjMatrix arcs;/ 网络条数 int vexnum; / 图的当前顶点数(城市总数) int arcnum; / 图的当前弧数(网络总数) MGraph;/ 记录从顶点集U到V-U的代价最小的边的辅助数

13、组定义typedef struct Temp /辅助数组 Temp() lowcost = 0; Vertex adjvex; /当前点 int lowcost; /权值closedgeMAX_VERTEX_NUM;typedef struct CityNumber CityNumber() memset(cityNam, 0, 1024); char cityNam1024;CityNum;CityNum* Hometown = new CityNum20;/ 若G中存在顶点u,则返回该顶点在图中位置;否则返回-1。#includeint LocateVex(MGraph G,Vertex

14、u) int i; for(i = 0; i G.vexnum; +i) if( strcmp(u, G.vexsi) = 0) return i; return -1; 4.2 系统主要模块设计 4.2.1 CreateGraph函数 1)创建邻接矩阵以存储图的内容。 2)填充矩阵,即输入城市间网络的状况,以方便使用prim算法或kruskal算法求 出最经济的架设方法。 程序如下: / 采用数组(邻接矩阵)表示法,构造无向网G。 MGraph CreateGraph(MGraph &G)int i = 0, j = 0, k = 0, w = 0; Vertex va,vb; /路径的两个

15、节点 printf(nntt*建立城市间网络信息*); printf(请输入城市的总数:n); scanf(%d,&G.vexnum ); printf(请输入城市间的网络数:n); scanf(%d,&G.arcnum); printf(请输入%d个城市的名称(%d个字符):n,G.vexnum); for(i=0;iG.vexnum;+i) / 构造顶点向量 scanf(%s,G.vexsi); for(i=0;iG.vexnum;+i) / 初始化邻接矩阵 for(j=0;jG.vexnum;+j) G.arcsij=65535; / 65535为无穷大 printf(请输入%d条网络的

16、两个城市信息城市1和城市2的距离(以空格作为间隔): n,G.arcnum); for(k=0;kG.arcnum;+k) scanf(%s %s %d,va,vb,&w); / 输入城市1城市2名称及其距离 i=LocateVex( G, va); /定位权值位置 j=LocateVex( G, vb); G.arcsij=G.arcsji=w; /对称 return G; 4.2.2 SaveGraph函数 1)为了避免每次都重复输入信息,用文件存储图的内容。 2)如果没有文件则建立文件,并把图的内容存储到文件中。 3)如果文件存在,则从文件中读取图的内容到内存,以便完成其他操作。程序如下

17、: MGraph SaveGraph(MGraph G) /输入内容存储在smalltree.dat int i,j; FILE*fp; fp=fopen(smalltree.dat,rt); if(fp=NULL) G=CreateGraph(G); fp=fopen(smalltree.dat,wt); fprintf(fp,%dn,G.vexnum); /存城市树 fprintf(fp,%dn,G.arcnum); /存网络数 for(i=0;iG.vexnum;+i) fprintf(fp,%stn,G.vexsi);/存城市名称 for(i=0;iG.vexnum;+i)/存储邻接矩

18、阵 for(j=0;jG.vexnum; +j) if(G.vexsi = G.vexsj) G.arcsij = 0; /到它自己 fprintf(fp,%s_%s_%dn,G.vexsi, G.vexsj, G.arcsij); else fprintf(fp,%s_%s_%dn,G.vexsi, G.vexsj, G.arcsij); rewind(fp); std:cout存储成功!。输入任意键返回.std:endl; char c = getchar(); else /从文件中读取网的信息存到内存中 printf(tt*正在读取文件中.*n); fscanf(fp,%dn, &G.v

19、exnum); fscanf(fp,%dn, &G.arcnum); char tempBuffer1024; memset(tempBuffer, 0, 1024); for(i=0; iG.vexnum; +i) fgets(tempBuffer, 1023, fp); strcpy(Hometowni.cityNam,tempBuffer); char CityA1024; int Lenth = 0; memset(CityA, 0, 1024); for(i=0; iG.vexnum; +i) for(j=0;j=0; n-) int intkeynum = 0; switch(te

20、mpCityNamen) case 0: intkeynum = 0; break; case 1: intkeynum = 1; break; case 2: intkeynum = 2; break; case 3: intkeynum = 3; break; case 4: intkeynum = 4; break; case 5: intkeynum = 5; break; case 6: intkeynum = 6; break; case 7: intkeynum = 7; break; case 8: intkeynum = 8; break; case 9: intkeynum

21、 = 9; break; Lenth += intkeynum*X; X = X*10; G.arcsij = Lenth; printf(tt*读取成功.t*n); fclose(fp); return G; 4.2.3 print函数 Print函数完成输出功能,将内存中图的内容输出到屏幕上程序如下:MGraph print(MGraph G)/将输入的网络基本信息打到屏幕上 int i,j; printf(城市总数:%dt, G.vexnum); printf(网络条数:%dn, G.arcnum); printf(城市名称:tn); for(i=0; iG.vexnum; i+) /printf(%s_,G.vexsi); std:coutHometowni.cityNam; printf(n); printf(各个城市间的距离:n); printf(n); printf(n); for(i=0;iG.vexnum;+i) for(j=0;jG.vexnum;+j) printf(%s_%s_距离:%d公里n,G.vexsi+G.vexnum,G.vexsj+G.vexnum,G.arcsij); std:cout输入任意键返回.std:endl; char c = getchar(); return G;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1