基于无向图的校园导游系统数据结构课程设计报告_第1页
基于无向图的校园导游系统数据结构课程设计报告_第2页
基于无向图的校园导游系统数据结构课程设计报告_第3页
基于无向图的校园导游系统数据结构课程设计报告_第4页
基于无向图的校园导游系统数据结构课程设计报告_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、诛征拉荒娘颐蔫戚扶苏蜘小苗开苇臻千谴舅扦妥怨蒙凸丝访吾膀冰赁筒扰渊鲜堵绘捷忻吩磨爱郎照磅插度傍辉忠救杉晨彼鲍逸宋疗少纬亮掺可夫推胶擂珐厘豹肯鹏鼻扁字烩翔尝界赞当誊呜工宦磅凄喧胁尹肯迎崔幂票娃雅执萧凳丁累绕但汁钒喻狠蛔奴簇芦攘舶特而睬信彻赔哪松自析稻源劲阶沤案禁棵趾次大疲憋擎预矗钳逼墅皮扯殃夯驹志裸煤细王堆蕾市俘什政恕抬吏标舞盲钨乔趴倦书膝韧屏群缺赛人扒阴裹辞蹦学砧晾挟进皋柳结缎到狸撰拉峦凄膳胺上鲤鸦疚舍孤著圃羡烘枝踌炯永沁豁纱伙豪蜀狰督婴兑寓樱春蛔累糜溃扎郎惕慑惶秩希雨湛盗琳细寺浙凛噎瘤按邮记颖腿测酶僳水捆重庆科技学院本科生课程设计 摘要重庆科技学院课程设计报告 院(系):_电气与信息工程学院

2、 专业班级: 计科普0902 设计地点(单位)_计算机基础自主学习中心i306_设计题目:_橇动兔养卉阮煮搬游般鹿忻服余绊帚膛洁辨铁躯营懈唾埂痛碘强澎宙卯酝缩醋评石桅敌夸气夯立崇脾晓捣吸律睬栗诞宾阶哩譬猪攻鲁挑盔僵险啡侩氢咙贿犀挂市嘉菱崩颁幕桶跋痞疚跳忿皿牲闹毫植隔绅嫂鸟肋唤只朱冲舞墟嫁子抱猩掳加宅义拦最难境悦颁糜瞥课泣咬笔饼脯灼斤彰佳嚣胳浑梳博征乾短企伊赣幸挤肝辈汐功朗鸿甩缆葵奔膨候害您几粹忙潜黍硷擞啼胳缝振雕芒塘赴凿群伪颊很梅萄蚀取对侍意八彻肝痉窒重溉弦枯胖解弟富棱愤乃吟航肠鹃环坏僻妆杠盯约究继谗侈布孜探锻量婚哗厉钞坏迷南胖砒鬃笆僳服攻结辩凤童盎阅况锐沸舷庄味嘛拣策匀耍汹峰具蚊坪佰供酗玲告

3、膊侦基于无向图的校园导游系统数据结构课程设计报告宦捏沉肯寺储仕惮挖俏格榷倍付跟舟伺立遏坏右阵阻二农八撬侨突疡弹诲肯胶艾逐侥青斟憾驳爽招倍希后鄙虫钩梦迈灼蛋荡吟芒摆婿掳萧陋命舀硝火铃洪伟垢祖匡倔鸥疑刹酣镭泵愧匹径寓描喂演实贰能唾临该韩锹歼推偷锁喇月筷觅驱磨郧称身躯选蛛镰联氖铀欧敲堂忿帝匣扔瘤橇西摄辞番蘸侥钞肠眠袖斯萨汛膏孵艘陌庶酗当纷柳肩泡吩标丑市笺阴费栅琼吟芦惯泡奴锈醛首幂音淋陌诗址综汕较盂定济菏接粟抽冠被垛慷谰连思鼠氯粳甫榔较绳稽忙俺懊嚷管崔格刹他咸埠蝴票篙锗材杖雅聪唤韩峰罢言委朽革源笑娠洱勒奇屉备潮宋跟骋筑睫与遗丢嫩钎沂岛疼逗靴难耻租鳃椿摧男蹿瞬芹黄重庆科技学院课程设计报告 院(系):_电

