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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

校园导航系统Word格式文档下载.docx

1、所用到的结构体为: typedef struct char name20; /顶点名称 int code; /顶点代号 char introduction50; /顶点信息简介 DataType; (3)景点之间的连接描述,所用到的结构体为: int row; int col; int weight;RowColWeight;用图来存放所提供的所有景点,然后用线性表来存放每一个景点的信息,其中包括景点的名称,代号,信息简介,以及其它的一些信息。这样就将对景点的操作,变成对图中各顶点的操作 。2,算法设计: 关于本课题的算法,很大部分来源于这学期数据结构课程的学习,其中包括:图的创建,线性表的一

2、些操作。对于具体的问题实现,都有不同的算法,在下面的分析中,我将详细说明 2.2 设计表示:, 函数调用关系及函数说明:首先,main()函数调用Creat()函数,用来创建图,然后调用menu()函数来选择用户所要进行的操作。其中menu()函数就是一个菜单供使用者来选择他所要进行的相关操作,比如信息的查询,最短路径查询之类。 对于要求1:以图中顶点表示校园内各景点,存放景点名称、代号、简介等信息;图的创建设计流程图为: Creat()函数原型为:void Creat(AdjMGraph *G, DataType v, RowColWeight E, int n,int e)其中,G为所创建

3、的图结构体对象,v 为所有顶点的集合,它是DataType型,这个类型前面已经介绍过;E 存放着各顶点之间的连接关系,它是RowColWeight型,前面也介绍过;n表示顶点的个数;e表示边数。Creat()函数的功能就是实现图的创建,将已知的景点的一些信息,转换成图的信息,并进行存储。对于要求2:为来访客人提供图中任意景点相关信息的查询。流程图为: menu()函数的原型为: void menu() 他就是一个菜单,供用户选择他们所要进行的操作。 Information1()函数原型为: void Information1() 它的功能就是输入查询景点的信息,并调用Information()

4、 Information()函数原型为: void Information(AdjMGraph G, char scenery) G 依然是所创建的图的结构体对象,后面所有的G 都是表示这个意思;scenery 是在Information1() 中输入的景点的名称。此函数的功能就是根据输入的景点的名称来查询其相关的信息。对于要求3:为来访客人提供任意景点的问路查询,即查询任意两个景点之间的一条最短路径。 Path1()函数原型为: void Path1() 它的功能就是输入查询景点的名称,并调用Path() Path ()函数原型为: void Path(AdjMGraph G,char sc

5、eneryname, char sceneryname1)其中sceneryname, sceneryname1 就是在Path1()函数中所输入的景点的名称,这个函数的功能就是通过这两个景点的名称找到它们在线性表中的位置,然后调用Floyd()函数,查找出它们的最短路径,并输出所要的信息。 Floyd()函数原型为: void Floyd (int cost MaxVertices,int n,int weightMaxVertices,int pathMaxVertices)其中参数cost MaxVertices即是图中边的邻接存储矩阵,weightMaxVertices用来存放经此算法

6、后的各顶点间的最短路径的值,pathMaxVertices就是每两个顶点之间最短路径中到达目的顶点的前一个顶点的位置。Path()函数中的输出信息就是据此而来。 对于要求4:修改景点信息。 Modify()函数原型为: void Modify() 它不带任何参数,功能是通过手动输入景点名称,然后找到景点的存储空间,然后在修改相应的信息。对于选做要求:增加景点。其工作流程图为: AddVertic()函数原型为:void AddVertic() 他不带任何参数,该函数的功能是在这个函数里面输入景点的信息,然后调用ListInsert()函数,将所要增加的顶点信息插入到线性表中。 ListInse

7、rt()函数原型为:void ListInsert(SeqList *L, int i, DataType x) 参数L表示顶点存储的线性表,i表示要插入的位置,x表示要插入的景点的信息。同时我在插入顶点时也将他与其他顶点之间的距离设置为MaxWeight,这样做主要是为了方便在Floyd函数里面求最短路径删除景点。其工作流程图为 DeleteVertic()函数原型为:void DeleteVertic() 他不带任何参数,该函数的功能就是在函数体里面输入要删除的景点的名称,然后根据名称找到该景点在线性表中的存储位置,然后调用线性表中的ListDelete ()函数进行相应顶点的删除。 Li

