




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实用标准文案精彩文档洛阳理工学院课程设计说明书课程名称_数据结构课程设计_设计课题_校园导游程序_实用标准文案精彩文档专 业 _计算机科学与技术_实用标准文案精彩文档班 级_学 号_姓 名_完成日期 _实用标准文案精彩文档课程设计任务书设计题目:校园导游程序设计内容与要求:问题描述用无向网表示你所在学校的校园景点平面图,图中顶点表示主要景 点,存放景点的编号、名称、简介等信息,图中的边表示景点间的道路, 存放路径长度等信息。要求能够回答有关景点介绍、游览路径等问题。基本要求(1) 查询各景点的相关信息;(2) 查询图中任意两个景点间的最短路径。(3) 查询图中任意两个景点间的所有路径。(4)
2、增加、删除、更新有关景点和道路的信息。指导教师:_20162016 年 1212 月 2020 日课程设计评语实用标准文案精彩文档成绩:指导教师:_年 月 日实用标准文案精彩文档目录一、问题描述.1二、 基本要求.1三、 测试数据.2四、算法思想.3五、 模块划分.45.1应用函数.4521主函数.6522查询景点信息函数.7523查询两景点之间最短路径函数 .95.2.4查询两景点之间所有路径函数 .95.2.6删除已有的顶点和路径.1.05.2.7修改已有的顶点和路径 .1.2六、 数据结构.1.4.七、 测试.1.6.八、 心得.2.8.实用标准文案精彩文档九、 源程序.3.Q.一、问题
3、描述用无向网表示你所在学校的校园景点平面图, 图中顶点表示主要景点,存放景点的编号、名称、简介等信息,图中的边表示景点间的道路,存放路径长度等信息。要求能够回答有关景点介绍、游览路径等问题。二、基本要求(1) 查询各景点的相关信息;(2) 查询图中任意两个景点间的最短路径。(3) 查询图中任意两个景点间的所有路径。(4) 增加、删除、更新有关景点和道路的信息。实用标准文案精彩文档三、测试数据菜单函数:依次输入:1, 2 , 3 , 4, 5 , 6, 0分别对应景点信息查询,最短路径查询,所有路径查询,添加景点及路径 信息,删除景点及路径信息,修改景点及路径信息,退出。查询景点信息:输入:1,
4、2分别对应按编号查询,按景点名称查询按编号查询:输入编号:1按景点名称查询:输入名称:大明桥最短路径查询:输入起始景点和终点景点编号:1,7所有路径查询:输入起始景点和终点景点编号:2,8添加景点及路径信息:输入新景点序号:9输入新景点名称:南门输入新景点相关信息:充满古韵的门,适合拍照 输入到其余各景点的距离:50, 100, 20删除景点及路径信息:输入:1, 2分别对应按编号查询,按景点名称查询按编号查询:输入需要删除的景点编号:8修改景点及路径信息:输入:1,2分别对应修改景点信息,修改道路信息修改景点信息:输入 1,2分别对应修改景点名称,修改景点描述修改景点信息:输入修改序号:1输
5、入修改后的名称:图书馆 123实用标准文案四、算法思想先利用 CreateUDN 创建初始无向网,通过 ma in 主函数调用显示,操作功 能的选择通过 Menu 函数输出,根据游客需求选择景点信息查询、景点之间最 短路径查询、景点之间所有路径查询、添加景点信息、删除景点信息或者修改信 息。如果是景点信息查询,在 search 中完成,再调用 SearchMenu 选择是按照景点编号或者景点名称查询,游客输入相应内容。如果是景点之间最短路径查 询或是景点之间所有路径查询则游客输入起始景点和结束景点;最短路径是用 ShortestPath 实现,其中运用了迪杰斯特拉算法;所有路径由Searchp
6、athl 调用 disppath 再调用 path,在 path 中通过递归算法实现寻找每一条路并输出。 如果是添加景点信息调用 Addnewsight 函数,游客按照提示依次输入信息内容。 如果是删除景点信息,选择按照名称删除或是按照序号删除,再调用 Deletesight 函数,游客输入相应内容进行删除。如果是修改信息,调用Cha ngesight ,Chan geme nu 两个函数,游客按提示选择修改景点信息或者道路信息,再按提 示输入修改后得内容。输出使用调用的相应函数。信息保存于文件中。实用标准文案实用标准文案精彩文档五、模块划分5.1应用函数void CreateUDN(i nt
7、 v,i nt a);void n arrate();void ShortestPath(i nt nu m);void output(i nt sight1,i nt sight2);in t Men u();void search();int SearchMe nu();void HaMiTo nian(in t);void Searchpath1(MGraph g);*/void disppath(MGraph g,i nt i,i nt j);void path(MGraph g,i nt i,i nt j,i nt k);/*void NextValue(i nt);/*造图函数*/
8、*说明函数*/*最短路径函数*/*输出函数*/*主菜单*/*查询景点信息*/*查询子菜单*/*图的遍历*/*查询两个景点间的所有路径确定路径上第 k+1 个顶点的序号*/void display。;实用标准文案精彩文档int Add newsight(i nt n); intDeletesight();void Chan gesight(); int Chan gemenu();int Sightme nu();/*显示遍历结果*/*添加新的景点和路径*/*删除景点和路径*/*修改景点和路径*/*修改路径或顶点的选择菜单*/*选择需该景点的菜单*/实用标准文案精彩文档521主函数1. 功能:初
9、始图通过 main 主函数调用显示,操作功能的选择通过 Menu 函数输 出,显示为菜单形式提醒用户进行操作, 用户选择后在 main 主函数中调用各个 函数实现各种功能。2. 流程图:实用标准文案精彩文档522查询景点信息函数1.功能:在 main 主函数中调用 search,打开存储了信息的文件,在显示界面显实用标准文案精彩文档示已有的景点名称和序号,游客按需求进行序号查询或者名称查询,输入需要查实用标准文案精彩文档询的序号或者名称后会显示该景点的名称及简介,而后按任意键返回上级菜单选 择继续查询或者返回主界面,在查询景点信息函数中实现。2.流程图:按编号查询按景点查询输出景点信息没有找到
10、!结束实用标准文案精彩文档523查询两景点之间最短路径函数1.功能:在 main 函数中调用 narrate 函数,打开存储了信息的文件,游客 输入起点编号或者终点编号,利用迪杰斯特拉算法由 ShortestPath 最短路径函数选择一条两点之间的最短路径展示给游客,关闭文件。5.2.4查询两景点之间所有路径函数1.功能:当游客输入完毕后,根据之前构建的无向图,执行过程为进层和退层两个阶段。首先开始递归进层,考虑使用基于深度优先思想,在搜素过程中, 按照景点编号大小依次访问每一个节点,若访问到一个未被访问且有路径相通的 点则将其加入数组 P,直到找到目的地,输出第一条路径,然后开始递归退层,
11、按照之前的方式递归访问它的所有未被访问的相邻节点。并通过相应的设置标志visited的方式使最终能不重复地走遍所有的简单路径。最后输出这些路径即 可。5.2.5添加新的顶点和路径1.功能:在 Addnewsight添加新的景点和路径函数 中实现,打开存储了实用标准文案精彩文档信息的文件,输入需要新添加的景点名称,基本信息介绍并依次输入它到原有各 景点的距离,将新信息存储到文件中并保存。526删除已有的顶点和路径1.功能:删除不需要的景点信息,并保存删除后的文件,方便下一次浏览2 流程图:开始按 景 点 八、 编 号按景点名称实用标准文案精彩文档527修改已有的顶点和路径1.功能:修改有误的景点
12、信息,并保存修改后的文件,方便下一次浏览。2 流程图:I1*1开始122L1.修改景点信息修改道路信息实用标准文案精彩文档k -1、JT IJr J- XJ-KI/0-12345678实用标准文案精彩文档3查询景点信息(按名称)4.查询两景点之间的最短路径您要查找景点信息如下:大明桥:落于小河上,风景优美请输入您要查拔的景点名称:大明桥:俅枠+村梅*衬 欢迎使闰 洛阳理工学 院开元松区校园导 游程序+林林杠林*杠*耳实用标准文案精彩文档实用标准文案精彩文档丁法明疥-渎崩沖 a 包 ,亍图书馆-凉验拿斤请按佇意铸朱接.5.查询两点之间的所有路径012345678大图教丈头实买翼if选争起点暑点(
13、0-8) : 1躍裟点熹点(0-8) . 7从图书馆到璞院餐厅的最短路径是(最短距离为380m )图书馆一实验A楼一璞院餐厅请按任意键继续.十林+:*:?(*林杠计* %便史巾活阳悝I字阮廿兀戏也5工tn导咖程厅1初档林护衬*利买T TH H璞坯TJTJ TJTJU-J. u. u-u.DIDI234567B2 8 II点点f:岀目二二、1 1 :-:- . .= = k k ;r;r-JJD-JJD实用标准文案精彩文档* :怦*欢迎使用洛阳理工学院开7E校区校园导沸禾呈序*忖枠* * * *景点名秫6添加新的景点及其路径添加过程请祁!I入新景点的序号冃自FT大图教士头012345 6 700
14、充满古韵的门适春实用标准文案精彩文档添加后巒入此豁到第作点跳离(现(硏酣或和到达胶U0嚴锁大值):实用标准文案精彩文档nw(2)教享技(4)买滋业(5)实萼( 9)南门12 3 4 5 6 0I短白心间间-Q占皿占宀占筑臺沪的W-祐景已已询询询加请输入您的选择】7删除景点删除过程实用标准文案精彩文档*林*耒*欢迎使用洛阳理工学院开兀校区枚园导游程序林枠*谙输人您要删除景点的编号:8删除成功!按任意键返回、删除后启大图教盂实 宀南lintlintX17X17 17J17J XJXJ17寿0123456789rr -fkzL-fkzL- /L/L /rk/rk实用标准文案精彩文档8修改景点信息娄新
15、学峯養皆教i头实欝0 12 3 4 5 f - 7 9i路#.-咸息占xlx章昱昼.?.占堂堅导景两两新己已询询词九s_nwww%*%,123 4 5 G o请输入您的选择!实用标准文案精彩文档疚 迎傅1用容P3玉里工学 坛FFTTj杖 区*孑园 导1序*未水河心*虽点名称丸 图教 土头头詈1/ XJ/7J/012345679$改改回修修晅hrs请输入您的迪择,1修改成切!靡篦彎景点细修改后32丈黑子其其-IJ- -ij-kn- .1-J-lr-lr-lJ.匚口匚血有路踊筋息Rlfi古古.一点吕:41 害.占ulwslanU 協曲抽己己询询询查查查2-,3.4.艮乩0.洁輛人:!萨I诜择丄实用
16、标准文案精彩文档交件(F) t(E r&stfO)琶趋M超助H落于15,风景优美 棊境彳驢每满书香气息,呈坏形巳餐評爲采修过的餐厅,临近实验機是男女比例最适中的餐厅甯二蟲睡男生宿舍,食物种类比较多 瞬三錚镰女生宿舍楼, 比较便宜9.文件内容自习的地方,临近图书馆实用标准文案精彩文档count-迅事本文除屯輛(口格式 Q】直看巴g八、心得通过对这次对校园导游系统程序编写,我切实体会到了如何编写一个较大实用标准文案精彩文档的程序。这是我自己相对独立做的最大的一个程序, 过程中遇到了各种各样的问 题。但同时巩固了课堂上所学的知识,也学到了很多新的东西,也收获了很多。拿到题目,第一步就是构思,
17、分析,创建。题目要求用无向网完成,所以 我考虑的是用邻接矩阵存储这个无向网,参考了书上的无向网的邻接矩阵存储程 序写了CreatUDN。查询两个景点之间的最短路径刚开始我参考的是书上的迪杰斯特拉算法, 后 来发现书上定义的顶点的结构体数组内容太简单, 程序考虑的情况也很简单,无 法满足我题目的需求,于是我又把迪杰斯特拉算法研读了一遍,自己做了改进。查找所有路径的 Searchpathl 函数刚开始一直没有写出来,我和同学先在纸上画出顶点,参考深度优先遍历把整个路径走了一遍,但是编程没有什么思路, 上网查找了关于这个算法的资料, 看到有人说可以考虑用递归实现, 就试着用递 归实现,同时参照迪杰斯
18、特拉算法用一个数组收集访问过的顶点, 还设置了一个 标志量标记顶点是否被访问。实用标准文案精彩文档文件在上学期的课设中我写过,当时学习了一些关于文件的知识,所以运用 并没有遇到太多问题,利用文件保存数据,需要fopen 打开文件进行读写,还要 fclose 函数进行关闭操作,可能还会用到 fread 读取文件。后来知道 a+可以 继续录入,于是我通过加入一个 a+形式的语句,实现了可不定时地增加景点数 据的功能所有框架写查找、删除、修改和添加函数本身并不太难,写好以后用main函数调用可以了。写出框架后,刚开始运行也是没什么问题的,但是多做几步就遇到了问题。在添加的时候,刚开始没有考虑序号,程
19、序自动生成的序号和我想。要的并不是 一种,于是我在添加景点里面让游客自己输入序号。后来又发现删除没有考虑找不到需要删除的目标的可能性,用一个判断符 a 来判断是否删除成功。接下来整 个运行都没有错但是如果删除两个景点就会出现问题了,试了很久发现是循环条件有问题,虽然固定了景点编号 number,但是循环的 num 和 number 不能对 应,于是去询问老师,老师说可以把整个邻接矩阵重新修改或者设置特殊符号控 制输出,我选择了相对简便的修改方法。这个程序很长,编写花了很多时间,在程序编写过程中,我不断遇到困难,调试时更是出现了很多问题,一个个的修改,有的花了很长的时间。但我的努力 和辛苦没有白
20、费,在老师的指导,同学的帮助,和自己的努力下我终于完成了这 个程序。很感谢老师最后的点睛之笔,在我和同学冥思苦想很长时间都没有解决 方案的时候是老师帮助我们解决了问题。 同时也反映出我思考问题的不全面和经 验的欠缺。在程序编写和解决问题时,每一个细节都很重要,既要避免功能的重复也实用标准文案精彩文档要避免功能疏漏的地方。理论和实践相结合是学好数据结构的关键, 既培养了我们的自学能力,也提高了我们的学习兴趣。九、源程序#in elude #i nclude #i nclude #i nclude #defi ne Max 20000typedef struct ArcCellint adj;/*
21、相邻接的景点之间的路程实用标准文案精彩文档ArcCell;/*定义边的类型 */typedef struct VertexTypeint nu mber;char sight100;char description1000;VertexType;typedef struct/*景点编号*/*景点名称*/*景点描述*/*定义顶点的类型*/这次的课设*/实用标准文案精彩文档VertexType vex20;/*图中的顶点,即为景点*/ArcCell arcs2020;/*图中的边,即为景点间的距离*/int vexnu m,arc num;/*顶点数,边数 */MGraph;/*定义图的类型 */
22、FILE *fp,*cou nt ;/*变量类型声明,声明 fp 是 FILE 型指针,用于指向 file 类型*/MGraph G;/*把图定义为全局变量*/char n ameofschool100;/*学校名称*/int NUM=9;int P2020;/*用来存放图中的边*/int p20;/*全局数组,用来存放路径上的各顶点*/in t visited20;/*全局数组,用来记录各顶点被访问的情况*/int a=0;/*全局变量,用来记录每对顶点之间的所有路径的条数*/long int D20;/*辅助变量存储最短路径长度*/void CreateUDN(i nt v,i nt a)
23、;/*造图函数*/void n arrate();/*说明函数*/实用标准文案精彩文档void ShortestPath(i nt nu m);/*最短路径函数*/void output(i nt sight1,i nt sight2);/*输出函数*/in t Men u();/*主菜单*/void search();/*查询景点信息*/int SearchMe nu();/*查询子菜单 */void HaMiTo nian (i nt);/*图的遍历*/void Searchpath1(MGraph g);/*查询两个景点间的所有路径*/void disppath(MGraph g,i n
24、t i,i nt j);void path(MGraph g,int i,int j,int k);/*确定路径上第 k+1 个顶点的序号*/void NextValue(i nt);void display();/*显示遍历结果 */int Add newsight(i nt n);/*添加新的景点和路径*/int Deletesight();/*删除景点和路径*/void Chan gesight();/*修改景点和路径*/int Chan geme nu();/*修改路径或顶点的选择菜单*/int Sightme nu();/*选择需该景点的菜单*/void mai n()/*主函数*/
25、in t v0,v1;int ck;CreateUDN(NUM,11);实用标准文案精彩文档dock=Me nu();switch(ck)case 1:search();break;case 2:system(cls);n arrate();printf(nnttt 请选择起点景点(0 %d ):,NUM-1);scan f(%d,&v0);printf(ttt请选择终点景点(0 %d ):,NUM-1);scan f(%d,&v1);ShortestPath(v0);/*计算两个景点之间的最短路径*/output(v0,v1);/* 输出结果 */printf(nntttt请
26、按任意键继续.n);getchar();getchar();break;case 3:实用标准文案精彩文档system(cls);n arrate();Searchpathl(G);printf(nntttt请按任意键继续.n);getchar();getchar();break;case 4:system(cls);n arrate();NUM=Add newsight(NUM);system(cls);n arrate();break;case 5:NUM=Deletesight();break;case 6:Chan gesight();break;实用标准文案精彩文档 while(ck
27、!=O);int Menu()/* 主菜单 */int c;int flag;doflag=1;system(cls);n arrate();prin tf(nttti-n)-1prin tf(ttt|n);prin tf(ttt|1、查询景点信息|n);prin tf(ttt|2、查询两景点间最短路径|n);prin tf(ttt|3、查询两景点间所有路线|n);prin tf(ttt|4、添加新的景点和路径|n);prin tf(ttt|5、删除已有景点和路径|n);prin tf(ttt|6、修改已有景点或路径|n);prin tf(ttt|0、退出|n);prin tf(ttt|n);
28、prin tf(ttt1-prin tf(tttt请输入您的选择:”);实用标准文案精彩文档scan f(%d,&c);if(c=1|c=2|c=3|c=4|c=5|c=6|c=0) flag=O;while(flag);return c;int SearchMenu()/*查询子菜单函数 */int c;int flag;doflag=1;system(cls);n arrate();prin tf(nttti-n)-1prin tf(ttt|n);prin tf(ttt|1、按照景点编号查询|n);prin tf(ttt|2、按照景点名称查询|n);prin tf(ttt|0、返回
29、|n);实用标准文案精彩文档prin tf(ttt |n);prin tf(ttt1-n)-1prin tf(tttt请输入您的选择:”);scan f(%d,&c);if(c=1|c=2|c=0)flag=O;while(flag);return c; void search()int num;int i;int c;char n ame20;fp=fope n( guide.txt,r+);coun t=fope n(co un t.txt,r+); dosystem(cls);c=SearchMe nu();switch (c)case 1:/*查询景点信息函数 */*读打开原文
30、件 book.txt*/*读写 count 文件*/实用标准文案精彩文档system(cls);n arrate();prin tf(nntt请输入您要查找的景点编号:”);sca nf(%d,&n um);for(i=0;iNUM;i+)if(num=G.vexi. nu mber)prin tf(nnttt您要查找景点信息如下:”);prin tf(nnttt%s: %-25snn,G.vexi.sight,G.vexi.descriptio n);printf(nttt按任意键返回.);getchar();getchar();break;if(i=NUM)prin tf(nntt
31、t 没有找到!);printf(nnttt按任意键返回.);getchar();getchar();实用标准文案精彩文档break;case 2:system(cls);n arrate();prin tf(nntt请输入您要查找的景点名称:”);sca nf(%s, name);for(i=0;iNUM;i+)if(!strcmp( name,G.vexi.sight)prin tf(nnttt您要查找景点信息如下:”);prin tf(nnttt%s:%-25snn,G.vexi.sight,G.vexi.descriptio n);printf(nttt按任意键返回.);getchar(
32、);getchar();break;if(i=NUM)prin tf(nnttt没有找到!);实用标准文案精彩文档printf(nnttt按任意键返回.);getchar();getchar();break;while(c!=O);fwrite(&G,sizeof(MGraph),1,fp);/* 保存到文件中 */fclose(fp);fprin tf(cou nt,%d,NUM);fclose(co un t);void CreateUDN(int v,int a)/* 创建初始图函数*/int i,j;if(fp=fopen(guide.txt,a+)=NULL)/ 调用了 fo
33、pen,要用 fclose 关闭ticket 文件保存记录的详细信息实用标准文案精彩文档printf(”文件未找到n);if(cou nt=fope n( cou nt.txt,w+)=NULL)fprin tf(cou nt,0);/cou nt 文件保存记录的条数elsefscan f(cou nt,%d,&NUM);strcpy( nameofschool,洛阳理工学院开元校区 );G.vexnum=v;边数*/*初始化结构中的景点数和G.arc num=a;for(i=0;i20;+i) G.vexi. number=i;/*初始化每一个景点的编号*/*初始化每一个景点名及其景
34、点描述*/strcpy(G.vexO.sight,大明桥);strcpy(G.vex0.descriptio n,落于小河上,风景优美);strcpy(G.vex1.sight,图书馆);实用标准文案精彩文档strcpy(G.vex1.descriptio n,环境优雅,充满书香气息,呈环形 ”);strcpy(G.vex2.sight,教学楼);strcpy(G.vex2.description,上课和自习的地方,临近图书馆”);strcpy(G.vex3.sight,子衿餐厅);strcpy(G.vex3.descriptio n,餐厅,新装修过的餐厅,临近实验楼,是男女比例最适中的餐厅)
35、;strcpy(G.vex4.sight,实验 A 楼);strcpy(G.vex4.description,老师办公室);strcpy(G.vex5.sight,实验 B 楼);strcpy(G.vex5.description,计算机机房);strcpy(G.vex6.sight,实验 C 楼);strcpy(G.vex6.description,电气实验楼);strcpy(G.vex7.sight,璞院餐厅);strcpy(G.vex7.descriptio n,第二餐厅,临近男生宿舍,食物种类比较多”);strcpy(G.vex8.sight,琇院餐厅);strcpy(G.vex8.d
36、escriptio n,第三餐厅,临近女生宿舍楼,比较便宜”);/*这里把所有的边假定为20000,含义是这两个景点之间是不可到达,极大值*/for(i=0;i20;+i)for(j=0;j20;+j)G.arcsi j.adj=Max;实用标准文案精彩文档/*下边是可直接到达的景点间的距离,由于两个景点间距离是互相的,所以要对图中对称的边同时赋值。*/G.arcs01.adj=G.arcs10.adj=50;G.arcs13.adj=G.arcs31.adj=70;G.arcs06.adj=G.arcs60.adj=250;G.arcs14.adj=G.arcs41.adj=80;G.arc
37、s24.adj=G.arcs42.adj=100;G.arcs35.adj=G.arcs53.adj=90;G.arcs52.adj=G.arcs25.adj=100;G.arcs46.adj=G.arcs64.adj=75;G.arcs47.adj=G.arcs74.adj=300;G.arcs27.adj=G.arcs72.adj=400;G.arcs78.adj=G.arcs87.adj=40;fWrite(&G,sizeof(MGraph),1,fp);/ 保存到文件中fclose(fp);/关闭文件,但不是屏幕fprin tf(cou nt,%d,NUM);fclose(co
38、 un t);实用标准文案精彩文档void narrate。/* 说明函数 */int i;printf(nt*欢迎使用s 校园导游程序 *n,nameofschool);prin tf(tn);printf(tttt景点名称 ttttttn);prin tf(tttn);for(i=0;iNUM;i+)if(G.vexi. number!=-1)prin tf(tttt%c(%2d)%-10s%c n,3,G.vexi. nu mber,G.vexi.sight,3);/*输出景点列表*/prin tf(tttn);void ShortestPath(i nt num)/*迪杰斯特拉算法最短
39、路径函数num 为入口点的编号*/int v,w,i,t;/* i、w 和 v 为计数辅助变量*/int fin al20;/*辅助数组*/实用标准文案精彩文档int min;fp=fope n(guide.txt,r+);/读打开原文件 book.txtcoun t=fope n(co unt.txt,r+);/读写 count 文件for(v=0;vNUM;v+)fin alv=0;/*假设从顶点 num 到顶点 v 没有最短路径 */Dv=G.arcs numv.adj;/*将与之相关的权值放入D 中存放*/for(w=0;wNUM;w+) /*设置为空路径 */Pvw=O;if(Dv2
40、0000)/* 存在路径 */Pv num=1; /*存在标志置为 1 */Pvv=1; /*自身到自身 */Dnu m=0;finalnum=1;/*初始化 num 顶点属于 S 集合*/*开始主循环,每一次求得 num 到某个顶点的最短路径,并将其加入到 S 集合*/for(i=0;iNUM;+i)/* 其余 G.vexnum-1个顶点 */min=Max;/*当前所知离顶点 num 的最近距离*/for(w=0;wNUM;+w)实用标准文案精彩文档if(!finalw)/* w 顶点在 v-s 中 */if(Dwmin) /* w 顶点离 num 顶点更近 */v=w;min=Dw;fi
41、nalv=1;/*离 num 顶点更近的 v 加入到 s 集合*/for(w=0;wNUM;+w)/*更新当前最短路径极其距离*/if(!finalw&(min+G.arcsvw.adj)Dw)/*不在 s 集合,并且比以前所找到的路径都短就更新当前路径*/Dw=mi n+G.arcsvw.adj;for(t=0;tNUM;t+)Pwt=Pvt;Pww=1;fwrite(&G,sizeof(MGraph),1,fp);/ 保存到文件中fclose(fp);fprin tf(cou nt,%d,NUM);fclose(co un t);实用标准文案精彩文档void output(
42、int sight1,int sight2)/* 输出函数 */int a,b,c,d,q=0;a=sight2; /*将景点二赋值给 a */if(a!=sight1)/*如果景点二不和景点一输入重合,则进行 */prin tf(nt从 %s至 U%s 的 最 短 路 径 是”,G.vexsight1.sight,G.vexsigh t2.sight);/*输出提示信息*/printf(t(最短距离为%dm.)nnt,Da);/* 输出 sight1 到 sight2 的最短路径长度,存放在 D数组中*/printf(t%s,G.vexsight1.sight);/* 输出景点一的名称 */
43、d=sight1;/*将景点一的编号赋值给d */for(c=0;cNUM;+c)gate:;/*标号,可以作为 goto 语句跳转的位置*/Pa sight1=0;for(b=0;bNUM;b+)if(G.arcsdb.adj%s,G.vexb.sight);/* 输出此节点的名称 */实用标准文案精彩文档q=q+1;/*计数变量加一,满8 控制输出时的换行*/Pab=O;d=b;/*将 b 作为出发点进行下一次循环输出,如此反复*/if(q%8=0) pri ntf(n);goto gate;/*从当前位置出发*/ void Searchpath1(MGraph g)/* 查询两个景点间的
44、所有路径 */ int 1=0;int k=0;int i,j;fp=fopen(guide.txt,r+);读打开原文件 book.txtcount=fopen(count.txt,r+);读写 count 文件printf(选择出发景点:”);sca nf(%d,&i);printf(”选择目地景点:”);sea nf(%d,&j);for(;kg.vex num;k+)/*g.vex number表示网中的顶点个数 */if(i=g.vexk. nu mber)实用标准文案精彩文档i=k;/*在网中找到其编号与输入的出发景点的编号相同的顶点*/for(;lg.vex nu
45、 m;l+)if( j=g.vexl.number)j=l;/*在网中找到其编号与输入的目地景点的编号相同的顶点*/ prin tf(n从 %s至 U %s 的所有游览路有:nn,g.vexi.sight,g.vexj.sight);/*输出出发景点和目地景点的名称*/disppath(g,i,j);/* 调用 disppath 函数,用来输出两个景点间的所有路径*/fwrite(&G,sizeof(MGraph),1,fp);/ 保存到文件中fclose(fp);fprin tf(cou nt,%d,NUM);fclose(co un t);void disppath(MGraph
46、g,i nt i,i nt j)int k;p0=i;/把 i 赋给 P0 , P 是一条道路上的所有景点的数组for(k=0;kg.vex nu m;k+)visitedi=O;/*初始化各顶点的访问标志位,即都为未访问过的*/a=0;/*初始化路径的条数*/path(g,i,j,O);/* 通过调用 path 函数,找到从 vi 到 vj 的所有路径并输出*/ void path(MGraph g,int i,int j,int k) /*确定路径上第 k+1 个顶点的序号*/实用标准文案精彩文档int s;if(pk=j)/* 找到一条路径 */a+;/*路径的条数值加 1*/print
47、f(第 %d 条:t,a);for(s=0;s);coutg.vexps.sight;prin tf(%sn,g.vexps.sight);s=0;/从第一个景点开始while(sg.vex num)if(s!=i)/*保证找到的是简单路径*/if(g.arcspks.adj!=Max&visiteds=O)/*当 vk 与 vs 之间有边存在且 vs 未被访问过*/实用标准文案精彩文档visiteds=1;/*置访问标志位为1,即已访问的*/pk+1=s;/* 将顶点 s 加入到 p 数组中*/path(g,i,j,k+1);/* 递归调用之 */visiteds=0;/*重置访问标
48、志位为0,即未访问的,以便该顶点能被重新使用*/s+;int Addnewsight(int n)/添加函数int i,b;char sight100,descriptio n1000;int len gth;fp=fopen(guide.txt,r+);读打开原文件 book.txtcount=fopen(count.txt,r+);读写 count 文件printf(请输入新景点的序号:n);scan f(%d, &b);printf(请输入新景点的名称:n);scan f(%s, &sight);实用标准文案精彩文档printf(请输入新景点的相关信息:n);sca nf
49、(%s, &descripti on);G.vex n . nu mber=b;strcpy(G.vex n .sight,sight);strcpy(G.vex n .descripti on, descripti on);for(i=0;i n ;i+) system(cls);n arrate();printf(请输入此景点到第 %d 个景点的距离(单位: m)达用 20000 表示,极大值):n”,i);scan f(%d,&len gth);if(le ngth!=20000);G.arc nu m+;G.arcs ni.adj=G.arcsi n.adj=le ng
50、th;景点或不可到实用标准文案精彩文档NUM+;n+;G.vex nu m+;fWrite(&G,sizeof(MGraph),1,fp);/ 保存到文件中fclose(fp);fprin tf(cou nt,%d,NUM);fclose(co un t);return n;int Deletesight(i nt n)int i,a=0;int j;int c;int num;char n ame20;system(cls);cou nt=fope n(cou nt.txt,r+);/c=SearchMe nu();/*删除函数*/fp=fope n( guide.txt,r+);读
51、打开原文件 book.txt读写 count 文件实用标准文案精彩文档switch (c)case 1:system(cls);n arrate();prin tf(nn tt请输入您要删除景点的编号:”);scan f(%d, &n um);for(i=0;iNUM;i+)if(num=G.vexi.number)/ 查找到编号a=1;for(j=0;jNUM;j+)if(G.arcsij.adj!=20000)G.arcnum-;/如果该顶点与其他顶点间有边相连,边数减一G.arcsi j.adj=G.arcs ji.adj=20000;/ 将该顶点与其他顶点间的距离初始化为无穷大
52、(20000)实用标准文案精彩文档G.vexnum.number=-1;II从要删除的顶点之后的顶点开始,向前覆盖即删除操作strcmp(G.vex n um.sight,*);strcmp(G.vex nu m.descriptio n,+);if(a=1)prin tf(nttt删除成功!按任意键返回.);getchar();getchar();if(a=0)printf(该编号不存在!);getchar();getchar();break;case 2:system(cls);实用标准文案精彩文档n arrate();prin tf(nntt请输入您要删除景点的名称:”);实用标准文案精
53、彩文档sea nf(%s, name);for(i=0;iNUM;i+)if(!strcmp( name,G.vexi.sight)a=1;num=i;for(j=0;jNUM;j+)if(G.arcsij.adj!=20000)G.arc num-;G.arcsi j.adj=G.arcs ji.adj=20000;G.vexnum.number=-1;/从要删除的顶点之后的顶点开始,向前覆盖除操作strcmp(G.vex nu m.sight,*);strcmp(G.vex nu m.descripti on,+);if(a=1)即删实用标准文案精彩文档printf(删除成功!);实用标准文案精彩文档prin tf(ntttgetchar();getchar();if(a=0)printf(nntttprintf(nntttgetchar();getchar();break;按任意键返回 ”);没有找到!);按任意键返回G.vex nu m-;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年秋新人教版八年级上册物理教学课件 第四章 光现象 第3节 平面镜成像 第2课时 平面镜、凹面镜和凸面镜
- 七年级道德与法治上册 第三单元 师长情谊 第六课 师生之间 第2框 师生交往教学设计 新人教版
- 垃圾挖运合同范本
- 采购合同风险培训重点基础知识点
- 安全漏洞修复风险风险进度重点基础知识点
- 骨科腰椎滑脱围手术期护理
- 产权房屋买卖定金合同范例
- 在线签署学生安全免责协议书二零二五年
- 围手术期管理规范及制度
- 燃料电池汽车能量管理
- GB/T 44625-2024动态响应同步调相机技术要求
- 大学物理:电磁感应与电磁场
- 2024年青岛中小学教师招聘真题
- 2024年四川省眉山市中考地理+生物试卷(含答案解析)
- 第27课 改革开放与建设中国特色社会主义【课件】-中职高一上学期高教版(2023)中国历史
- SJ∕T 11614-2016 电动汽车驱动电机系统用金属化薄膜电容器规范
- 凌云3安装调试手册
- (高清版)JTGT 3610-2019 公路路基施工技术规范
- 《火力发电厂贮灰场防渗技术导则》
- 围手术期的营养治疗
- 幼儿园游戏活动评价
评论
0/150
提交评论