您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 经营企划 > 数据结构课程设计校园导游咨询
9、校园导游咨询问题描述:设计一个校园导游程序,为来访的客人提供各种信息查询服务。基本要求:⑴设计华东交通大学的校园平面图,所含景点不少于10个。以图中顶点表示校内各景点,⑵存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。⑶为来访客人提供图中任意景点相关信息的查询。⑷为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。#includestdio.h#defineMAXV100//最大顶点个数#defineINF32767//用32767表示∞#includestdlib.h//调用函数system改变字体颜色的头文件typedefintInfoType;#defineMAXV100//最大顶点个数//以下定义邻接矩阵类型typedefstruct{intno;//顶点编号InfoTypeinfo;//顶点其他信息}VertexType;//顶点类型typedefstruct//图的定义{intedges[MAXV][MAXV];//邻接矩阵intvexnum,arcnum;//顶点数,弧数VertexTypevexs[MAXV];//存放顶点信息}MGraph;voidecjtumap()//建立华东交通大学地图{printf(\t|-------------------------------------------------------------|\n);printf(\t||\n);printf(\t||\n);printf(\t|----------|\n);printf(\t|==============================|国防生宿舍||\n);printf(\t|。----------|\n);printf(\t|。。。|\n);printf(\t|。。。|\n);printf(\t|。。。|\n);printf(\t|。。。|\n);printf(\t|。。。|\n);printf(\t||南区四食堂|----------|\n);printf(\t|。。|南区礼堂||\n);printf(\t|。。----------|\n);printf(\t|。。。|\n);printf(\t|。。。|\n);printf(\t|。--------。|\n);printf(\t|================|校训牌|。。。。。。。|\n);printf(\t|=--------|\n);printf(\t|=。|\n);printf(\t|=。|\n);printf(\t|-----------------|\n);printf(\t|----|南区后门|---------|南区大门|------------------------|\n);printf(\t|-----------------|\n);printf(\t|---------|\n);printf(\t|-------------------------|北区大门|------------------------|\n);printf(\t|--------|\n);printf(\t|。--------------|\n);printf(\t|===========================|15栋综合教学楼||\n);printf(\t|=--------------|\n);printf(\t|=。|\n);printf(\t|=。|\n);printf(\t|=。|\n);printf(\t|=。|\n);printf(\t|=----------|\n);printf(\t|===============================|经管食堂||\n);printf(\t|=----------|\n);printf(\t|==|\n);printf(\t|==|\n);printf(\t|-----------=|\n);printf(\t||轨道交通食堂|====================|学生宿舍||\n);printf(\t|------------|\n);printf(\t||\n);printf(\t|-------------------------------------------------------------|\n);printf(\n);}voidDispMat(MGraphg)//输出邻接矩阵g,即输出地图各景点的图的距离{inti,j;for(i=0;ig.vexnum;i++){for(j=0;jg.vexnum;j++)if(g.edges[i][j]==INF)printf(%3s,∞);//这里分别用%3s和%3d控制输出字符∞或数字宽度为3个字符elseprintf(%3d,g.edges[i][j]);//这样比较方便观看景点的图的邻接矩阵gprintf(\n);}}voidlistmap()//建立景点的相关信息的总浏览表{printf(\t华东交通大学景点一览\n\n);printf(\t|---------------------------------------|\n);printf(\t|1:南区大门|\n);printf(\t|---------------------------------------|\n);printf(\t|2:校训牌|\n);printf(\t|---------------------------------------|\n);printf(\t|3:图书馆|\n);printf(\t|---------------------------------------|\n);printf(\t|4:南区一食堂|\n);printf(\t|---------------------------------------|\n);printf(\t|5:孔目湖|\n);printf(\t|---------------------------------------|\n);printf(\t|6:北区大门|\n);printf(\t|---------------------------------------|\n);printf(\t|7:15栋教学楼|\n);printf(\t|---------------------------------------|\n);printf(\t|8:北区食堂|\n);printf(\t|---------------------------------------|\n);printf(\t|9:科技楼|\n);printf(\t|---------------------------------------|\n);printf(\t|10:北区篮球场|\n);printf(\t|---------------------------------------|\n);}voidintroduce()//根据上面的浏览表,对应出相关信息{inta=1;printf(\n);printf(请输入要查看的景点:\n);printf(输入1~10的数字选择景点,其他数字返回上一级\n);while(0a&&a=10){scanf(%d,&a);switch(a){case1:printf(1:南区大门是进入华东交通大学南区的正门\n);break;case2:printf(2:校训牌是激励我们大学生积极向上\n);break;case3:printf(3:图书馆是给我们大学生丰富知识的海洋\n);break;case4:printf(4:南区一食堂是南区学生的吃饭的地方\n);break;case5:printf(5:孔目湖是华东交通大学最迷人的地方\n);break;case6:printf(6:北区大门是进入华东交通大学北区的正门\n);break;case7:printf(7:15栋教学楼是一栋综合型的教学楼\n);break;case8:printf(8:北区食堂是北区学生吃饭的地方\n);break;case9:printf(9:科技楼是大学生上机做实验的教学楼\n);break;case10:printf(10:北区篮球场是大学生锻炼身体的地方\n);break;}}}voidshow_didian(intn)//根据算法求出的整型数,对应出地点//根据xx算法求出的数字,转化为文字描述{switch(n){case0:printf(1.南区大门);break;case1:printf(2.校训牌);break;case2:printf(3.图书馆);break;case3:printf(4.南区一食堂);break;case4:printf(5.孔目湖);break;case5:printf(6.北区大门);break;case6:printf(7.15栋教学楼);break;case7:printf(8.北区食堂);break;case8:printf(9.科技楼);break;case9:printf(10.北区篮球场);break;}}voidppath(intpath[][MAXV],inti,intj)//求最短路径经过的地点{intk=path[i][j];if(k==-1)return;ppath(path,i,k);show_didian(k);printf(-);ppath(path,k,j);}voidput_shortdistance(intx,inty,intA[][MAXV],intpath[][MAXV],intn){inti,j;for(i=0;in;i++)for(j=0;jn;j++)if(A[i][j]==INF){if(i!=j)printf(从%d到%d没有路径\n,i,j);}else{if(i==x&&j==y){printf(最短路径为:从--);show_didian(i);printf(--到--);show_didian(j);printf(--路径为--:\n);show_didian(i);//输出起点printf(-);ppath(path,i,j);//求最短路径经过的中间路径,若没有则不输出show_didian(j);//输出终点printf(\n\t路径长度为:%d\n,A[i][j]);}}}voidshortdistance(MGraphg,intx,inty)//求最短路径用的是弗洛伊德算法{intA[MAXV][MAXV],path[MAXV][MAXV];//path为中间路径不包括起点终点inti,j,k,n=g.vexnum;for(i=0;in;i++)//给A数组置初值for(j=0;jn;j++){A[i][j]=g.edges[i][j];path[i][j]=-1;}for(k=0;kn;k++)//计算Ak{for(i=0;in;i++)for(j=0;jn;j++)//这里的3个for循环if(A[i][j](A[i][k]+A[k][j]))//所以时间复杂度O(n3){A[i][j]=A[i][k]+A[k][j];path[i][j]=k;}}put_shortdistance(x,y,A,path,n);}voidmenu(MGraphg)//建立菜单页面,可以无数次选择菜单,当输入5时退出系统{intm=1,x=1,y=1;//m的菜单选择的功能x,y分别表示从x到y的问路查询while(m!=5){printf(\t\t\t|------------------------|\n);printf(\t\t\t|----------菜单----------|\n);printf(\t\t\t|1:查看地图|\n);printf(\t\t\t|2:地图详解|\n)
本文标题:数据结构课程设计校园导游咨询
链接地址:https://www.777doc.com/doc-5436175 .html