数据结构课程设计校园导游咨询_校园导游咨询课程设计
数据结构课程设计校园导游咨询由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“校园导游咨询课程设计”。
9、校园导游咨询 问题描述:
设计一个校园导游程序,为来访的客人提供各种信息查询服务。基本要求:
⑴设计华东交通大学的校园平面图,所含景点不少于10个。以图中顶点表示校内各景点,⑵存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。⑶为来访客人提供图中任意景点相关信息的查询。⑷为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。
#include #define MAXV 100
//最大顶点个数 #define INF 32767
//用32767表示∞ #include
//调用函数system改变字体颜色的头文件
typedef int InfoType;#define MAXV 100
//最大顶点个数 //以下定义邻接矩阵类型 typedef struct {
int no;
//顶点编号
InfoType info;
//顶点其他信息 } VertexType;
//顶点类型 typedef struct
//图的定义 {
int edges[MAXV][MAXV];//邻接矩阵
int vexnum,arcnum;
//顶点数,弧数
VertexType vexs[MAXV];//存放顶点信息 } MGraph;
void ecjtumap()//建立华东交通大学地图
{ 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”);} void DispMat(MGraph g)
//输出邻接矩阵g,即输出地图各景点的图的距离 { int i,j;for(i=0;i
for(j=0;j
if(g.edges[i][j]==INF)
printf(“%3s”,“∞”);//这里分别用%3s和%3d控制输出字符∞或数字宽度为3个字符
else printf(“%3d”,g.edges[i][j]);//这样比较方便观看景点的图的邻接矩阵g
printf(“n”);} } void listmap()//建立 景点的相关信息的总浏览表
{ printf(“t
华东交通大学景点一览
nn”);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”);} void introduce()//根据上面的浏览表,对应出相关信息 { int a=1;printf(“n”);printf(“请输入要查看的景点:n”);printf(“输入1~10的数字选择景点,其他数字返回上一级n”);while(0
switch(a)
{case 1:printf(“1:南区大门是进入华东交通大学南区的正门n”);break;
case 2:printf(“2:校训牌是激励我们大学生积极向上n”);break;
case 3:printf(“3:图书馆是给我们大学生丰富知识的海洋n”);break;
case 4:printf(“4:南区一食堂是南区学生的吃饭的地方n”);break;
case 5:printf(“5:孔目湖是华东交通大学最迷人的地方n”);break;
case 6:printf(“6:北区大门是进入华东交通大学北区的正门n”);break;
case 7:printf(“7:15栋教学楼是一栋综合型的教学楼n”);break;
case 8:printf(“8:北区食堂是北区学生吃饭的地方n”);break;
case 9:printf(“9:科技楼是大学生上机做实验的教学楼n”);break;
case 10:printf(“10:北区篮球场是大学生锻炼身体的地方n”);break;
} } } void show_didian(int n)//根据算法求出的整型数,对应出地点//根据 xx算法求出的数字,转化为文字描述 { switch(n){case 0:printf(“1.南区大门”);break;case 1:printf(“2.校训牌”);break;case 2:printf(“3.图书馆 ”);break;case 3:printf(“4.南区一食堂”);break;case 4:printf(“5.孔目湖”);break;case 5:printf(“6.北区大门”);break;case 6:printf(“7.15栋教学楼”);break;case 7:printf(“8.北区食堂”);break;case 8:printf(“9.科技楼”);break;case 9:printf(“10.北区篮球场”);break;} } void ppath(int path[][MAXV],int i,int j)//求最短路径经过的地点 { int k=path[i][j];if(k==-1)return;ppath(path,i,k);show_didian(k);printf(“->> ”);ppath(path,k,j);} void put_shortdistance(int x,int y,int A[][MAXV],int path[][MAXV],int n){ int i,j;for(i=0;i
for(j=0;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(“nt路径长度为:%dn”,A[i][j]);
}
} } void shortdistance(MGraph g,int x,int y)//求最短路径用的是弗洛伊德算法
{ int A[MAXV][MAXV],path[MAXV][MAXV];//path为中间路径不包括 起点 终点
int i,j,k,n=g.vexnum;for(i=0;i
//给A数组置初值
for(j=0;j
{
A[i][j]=g.edges[i][j];path[i][j]=-1;
} for(k=0;k
//计算Ak {
for(i=0;i
for(j=0;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);} void menu(MGraph g)//建立 菜单 页面,可以无数次选择菜单,当输入5时退出系统 { int m=1,x=1,y=1;//m的菜单选择的功能x,y分别表示从x到y的问路查询
while(m!=5){ printf(“ttt|------------------------|n”);
printf(“ttt|----------菜单----------|n”);
printf(“ttt| 1:查看地图
|n”);
printf(“ttt| 2:地图详解
|n”);
printf(“ttt| 3:景点一览表
|n”);
printf(“ttt| 4:问路查询
|n”);
printf(“ttt| 5:退出
|n”);
printf(“ttt|------------------------|n”);
printf(“请输入1~5的数字n”);
scanf(“%d”,&m);
switch(m)
{case 1:ecjtumap();break;
case 2:listmap();
introduce();break;
case 3:listmap();
introduce();
printf(“n”);break;
case 4:listmap();
printf(“请输入起点:”);
scanf(“%d”,&x);x+=-1;
printf(“请输入终点:”);
scanf(“%d”,&y);y+=-1;
shortdistance(g,x,y);break;
case 5:printf(“ttt感想使用本系统,欢迎下次继续使用n”);break;
} } } void main(){ system(“color 0a”);//输出字体为绿色
int i,j;MGraph g;int A[MAXV][10]={
{INF, 1,INF,INF,INF, 1,INF,INF,INF,INF},{ 1,INF, 5, 6, 7,INF,INF,INF,INF,INF},{INF, 5,INF,INF, 2,INF,INF,INF,INF,INF},{INF, 6,INF,INF, 5,INF,INF,INF,INF,INF},{INF, 7, 2, 5,INF,INF,INF,INF,INF,INF},{ 1,INF,INF,INF,INF,INF, 3,INF, 5,INF},{INF,INF,INF,INF,INF, 3,INF, 2,INF,INF},{INF,INF,INF,INF,INF,INF, 2,INF, 8, 10},{INF,INF,INF,INF,INF, 5,INF, 8,INF, 2},{INF,INF,INF,INF,INF,INF,INF, 10, 2,INF}};g.vexnum=11;g.arcnum=11;for(i=0;i
for(j=0;j
g.edges[i][j]=A[i][j];printf(“n”);printf(“ttt华东交通大学导游咨询系统n”);menu(g);//进入导游系统,执行菜单功能 }