数据结构课程设计校园导游系统

上传人:re****.1 文档编号:470358717 上传时间:2024-01-25 格式:DOC 页数:16 大小:407KB
返回 下载 相关 举报
数据结构课程设计校园导游系统_第1页
第1页 / 共16页
数据结构课程设计校园导游系统_第2页
第2页 / 共16页
数据结构课程设计校园导游系统_第3页
第3页 / 共16页
数据结构课程设计校园导游系统_第4页
第4页 / 共16页
数据结构课程设计校园导游系统_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《数据结构课程设计校园导游系统》由会员分享,可在线阅读,更多相关《数据结构课程设计校园导游系统(16页珍藏版)》请在金锄头文库上搜索。

1、一. 设计目的 设计一个学校的导游系统,方便游客游览我们学校。二. 设计内容为来访的客人提供各种信息查询服务。主要包括:查看学校的全景图各个景点的简介学校主要景点的分布查看某一景点到其它所有景点的最短路径查询任意两个景点之间的最短路径。三概要设计1功能模块图;mainIniGraphbrowserShortestpath_dijserchmapprimprintmenucmd2功能模块详细介绍;(1)main: 主函数(2) browser:(3) IniGraph:初始化学校地图,给出景点的详细信息,以及景点之间的距离。(4) Shortestpath_dij:迪杰斯特拉算法,用于求两个景点

2、之间的最短路径。(5) serch:供游客查询单个景点的详细信息(6) prim:普利姆算法,用于得出最佳布网方案。(7) map:无参函数,打印学校的全景图。(8) menu:游客的输入界面。(9) print:打印相应的游览路线。(10) cmd:输入相应的选择进行不同的游览方式。四详细设计search1功能函数的调用关系图primShortestpath_dijCmdMainprintbrowseriniGraphmenumap2各功能函数的数据流程图无参函数,打印平面图map图存在且非空打印路线,文件存储输入起止点标号,非法则提示再次输入Prim输入起点编号,非法提示,再次输入图存在且

3、非空Dij依次输入,到各个景点最短距离,文件存储无参函数,菜单栏Menu无向网初始化,得到景点距离,以及信息InitGraph打印景点信息图存在且非空BrowserFor循环控制结点数目,并打印。图存在且非空Print3重点设计及编码创建结构体,表示景点,成员为编号,名称,简介typedef struct /图中顶点表示主要景点,存放景点的编号、名称、简介等信息,char name30;int num;char introduction100;/简介infotype;Prim算法:void prim(MGraph *G)FILE *fp;fp=fopen(D:sight.txt,at+);if

4、(fp=NULL)printf(fail to open!n);elseint v,u,i,w,k,j,flag=1,p101010,D1010; for(v=0;vvexnum;v+) for(w=0;wvexnum;w+) Dvw=G-arcsvw.adj; for(u=0;uvexnum;u+) pvwu=0; if(DvwINFINITY) pvwv=1;pvww=1; for(u=0;uvexnum;u+) for(v=0;vvexnum;v+) for(w=0;wvexnum;w+) if(Dvu+DuwDvw) Dvw=Dvu+Duw; for(i=0;ivexnum;i+) p