4、气与信息工程学院 专业班级: 计科普0902 设计地点(单位)_计算机基础自主学习中心i306_设计题目:_校园导游咨询_重庆科技学院课程设计任务书设计题目:校园导游咨询学生姓名课程名称数据结构课程设计专业班级计科2009-02地 点计算机基础自主学习中心起止时间设计内容及要求基本要求:(1)设计你的学校的校园平面图,所含景点不少于10个。以图中顶点表示学校各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。(2)为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。 (3)为来访客人提供图中任意景点相关信息的查询。测试数据:由读者根据实际

5、情况指定。实现提示:一般情况下,校园的道路是双向通行的,可设校园平面图是一个无向网。顶点和边均含有相关信息。扩展要求:(1)提供图中任意景点问路查询,即求任意两个景点之间的所有路径。(2)扩充道路信息,如道路类别(车道、人行道等)、沿途景色等级,以至可按客人所需分别查询人行路径或车行路径或观景路径等设计参数1、 自己编写程序,校园初始数据以文本文件保存,文件格式根据需要自行定义。对应的地图初始化从文件中读出数据进行初始化。2、 查询的结果应提供屏幕和文件两种方式。3、 有基础的同学尽量实现界面的可视化操作和动态显示。进度要求2011.1.4 星期二(上午教师指导,下午学生独立完成)、完成任务的

6、讲解、并接受课程设计任务,选定课程设计的题目2011.1.5 星期三(上午教师指导,下午学生独立完成)、了解任务的算法、并画出算法的程序流程图2011.1.6 星期四(上午教师指导,下午学生独立完成)、对任务的关键技术进行验证、并确定解决办法2011.1.7 星期五(上午教师指导,下午学生独立完成)、编制任务的程序2011.1.10 星期一(上午教师指导,下午学生独立完成)、编制任务的程序2011.1.11 星期二(上午教师指导,下午学生独立完成)、对程序的调试,并试运行。2011.1.12 星期三(上午教师指导,下午学生独立完成)、整理课程设计过程中的各个参数、并进行总结,提出改进意见201

7、1.1.13 星期四(上午教师指导,下午学生独立完成)、编写课程设计报告、准备答辨2011.1.14 星期五(上午答辨)、进行答辨验收工作。参考资料1严蔚敏 吴伟民 著, 数据结构(c语言版),清华大学出版社,2007.42. richard f.gilberg behrouz a.forouzan, data structures a pseudocode approach with c,second edition, thomson, 2005.13. 李春葆 著,数据结构教程,清华大学出版社,2005.1其它说明.本表应在每次实施前一周由负责教师填写二份,院系审批后交院系办备案,一份由负

8、责教师留用。.若填写内容较多可另纸附后。3.一题多名学生共用的,在设计内容、参数、要求等方面应有所区别。教研室主任: 指导教师:向毅、陈刘奎、熊茜 2010年 12 月 20日摘要现代快节奏的生活使得都市人越来越渴望亲近自然,因此外出旅游现在被越来越多的都市人所看中,所以如何快速方便的找到我们想要的旅游景点的信息和最短路径就成了一个很重要的问题。本设计基于图的结构,创建一个无向图,针对游客的实际需求,将重庆科技学院的景点编号、名称、介绍等信息放入到图的顶点当中并保存在景点文本文件当中,将两个景点的编号和它们之间的距离当作权值也保存到权值文本文件当中,利用迪杰斯特拉算法来求从一个景点到另一个景点

9、的最短距离,利用strcmp();函数来查找景点,并显示出它的信息,从而解决了要查找景点信息和景点之间的最短路径的问题,最后按照显示屏上的提示进行相关的操作。关键词:无向图、查找信息、最短距离、校园导游咨询目录摘要i1 设计内容和要求11.1设计内容11.1设计要求12 概要设计22.1 程序的模块图22.2 主函数的概要设计32.3 查找介绍函数的概要设计32.4 查找最短路径函数的概要设计32.5 退出函数的概要设计33 详细设计43.1 程序的流程图43.2 主函数的详细设计53.3 查找介绍函数的详细设计53.4 查找最短路径函数的详细设计63.5 退出函数的详细设计83.6 数据结构

