校园导游系统代码(数据结构)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、问题描述
设计一个校园模拟导游程序,为新生或来访的客人通过与机器的“对话“提供最短路径的信息查询服务。
二、基本要求
1.任意选取n个场所,构成一个无向带权图,图中顶点表示场所,边上的权值表示两点间的距离,图的存储结构可采用带权的邻接矩阵。
2.咨询以用户和计算机的对话方式进行,由用户输入起始点和终点,输出信息:最短路径是多少?并指出所经过的场所。
3、计算并记录从校门口到各个场所的最短路径,即求单源点到其它各个场所的最短路径。
4、提供校园中任意场所的问路查询,即求任意两点之间的最短路径。
三、测试数据
学生根据实际情况指定
#define INFINITY 10000 /*无穷大*/
#define MAX_VERTEX_NUM 40
#define MAX 40
#include
#include
#include
#include
typedef struct ArCell
{
int adj; //路径长度
}ArCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
typedef struct //图中顶点表示主要景点,存放景点的编号、名称、简介等信息,
{
char name[30];
int num;
char introduction[200];//简介
}infotype;
typedef struct
{
infotype vexs[MAX_VERTEX_NUM];//景点
AdjMatrix arcs;//路径数组
int vexnum,arcnum;//景点数,路径长度记录
}MGraph;
MGraph b;//全局变量
void cmd(void);//在主函数中用来调用其他应用子函数的函数声明
MGraph InitGraph(void);//用来构造学校地图的子函数返回MGraph类型
void Menu(void);//菜单函数;
void Browser(MGraph *G);//调用MGraph类型的地址,进行
void ShortestPath_DIJ(MGraph * G);//迪杰斯特拉算法求最短路径的子函数
void Floyd(MGraph *G);//佛洛伊德算法
void Search(MGraph *G);//寻找要查询的景点,并输出该景点的信息
void browse_view_distribute();//查看景点分布图
void tou(MGraph *G);//景点列表
void panduan();
//void Exit();//退出
int LocateVex(MGraph *G,char* v);//定点位置
MGraph * CreatUDN(MGraph *G);////初始化图形,接受用户输入
void print(MGraph *G);//打印输出子函数
/******************************************************/
void main(void)
{
cmd();//用该函数来调用其他需要用到的函数
}
/******************************************************/
void cmd(void)//用来调用其他需要用到的函数的子函数
{
int i;
b=InitGraph();//构造校园地图
Browser(&b);//Menu();//调用菜单函数
scanf("%d",&i);
while(i!=4)
{
switch(i)
{
case
1:system("cls");/*ShortestPath_DIJ(&b);*/browse_view_distribute();Browser(&b);break;
case 2:system("cls");tou(&b);Floyd(&b);Browser(&b);break;
case 3:system("cls");tou(&b);Search(&b);Browser(&b);break;
case 4:exit(0);break;
default:break;
}
scanf("%d",&i);
}
printf("欢迎下次继续使用!\n\n");
}
//*******************************************************************
MGraph InitGraph(void)//构造校园地图
{
MGraph G;
int i,j;
G.vexnum=13;//景点数量
G.arcnum=21;//路径数量
for(i=1;i<=G.vexnum;i++)
G.vexs[i].num=i;//对景点进行对应编号
/*对对应的景点编号进行命名,输入简介*/
strcpy(G.vexs[3].name,"行政办公楼");
strcpy(G.vexs[3].introduction,"学校的行政机构。");
strcpy(G.vexs[6].name,"图书馆");
strcpy(G.vexs[6].introduction,"体积庞大,是学校的标志性建筑,目前还在建设中。");
strcpy(G.vexs[2].name,"果园");
strcpy(G.vexs[2].introduction,"枝叶茂盛,各种新鲜水果。");
strcpy(G.vexs[1].name,"校门");
strcpy(G.vexs[1].introduction,"学校的形象,气势宏伟。");
strcpy(G.vexs[4].name,"体育运动区");
strcpy(G.vexs[4].introduction,"包括有排球场、篮球场、网球场等。");
strcpy(G.vexs[5].name,"教学区");
strcpy(G.vexs[5].introduction,"包括左教学楼、小湖、右教学楼、实验楼和医务室等。");
strcpy(G.vexs[10].name,"男生宿舍");
strcpy(G.vexs[10].introduction,"分1、2、7、8栋,供男同学居住,女生勿进。");
strcpy(G.vexs[7].name,"琴房");
strcpy(G.vexs[7].introduction,"音乐学院学生练琴的地方。");
strcpy(G.vexs[8].name,"足球场");
strcpy(G.vexs[8].introduction,"踢球,跑步,运动比赛场地。");
strcpy(G.vexs[9].name,"省高速路");
strcpy(G.vexs[9].introduction,"上面是省高速路,下面是人行隧道。");
strcpy(G.vexs[11].name,"食堂");
strcpy(G.vexs[11].introduction,"分1、2、3、4楼,价格有所不同,根据自己爱好,随意点菜。");
strcpy(G.vexs[12].name,"女生宿舍");
strcpy(G.vexs[12].introduction,"楼下一“爱心”超市,价格绝对不便宜。楼上女同学居住,男生勿进。");
strcpy(G.vexs[13].name,"教师村");
strcpy(G.vexs[13].introduction,"老师们的居住地,10多楼高。");
//对有路的各景点之间的路径长度进行设置,没路的设置为无穷大
for(i=1;i<=G.vexnum;i++)