8、stDelete ()函数原型为:ListDelete(SeqList *L, int i, DataType *x) 其中参数L为存放顶点信息的线性表,i表示要删除顶点在线性表中的存放位置,,x就是要删除的那一个景点。它的功能就是从线性表中删除指定的顶点。 对于选做要求:增、删道路,流程图为: AddRoad()和DeleteRoad()两函数原型为:void AddRoad()和void DeleteRoad()。这两个函数都不带参数,它们的功能就是在这两个函数里面输入要删除要增加或者的边连接的两个景点的名称,然后在线性表中找到这两个景点的相对存储空间,最后调用InsertEdge ()或

9、者DeleteEdge ()函数。 InsertEdge ()和DeleteEdge ()两函数原型为:void InsertEdge(AdjMGraph *G, int v1, int v2, int weight)void DeleteEdge(AdjMGraph *G, int v1, int v2) 这两个函数中同名参数所代表的意义是相同的,其中v1, v2是所输入景点在线性表中的相对位置;weight就是增加的边的权值函数接口说明 我所设计整个程序就是一些子函数的集合,每个功能都对应一个或者几个子函数,他们之间可以没有任何限制,只要能保证程序正确运行就可以调用,特别是AdjMGrap

10、h.h , AdjMGraph.h和SeqList.h头文件之中的函数,他们被很多函数调用过。这其中都没有任何特殊类型的函数 2.3 详细设计:根据题目分析,对于信息查询与修改功能,设计如下:1,输入景点名称2,从线性表头扫描到表尾,if(找到该景点) 输出景点结构体信息else 输出提示信息找不到该顶点实现查找最短路径,设计如下:1, 景点名称2,根据输入的信息找到它们所在的线性表中的位置3,调用Floyd算法找出最短路径4,输出信息实现增删景点功能,设计如下: 1,增加或者删除景点的名称2,if(输入景点),将景点信息保存在相应的结构体中,并插入到线性表尾; if(删除景点),找到景点在线