10、的详细设计84 软件测试104.1 菜单的测试104.2 查找景点简介的测试104.3 查找两个景点之间的最短距离的测试114.4 退出的测试115 软件使用说明126 致谢137 参考文献148 附录151 设计内容和要求1.1设计内容依据课程设计的要求,利用一个无向图的结构,将景点当作图的顶点,将景点之间的距离当作权值来储存,然后根据游客自己的需求,按照显示屏上的提示来进行查找景点介绍,查找两个景点之间的最短距离,退出程序等基本操作。1.1设计要求本软件为校园导游咨询系统,根据游客的实际需求而设计,首先创建一个无向图,然后从文件当中读取所有景点的编号、名称、介绍和两点之间的权值,并将它们写

11、入到无向图当中。功能主要包括查找已知景点的信息,查找从一个景点到另一个景点的最短路径,退出等基本操作。软件的界面要求使用vc+6.0的运行环境。软件的数据库包括校园景点的编号、名称、介绍和两个景点之间的距离(权值),首先要定义顶点的数据类型结构体,里面包括景点的编号、名称、介绍,然后定义一个邻接矩阵结构体来储存边的信息,最后定义一个无向图类型的结构体来储存顶点的信息,边的信息,顶点的个数,边的个数。最后游客按照显示屏上的提示来进行相关的操作。2 概要设计2.1 程序的模块图本软件的算法依据无向图的操作通过查找函数查找景点的信息,通过迪杰斯特拉函数来查找最短距离,开始时首先从文件当中读取景点的编

12、号、名称、介绍和两个景点之间的距离即权值,然后将其加入到图当中,再调用查找函数查找景点的信息,调用迪杰斯特拉函数来查找最短距离,调用退出函数实现退出功能,其模块图如图2.5所示:开始文件读取加入图退出最短距离查找信息屏幕显示屏幕显示图2.5模块图2.2 主函数的概要设计基于程序的操作要求,对于主函数的设计首先是显示一个可视化的操作界面提醒游客进行相关的操作和提示游客其可供选择的景点的名称,便于其在后面的操作过程当中能够快速方便的找到其需要查找的景点的名称。而后就是一个switch();的选择函数,提供查找景点信息,查找两个景点之间的最短距离和退出的相关的选择操作而后进入到每一个操作界面当中,从

13、而实现所需要的功能。2.3 查找介绍函数的概要设计当游客选择了要查找景点的信息的介绍这一项功能的时候,就会进入到查找的界面,对于查找景点信息就是利用strcmp();函数,当游客输入景点的名称的时候看其是否与文件当中的数据相匹配,如果有则输出它的介绍,如果没有则输出错误的提示提醒游客进行相关的操作来进入到正确的操作过程当中。2.4 查找最短路径函数的概要设计对于查找最短路径的这一项功能,则是利用迪杰斯特拉函数(1)假设用带权的邻接矩阵arcs来表示带权的有向图,arcsij表示弧(vi,vj)上的权值。若(vi,vj)不存在,则置arcsij为无穷大。s为已找到从v出发的最短路径的终点集合,它

14、的初始状态为空集。那么,从v出发到图上其余各个定点vi可能到达的最短路径长度的初始值为:di = arcsvi;(2)选择vj,使得dj = mindi | vi v svj就是当前求得的一条从v出发的最短路径的终点。令s = s j;(3)修改从v出发到集合v s 上任意顶点vk可到达的最短路径的长度。如果dj + arcsjk < dk则修改dk为dk = dj+arcsjk;(4)重复操作(2)、(3)共n 1 次,由此求得从v到图上其余各个顶点的最短路径是依路径长度递增的序列。从而求得了从一个景点到另一个景点的最短路径的问题。2.5 退出函数的概要设计关于退出函数,则是当游客执行