5、vwi=pvui|puwi; while(flag) printf(请输入出发点和目的地的编号:); scanf(%d%d,&k,&j); if(kG-vexnum|jG-vexnum) printf(景点编号不存在!请重新输入出发点和目的地的编号:); scanf(%d%d,&k,&j); if(k=0&kvexnum&j=0&jvexnum) flag=0; fprintf(fp,%s,G-vexsk.name); for(u=0;uvexnum;u+) if(pkju&k!=u&j!=u) fprintf(fp,-%s,G-vexsu.name); fprintf(fp,-%s,G-ve

6、xsj.name); fprintf(fp, 总路线长%dmn,Dkj);fclose(fp);迪杰斯特拉算法:void ShortestPath_DIJ(MGraph * G)FILE *fp;fp=fopen(D:approach.txt,at+);if(fp=NULL)printf(Fail to open!n);elseint v,w,i,min,t=0,x,flag=1,v0; int final20, D20, p2020;while(flag)printf(请输入一个起始景点编号:);scanf(%d,&v0);if(v0G-vexnum)printf(景点编号不存在!请重新输入

7、景点编号:);scanf(%d,&v0);if(v0=0&v0vexnum)flag=0;/endwhilefor(v=0;vvexnum;v+)finalv=0;Dv=G-arcsv0v.adj;for(w=0;wvexnum;w+)pvw=0;if(DvINFINITY)pvv0=1;pvv=1;Dv0=0;finalv0=1;for(i=1;ivexnum;i+)min=INFINITY;for(w=0;wvexnum;w+)if(!finalw)if(Dwmin)v=w;min=Dw;finalv=1;for(w=0;wvexnum;w+)if(!finalw&(min+G-arcsv

8、w.adjarcsvw.adj;for(x=0;xvexnum;x+) pwx=pvx;pww=1;for(v=0;vvexnum;v+)if(v0!=v)fprintf(fp,%s,G-vexsv0.name);for(w=0;wvexnum;w+)if(pvw&w!=v0) fprintf(fp,-%s,G-vexsw.name); t+; if(tG-vexnum-1&v0!=v) fprintf(fp, 总路线长%dmnn,Dv); /endfor/endif/ShortestPath_DIJ end五测试数据及运行结果1 正常测试数据和运行结果2异常测试数据及运行结果六调试情况,设计

9、技巧及体会1改进方案对于我的设计,合理之处是对每一次查询都以文件的形式进行了存储,其次,校园的平面图比较好的展现了我们学校的风貌。不足之处是使用prim算法的时候,若终点输入不合法,程序会陷入,死循环。这是致命的错误,我的改进方法是若输入字符不合法,则跳出循环,再次输入,直到合法为止。利用迪杰斯特拉算法在计算到剩下的顶点的最短距离时第一个for循环时时间复杂度是O(n),每进行一次第二个for循环的时间复杂度都是O(n),第三个for循环也就是存储途经顶点时用的循环而不是书中算法所用的只是个地址的赋值,所以时间复杂度也是O(n),这样总的时间复杂度就是O(n3)。改进设想主要就是给用户一个浏览

10、路线的推荐本来在程序设计初期是计划要实现这个功能的,但是由于时间和能力问题没有去实现,因为它涉及到汉密尔顿路的实现,目前感觉还比较复杂所以暂时放弃了,日后如果有机会一定将这个功能完善。2体会调试过程中难免会遇见这样或者那样的问题,一个很低级的错误就是在字符串的赋值上居然还会出错,本来是不可以像int型数据那样直接用等于号赋值的,可是刚开始由于失误却犯了这样低级的错误结果导致出现102个错误,当时确实有点慌了,等冷静下来一想才把问题想明白,字符串的赋值必须用strcpy函数。看来基本功还是相当的重要的。此外,迪杰斯特拉算法其实放在这里多少有些不合适,因为不管在求任意两个景点之间的最短路径还是求某

11、一景点到其它景点的最短路径时都要完全的执行一遍算法时间复杂度是很高的,当时在实现时也确实考虑到了这个问题只是后来感觉要是实现时间复杂度的降低不是很简单也就暂时放弃了,也就选择了将这个算法直接搬了过来,这里是一点败笔,尚需要改进。七参考文献数据结构 严蔚敏 吴为民C语言程序设计(第三版) 谭浩强 八附录:源代码(电子版)#define INFINITY 10000 /*无穷大*/#define MAX_VERTEX_NUM 40#define MAX 40#include#include#include#includetypedef struct ArCellint adj; /路径长度ArCell,AdjMatrixMAX_VERTEX_NUMMAX_VERTEX_NUM;typedef struct /图中顶点表示主要景点,存放景点的编号、名称、简介等信息,char name30;int num;char introduction100;/简介infotype;typedef structinfotype vexsMAX_VERTEX_NUM;AdjMatrix arcs;int vexnum,arcnum;MGraph;MGraph b;void cmd(void);MGraph InitGr

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号