11、性表中所在的位置,然后将景点信息从线性表中删除实现增删道路功能,设计如下: 1,入增加或删除道路连接的两个景点的名称;2,找到它们的相对位置; 3,if(删除道路),将连接它们的边置为MaxWeight;if(增加道路),将输入的边值赋给相应的邻接矩阵表;3,调试分析: 主楼 西体育馆 隧道 北大门 东湖。但是,当我逆向输出时,得到的结果却有点问题,经过分析调试后,找到了错误的所在。在找最短路径的时候我用的是Floyd算法,在这个算法中有三重循环,形式均为:for(k=0;k经过分析调试后,其原因也是出在Floyd算法那,在Floyd算法中,有这么一个判断 if(weightijweighti

12、k+weightkj),由于我在输入新景点信息时并没有建立它与其它景点之间的连接信息,所以在图中,该新景点与其它景点之间的边得连接信息是空的,也就是说在邻接矩阵中,它的边得信息是空的,那么在进行 if(weightijweightik+weightkj)判断时 weight新增景点序号其它景点序号的值将是一个很大的负数,所以最短路径将会出错。解决这个问题的方法就是在增加新景点时就将它与其它景点之间的边(距离)设置为MaxWeight,这时如果再用Floyd函数进行最短路径的求解时就不会再出现问题了。另外,在做这个题时也还出现过一些其他的小问题,不过都比较容易解决,这里我就不再列出了,算法的时空

13、复杂度分析对应题目的要求,我总共提供了八个选项操作对于每一个操作的分析如下: 1,相关信息的查询。在这个操作中允许使用者输入一个景点名称,然后再根据景点名称来或取其相关的信息,这个操作要扫描线性表,其时间复杂度为o(n),空间复杂度为o(n);2,最短路径查询。实现这个功能用到了Floyd算法,他用到了一个三重的for()循环,故其时间复杂度为o(n3),空间复杂度为o(1);3,修改景点信息。要修改信息,必须首先找到景点所在的存储位置,那么就需要扫描线性表,其时间复杂度为o(n),空间复杂度为o(1);4,增加景点。增加景点信息时,直接将此景点结构体信息插入到线性表表尾,而不需要进行遍历,其

14、时间复杂度与空间复杂度均为o(1); 5,删除景点。删除景点时必须找到所要删除景点所在的位置,这样就必须遍历线性表,除此之外,删除后线性表还要进行移动操作,其时间复杂度为o(n),空间复杂度为o(n1); 6,增加道路。增加道路也要扫描线性表,找到要增加路的两景点的存储位置,然后再根据找到的存储位置去改变邻接矩阵的边的值,改变邻接矩阵的时间复杂度为o(1),其总时间消耗在线性表的扫描上,故最终其时间复杂度为o(n),空间复杂度为o(1);7,删除道路。删除道路和增加道路类似,都是先找到存储位置,然后再改变邻接矩阵,它的时空复杂度分别为o(n) ,o(1); 8,浏览所有景点。浏览所有景点的实质

15、就是从头到尾遍历线性表,然后输出遍历到的节点的信息,其时间复杂度为o(n),空间复杂度为o(1)。4,用户手册:使用说明:当用户将程序经过编译,连接后,点击运行,在DOS环境里面将看到一个选项菜单,菜单里面提供了8种操作,同时输出了一行提示信息:请选择您想进行的操作。然后用户可以输入一个18之间的数字进行选择性的操作,例如,您想进行信息的查询操作,您可以从键盘输入数字1;当然,一般而言先应该进行“浏览所有景点名称”操作。如果您选择了浏览所有景点名称操作,在屏幕上将会显示出10个景点的名称,这些景点是事先加进去的,用户可以对这些景点进行任何程序所提供的操作。下面,我将详细介绍本程序的使用方法:在

16、浏览景点后,菜单将会继续显示出来,为您提供操作选择。如果您想进行“相关信息的查询”操作,输入数字1,然后程序将会提醒您输入查询景点的名称,在您输入景点名称后回车即可。如果您想进行“最短路径查询”操作,首先输入数字2,然后程序将会提醒您输入查询的景点的名称,您输入按要求输入所提供的两个景点名称即可,要注意的是景点名称间以空格隔开,最后程序就会告诉您最短的路径,以及最短路的长度。如果您想修改景点的信息,同样先输入数字3,然后程序就会提醒您输入所要修改景点的名称,您可以根据要求输入一个景点的名称,然后回车,之后屏幕上就会显示您所输入的景点的所有信息,同时会有三个修改选项供用户选择,然后您可以输入13

17、之间的一个数字进行选择性的修改。比如,您可以输入1对景点名称进行修改,修改完后又会返回到菜单项继续选择。如果您想进行“增加景点”操作,可以输入数字4,然后程序就会提示您输入新增加的景点的名称,代号,信息简介,各种输入之间以空格隔开。当输入完毕后回车,景点也就成功加入了,然后用户可以再次选择第八项操作浏览所有景点名称,检测新输入的景点是否已经成功添加。如果您想进行“删除景点”操作,可以输入数字5,回车后系统将会提示您输入要删除的景点的名称,您可以输入您想要删除的景点的名称,然后回车,这样删除景点的操作就已经完成,您同样可以选择第八项操作,检测是否成功删除了景点。如果您想进行“增加道路”操作,您可

18、以输入数字6,然后回车,系统将会提示您输入增加道路所连接的两个景点的名称,输入两景点名称后回车,然后系统又会提示输入增加道路的长度,输入后回车,这时增加道路操作也就完了。用户如果想要检查道路是否增加成功可以进行“最短路径查询”操作。如果您想进行“删除道路”操作,您可以输入数字7,然后系统就会提示您输入删除道路所连接的两景点的名称,输入名称后回车即可,当然,如果您想检测删除是否成功您可以选择“最短路径查询”操作。备注:经过测试,本程序的所有操作都能正常执行,您可以选择性的对他进行操作,同时也可以混合着操作,混合操作是检测错误的最好的一个方法。5,测试数据及测试结果: 菜单显示为: *菜单* 1,

19、相关信息查询 2,最短路径查询 3,修改景点信息 4,增加景点 5,删除景点 6,增加道路 7,删除道路 8,浏览所有景点名称 *请选择您想进行的操作: 8东区 博物馆 主楼 图书馆 西体育馆 隧道 北综 北体育馆北大门 东湖 1请输入您所想要查询的景点的名称: 博物馆您输入的景点的名称是:您输入的景点的代码为: 11您输入的景点的相关信息有: 有各种化石 2请输入你要查询的两景点的名称: 东区 东湖最短路径为: 108从 东区 点到 东湖 景点的最短路径为:东区主楼西体育馆隧道北大门东湖 3您想修改的景点的名称为: 隧道 15 自主修建您想修改什么信息? 1,名称;2,代号;3,信息简介:请

20、输入要修改的的景点的新名称: 地大隧道东区 博物馆 主楼 图书馆 西体育馆 地大隧道 北综 北体育馆 北大门 东湖 4请输入增加节点的 名称,代号,信息简介:北一楼 34 教师办公室 北一楼 34 教师办公室 请选择您想进行的操作: 5请输入您要删除景点的名称: 6输入您要增加的道路链接的两个景点名称: 东区 北综输入您要增加的道路的长度: 50从 东区 点到 北综 景点的最短路径为:北综 7输入您要删除的道路链接的两个景点名称: 103地大隧道6,源程序清单:school.cpp /程序源文件AdjMGraph.h /图的相关操作头文件AdjMGraphCreat.h /创建图的头文件Seq

21、List.h /线性表操作头文件Floyd.h /Floyd算法头文件Operation.h /自己所定义的一些操作的头文件Inquiry.h /查询信息包含的头文件/ 详细school.cpp 程序源文件#include string.hmalloc.h#define MaxSize 20 /线性表的最大数组空间#define MaxVertices 20 /景点个数所允许的最大值#define MaxWeight 1000 /无穷边权值#include Floyd.hAdjMGraphCreat.hInquiry.hAdjMGraph G;Operation.hvoid main() /初

22、始景点信息 DataType a=东区,10,研究生院,博物馆,11,有各种化石主楼,12,学校的标志建筑 ,图书馆,13,藏书50万册西体育馆,14,主要供西区学生使用隧道,15,自主修建北综,16,北区标志楼北体育馆,17,主要供北区学生使用北大门,18,外出通道东湖,19,武汉最美的湖; /邻接矩阵的表示 RowColWeightrcw=0,1,20,0,2,30,0,3,35,1,0,20,1,3,20,2,0,30,2,3,15,2,4,30,3,0,35,3,1,20,3,2,15,3,4,30,4,2,30,4,3,30,4,5,10,5,4,10,5,6,35,5,8,8,6,

23、5,35,6,7,20,6,8,25,6,9,5,7,6,20,7,8,10,8,5,8,8,6,25,8,7,10,9,6,5; int n=10,e=28; /景点数与边数 Creat(&G,a,rcw,n,e); /构造图 menu(); / 详细Floyd.h头文件void Floyd(int costMaxVertices,int n,int weightMaxVertices,int pathMaxVertices) /初始化 int i,j,k; for(i=0;ii+) for(j=0;jweightik+weightkj) weightij=weightik+weightkj

24、; pathij=k; /详细Inquiry.h 头文件void Information(AdjMGraph G, char scenery) int i;G.vertices.size; if(strcmp(G.vertices.listi.name,scenery)=0) printf( %sn,G.vertices.listi.name); %dn,G.vertices.listi.code); %snn,G.vertices.listi.introduction); break; if(i=G.vertices.size) printf(您所查询的景点不在我们所提供的范围内!nn);void Path(AdjMGraph G,char sceneryname, char sceneryname1) int i,j

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

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