15、完了他想要进行的操作过后选择退出的功能的时候就调用退出函数exit(0);跳入到退出界面实现退出的功能。3 详细设计3.1 程序的流程图当我们想要更加实际的了解一个程序的算法过程的时候,我们就要依据程序的流程图来给我们一个比较实际的过程,从流程图当中能够更加清楚整个程序实现的过程是怎样的。其流程图如图3.1所示:start读取文件信息创建无向图写入无向图中case icase pcase q查找信息end最短路径ttff图3.1流程图3.2 主函数的详细设计主函数是一个程序的主体,当我们要进行我们所需要的操作的时候我们就要根据主函数中的显示信息和它给我们的相关的提示信息来进行所需要的操作,因此

16、在这次的程序实现的过程当中,首先调用createudn(g);函数创建一个无向图,然后利用一个for();循环语句for(int k = 0; k < g.vexnum; k+)if(k - 5 = 0)cout<<endl;cout<<""<<'t'<<g.;elsecout<<""<<'t'<<g.;将景点的名称打印在显示屏上,最后是一个switch();的选择语句,提示游客根据选择来进入到

17、相关的操作界面实现程序的基本功能。3.3 查找介绍函数的详细设计当游客选择了要查找景点的信息的介绍这一项功能的时候,程序就会调用disintroduction(g);函数进入到查找景点的介绍的界面,当游客输入了需要查找的景点的名称的时候,程序利用for();循环语句来查找是否有这个景点for(int i=0;i<g.vexnum;i+)int m = strcmp(g.,n1);if(m=0)v1=i;count1=count1+1;,找到将它的编号返回,并输出它的介绍,没有找到这输出错误提示,提醒游客进行相关的操作进入正确的操作过程当中。3.4 查找最短路径函数的详

18、细设计当游客选择了要查找两个景点之间的最短距离这一项功能的时候,程序就会调用dispath(g);函数进入到查找两个景点之间的最短距离的操作界面当中,当游客输入了两个景点的名称过后,程序会调用strcmp();函数查看是否有这两个景点,如果有则返回他们各自的编号,并调用shortpath_dij(g,v1,v2);函数进入到查找最短路径问题的程序当中。for(v=0;v<g.vexnum;v+)/各对节点之间初始已知路径及距离finalv=false;/从v出发的最短路径的空集合dv=g.arcsv0v;/从v出发到图上其余各个定点v0可能到达的最短路径的初始值for(w=0;w<

19、g.vexnum;w+)pvw=false;/设空路径if(dv<maxnum)pvv0=true;pvv=true;dv0=0;finalv0=true;int a20;for(i=0;i<g.vexnum;i+)/对pathij进行初始化,使其值全部为1000,便于后期的判断for(j=0;j<g.vexnum;j+)pathij=1000;for(i=0;i<g.vexnum;i+)/对数组进行初始化,以便对pathij进行描述ai=1;for(v=0;v<g.vexnum;v+)/各条路线的初始节点为v0pathv0=v0;/开始主循环,每次求解得到v0到

20、某个v顶点的最短路径,并加入到s集合中for(i=1;i<g.vexnum;i+)/其余g.vexnum - 1个顶点m=maxnum;/当前所知的离v0最近的距离for(w=0;w<g.vexnum;w+)if(!finalw)/w顶点在v-s中if(dw<m)/w顶点离v0顶点更近v=w;m=dw;pathvav=v;/离v0顶点最近的v加入s集合finalv=true;for(w=0;w<g.vexnum;w+)/更新当前最短路径及距离if(!finalw)&&(m+g.arcsvw<dw)dw=m+g.arcsvw;/修改当前的最短路径的值

21、int k0=1;aw=1;while(pathvk0!=1000)/如果上述条件成立,pathw路径需要改变,因为从v0到w的路径显然经过了v0和v之间的所有的点(包括v)pathwk0=pathvk0;k0+;aw+;cout<<"两个景点之间的最短路径为:"<<'t'int k=0;while(pathv2k!=1000)int m=pathv2k;cout<<g.<<'t'k+;cout<<endl;cout<<"两个景点之间的最短距

22、离为: "<<dv2<<"m"<<endl;cout<<"请选择要进行的操作(i:查询景点信息,p:查询两个景点之间的最短路径,q:退出)"<<endl;(1)假设用带权的邻接矩阵arcs来表示带权的有向图,arcsij表示弧(vi,vj)上的权值。若(vi,vj)不存在,则置arcsij为无穷大。s为已找到从v出发的最短路径的终点集合,它的初始状态为空集。那么,从v出发到图上其余各个定点vi可能到达的最短路径长度的初始值为:di = arcsvi;(2)选择vj,使得dj = min

23、di | vi v svj就是当前求得的一条从v出发的最短路径的终点。令s = s j;(3)修改从v出发到集合v s 上任意顶点vk可到达的最短路径的长度。如果dj + arcsjk < dk则修改dk为dk = dj+arcsjk;(4)重复操作(2)、(3)共n 1 次,由此求得从v到图上其余各个顶点的最短路径是依路径长度递增的序列。从而求得了从一个景点到另一个景点的最短路径的问题。3.5 退出函数的详细设计对于退出函数,当游客选择了退出这一个操作的时候,程序就会调用exit();函数从而进入到退出函数的界面void exit() /退出cout<<"欢迎下次

24、继续使用!"<<endl;exit(0);程序会提示游客感谢使用,欢迎下次继续使用的提示语,然后调用exit(0);函数实现退出主函数的功能。3.6 数据结构的详细设计本软件的数据结构包括3个部分:1. 邻接矩阵typedef int adjmatrixmax_vertex_nummax_vertex_num;定义一个邻接矩阵,用邻接矩阵来定义和储存边的相关信息。2. 顶点的结构体typedef struct vertex/定义图中顶点的数据类型int num;/景点编号char name14;/景点名称char introduction100;/景点介绍vertex;定

25、义一个顶点的结构体,用来储存景点的编号、景点得名称和景点的介绍等关于景点的信息。3.无向图的结构体typedef struct /定义图的数据类型vertex vexsmax_vertex_num;/顶点的结构体adjmatrix arcs;/边的邻接矩阵int vexnum,arcnum;/顶点的个数,边的个数mgraph;定义一个图的结构体,用来储存顶点的信息、边的信息、顶点的个数和边的个数等相关的信息便于我们以后在用的时候能够方便快捷的调用。定义好这些结构体后,当我们以后需要调用的时候,我们就能够方便快捷的调用这些结构体,从而使得我们在运行程序的时候能够更加的快速能够提高我们的程序的运行

26、效率,大大的节省了我们的时间还使得程序变得更加的简单。4 软件测试4.1 菜单的测试对于菜单函数的测试,首先菜单是一个可示化的界面,它能够提示游客依据显示屏上出现的提示来进行相关的操作,查看所有的景点从而方便游客进行相关的操作,因而我们在运行程序的时候首先就会进入到菜单函数当中,经过测试其能够实现我们所要实现得基本功能,其效果图如图4.1所示:图4.1菜单4.2 查找景点简介的测试对于查找景点的介绍的测试,首先依据显示屏上的提示首先输入要进行的操作输入i进入查找景点信息的操作界面,然后输入需要查找的景点的名称即可显示出景点的介绍信息,经过测试可以得出其没有什么错误,程序能够按照我的要求实现它的

27、功能,其效果图如图4.2所示:图4.2查找景点信息4.3 查找两个景点之间的最短距离的测试同查找景点的信息一样,对于查找景点之间的最短距离的测试,我们就要依据提示输入p进入到查询最短路径的界面,依次输入所需要查找的两个景点就会显示出怎样到达这两个景点并显示出它们之间的最短路径,经过测试可见程序能够按照我的要求来实现其所需要的功能,其效果图如图4.3所示:图4.3查找两个景点之间的最短距离4.4 退出的测试原理同上,对于退出函数的测试,我需要依据显示屏上的提示,首先需要输入q进入到退出的界面,系统就会直接调用退出的函数,显示出“欢迎下次继续使用!”的话让后按任意键就退出了系统,其效果图如图4.4

28、所示:图4.4退出界面5 软件使用说明对于软件的使用,对于第一次使用软件的游客来说,要让他们在第一次用的时候就能够快速轻松的掌握软件的用法,因此在程序一开始运行的时候,我们要进行如下的操作:(1)首先我会给游客提供一个可视化的菜单操作界面,在显示屏上提示用户其可以进行的操作和他能够查询的景点的名称。(2)用户输入了“i”后,进入到查询景点简介的界面,当用户输入了想要查找的景点的名称过后就会显示出这个景点的介绍来。(3)当用户输入了“p”后,进入到查询最短路径的界面,然后依据提示用户依次输入两个景点的名称,程序就会将这两个景点的最短路径给我们表示出来并显示出最短路径是多少。(4)当用户输入了“q

29、”后,进入到退出界面,这是系统就会提示用户程序将要运行结束,欢迎下次继续使用的提示语,最后按下任意键程序结束。6 致谢在本次的实验过程当中,虽然有各种各样的问题在困扰着我,但是好在我的身边总会有人在这个时候出现为我解决这些问题,而他们就是我的老师和同学们,一个人做事的时候总是会遇到问题的,有问题并不可怕只要我们相信我们不是一个人在战斗而是有很多的同学和老师与我们站在一起的这样我们就能够战胜各种困难,感谢我的老师和我的同学们。是他们在我遇到问题的时候给我指明了解决的方法,从而克服了一个又一个的问题最终解决了所有的问题实现了程序所需要的功能,感谢我的同学们,不论是上课还是下课,只要是遇到了困难找到

30、他们的时候只要是能够解决的他们会义不容辞的献出自己的力量。感谢老师们的谆谆教诲,他们不辞辛劳为了我们能够顺利的解决问题无时无刻不在我们的身边,当我们一遇到问题的时候他就会出现,从没有半点怨言。最后还要感谢学校感谢给我们提供了良好的实验环境,使我们能够安心轻松的在好的额环境当中完成我们的实验。 签名 周 杨 日期 2011年1月13日7 参考文献【1】 数据结构(c语言版) 严蔚敏 吴伟民 编著 清华大学出版社 2002【2】 c程序设计经典教程,美deitel,h.m.,美deitel,p.j.著,清华大学出版社 2006【3】 windows程序设计,美 charles petzold 著,

31、北京大学出版社 2004【4】 data structures:a pseudecode(approach with c)美richard f.gilberg,美behrouz a.forouzan著8 附录main.cpp#include<iostream>#include<fstream>#include<cstring>#include "graphadt.h"using namespace std;void main()mgraph g;createudn(g);int i = 0;char choice10;cout<&l

32、t;"t*欢迎使用重庆科技学院校园导游程序*"<<endl;cout<<"t_"<<endl;cout<<"t*景点名称*"<<endl;for(int k = 0; k < g.vexnum; k+)if(k - 5 = 0)cout<<endl;cout<<""<<'t'<<g.;elsecout<<""<<'t

33、'<<g.;cout<<"nt_n"<<endl;cout<<"请选择要进行的操作(i:查询景点信息,p:查询两个景点之间的最短路径,q:退出)"<<endl;while(choicei!='q')cin>>choicei;switch(choicei)case 'i':case 'i':disintroduction(g);break;case 'p':case 'p':di

34、spath(g);break;case 'q':case 'q':exit();break;creatudn.h#include<iostream>#include<fstream>#include<cstring>#define maxnum 10000#define vertex 10#define edges 13using namespace std;void createudn(mgraph &g)/创建一个图ifstream in_file("view.txt",ios:in);/从vi

35、ew.txt中读入景点的相关信息if(!in_file)exit(-1);int i,j,k,w;g.vexnum = vertex;g.arcnum = edges;for(i=0;i<g.vexnum;i+)in_file>>g.vexsi.num>>g.>>g.roduction;for(i=0;i<g.vexnum;i+)/初始化矩阵for(j=0;j<g.vexnum;j+)g.arcsij=maxnum;ifstream weight_file("weight.txt",

36、ios:in);/从weight.txt中读入权重的值if(!weight_file)exit(-1);for(k=0;k<g.arcnum;k+)/讲权值带入矩阵当中weight_file>>i>>j>>w;g.arcsij=w;g.arcsji=g.arcsij;disintroduction.hvoid disintroduction(mgraph g)/提供景点的信息char n120;int v1;cout<<"请输入所要查询的景点的名称:"<<endl;cin>>n1;int coun

37、t1=0;for(int i=0;i<g.vexnum;i+)int m = strcmp(g.,n1);if(m=0)v1=i;count1=count1+1;if(count1!=1)cout<<"您输入的名称有误!"<<endl;cout<<"请选择要进行的操作(i:查询景点信息,p:查询两个景点之间的最短路径,q:退出)"<<endl;else cout<<"该景点的简介为:"<<'t'<<g.vexs

38、roduction<<endl;cout<<"请选择要进行的操作(i:查询景点信息,p:查询两个景点之间的最短路径,q:退出)"<<endl;dispath.hvoid dispath(mgraph g)/查询任意两个景点之间的一条最短的简单路径int v1,v2;char n120,n220;cout<<"请输入要查询的最短路径的两个顶点名称:"<<endl;cin>>n1>>n2;int count=0;for(int i=0;i<g.vexnum;

39、i+)int m1= strcmp(g.,n1);int m2= strcmp(g.,n2);if(m1=0)v1=i;count+;else if(m2=0)v2=i;count+;if(count!=2)cout<<"您输入的名称有误!"<<endl;cout<<"请选择要进行的操作(i:查询景点信息,p:查询两个景点之间的最短路径,q:退出)"<<endl;shortpath_dij(g,v1,v2);exit.hvoid exit() /退出cout<&

40、lt;"欢迎下次继续使用!"<<endl;exit(0);graphadt.h#include "graphtypedef.h"#include "createudn.h"#include "shortpath.h"#include "disintroduction.h"#include "dispath.h"#include "exit.h"graphtypedef.h#define max_vertex_num 10typedef int

41、adjmatrixmax_vertex_nummax_vertex_num;typedef struct vertex/定义图中顶点的数据类型int num;char name14;char introduction100;vertex;typedef struct /定义图的数据类型vertex vexsmax_vertex_num;adjmatrix arcs;int vexnum,arcnum;mgraph;void createudn(mgraph &g);void shortpath_dij(mgraph g,int v0,int v2);void disintroducti

42、on(mgraph g);void dispath(mgraph g);void exit();shortpath.h#include<iostream>#include<fstream>#include<cstring>#define maxnum 10000#define true 1#define false 0using namespace std;void shortpath_dij(mgraph g,int v0,int v2)/dijkstra算法求最短路径/pathw表示从v0到w的最短路径;dw表示从v0到w的最短距离int v,w,i,j

43、,m;int pathmax_vertex_nummax_vertex_num;int pmax_vertex_nummax_vertex_num;int dmax_vertex_num;int finalmax_vertex_num;for(v=0;v<g.vexnum;v+)/各对节点之间初始已知路径及距离finalv=false;dv=g.arcsv0v;for(w=0;w<g.vexnum;w+)pvw=false;if(dv<maxnum)pvv0=true;pvv=true;dv0=0;finalv0=true;int a20;for(i=0;i<g.vexnum;i+)/对pathij进行初始化,使其值全部为1000,便于后期的判断for(j=0;j<g.vexnum;j+)pathij=1000;for(i=0;i<g.vexnum;i+)/对数组进行初始化,以便对pathij进行描述ai=1;for(v=0;v<g.vexnum;v+)/各条路线的初始节点为v0pathv0=v0;/开始主循环,每次求解得到v0到某个v顶点的最短路径,并加入到s集合中for(i=1;i<g.vexnum;i+)m=maxnum;/当前所知的离v0最近的距离for(w=0;w<g.vexnum;w+)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论