数据结构课程设计——校园导游图

合集下载

数据结构试验报告校园导游

数据结构试验报告校园导游

《数据结构》课程设计报告课程名称:《数据结构课程设计》;课程设计题目:校园导游查询;姓名:张晓艺;院系:计算机学院;专业:数字媒体技术;年级:大二;学号:10054220 ;指导教师:王立波;2011 年12 月17 日1 课程设计的目的 (x)2 需求分析 (x)3 课程设计报告内容 (x)1、概要设计 (x)2、详细设计 (x)3、调试分析 (x)4、用户手册 (x)5、测试结果 (x)6、程序清单 (x)4 小结5 参考文献1. 课程设计的目的:(1)熟练运用C++ 编写程序;(2 )会用Floyd 算法查找最短路径;2. 需求分析:1. 题目:【校园导游咨询】[问题描述](1 )设计你的学校的校园平面图,所含景点不少于10 个。

以图中顶点表示学校各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。

(2 )为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。

(3 )为来访客人提供图中任意景点相关信息的查询。

[测试数据] 由读者根据实际情况指定。

2. 任务:通过此程序可实现以下功能:(1 )用一维数组存放景点信息,二维数组存放景点间的距离,最短距离,最短路径;(2 )Floyd 算法计算最短距离和路径;(3 )根据景点序号查询景点的一系列信息,及两景点间的最短路径和最短距离。

3. 测试数据:查询类型:I (表示查询景点信息);景点编号: 3 ;查询类型: D (表示查询景点间的最短路径和最短距离);景点编号: 1 9 ;3. 课程设计报告内容:1. 概要设计:(1 )首先我画了学校主要几个景点的分布图以及自己定的一些距离,图如下:struct Date{int num; char n ame[50]; char in troduce[100]; };(3 )然后我定义了一个类,定义如下:class Travel {private:Date date[15]; int dista nce[15][15]; int Path[15][15];int ShortestDista nce[15][15]; void Floyd(); public:Travel(); ~Travel(){}void In troduce(i nt); void Sca nf();void ShortDista nce(i nt,i nt); }; (4)基本操作: void Floyd();8C2030202010⑦①④(2 )接着我定义了一个顶点结构体,定义如下:II 景点编号//景点名称 II 景点介绍IIFloyd 算法,计算最短路径和最短距离Travel 。

校园导游系统数据结构图

校园导游系统数据结构图

西安郵電學院数据结构实验报告题目:校园导游系统院系名称:计算机学院专业名称:计算机科学与技术班级:1006学生姓名: ****学号(8位):*****指导教师:******设计起止时间:2011年12月12日~2011年12月16日一. 题目要求1、设计学校的校园平面图,地点(地点名称、地点介绍)不少于10个。

2、提供图中任意地点相关信息的查询。

3、提供图中任意地点的问路查询:1)任意两个地点之间的一条最短(中转最少)的简单路径;2)任意两个景点的最佳访问路线(带权)查询;3)任意两个地点之间的所有路径。

4、地点和道路的扩充以及撤销;地点基本信息的文件存储。

(附加:加分题)二.概要设计1.功能模块的调用关系图2.各个模块详细的功能描述。

1.首先,main()函数调用loge()函数,输出欢迎界面,然后调用showmenu()函数来选择用户所要进行的操作。

其中showmenu()函数就是一个菜单供使用者来选择他所要进行的相关操作,比如信息的查询,最短路径查询之类。

2.browser()函数,用于输出校园平面图,给用户提供校园的景点分布状况,方便用户选择景点参观。

3.Search()函数,用于查询用户所选的景点信息,用户需要输入要查询的景点编号,函数会对编号进行判断,如果是合法输入,则在屏幕上输出该景点的相关信息,包括景点名字,景点的相关介绍,否则返回重新输入。

4.SearchAllpath()函数,用于查询用户所选的任意两个景点间的所有路径,用户需要输入要查询的起始景点编号,函数会对编号进行判断,如果是合法输入,用户需要输入要查询的终点景点编号,函数会对编号进行判断,如果是合法输入,则在屏幕上输出输查询的两个景点间的所有路径,否则返回重新输入。

函数使用深度遍历DeepFirstSeach()查找路径。

5.Wellway()函数,用于查询用户所选的任意两个景点间的最短路径,用户需要输入要查询的起始景点编号,函数会对编号进行判断,如果是合法输入,用户需要输入要查询的终点景点编号,函数会对编号进行判断,如果是合法输入,则在屏幕上输出输查询的两个景点间的最短路径,否则返回重新输入。

校园导游图系统数据结构实验报告

校园导游图系统数据结构实验报告
3.选择出发点和目的地:用户输入一个出发点和一个目的地编号,采用弗洛伊德算法求出发点到目的地的最短路径
4.查看景点信息:直接用编号进行单个景点查询。
四.详细设计
重点设计及编码
在求最短路径时采用迪杰斯特拉算法
//迪杰斯特拉算法来计算出起点到各个顶点之间的最短路径,v0为起点
void ShortestPath_DIJ(MGraph * G)
(1)将导游图看作一张带权无向图,顶点表示公园的各个景点,边表示各景点之间的道路,
边上的权值表示距离.为此图选择适当的数据结构。
(2)把各种路径都显示给游客,由游客自己选择浏览路线。
(3)画出景点分布图于屏幕上。
[实现提示]
(1)构造一个无向图G并用邻接矩阵来存储。
(2)利用迪杰斯特拉算法来计算出起点到各个顶点之间的最短路径用二维数组p[i][]来记录,
if(D[v]<INFINITY)
{p[v][v0]=1;p[v][v]=1;} //v0到v有边相连,修改p[v][v0]的值为1
}//各顶点自己到自己要连通
D[v0]=0; //自己到自己的权值设为0
final[v0]=1; //v0的访问标志设为1,v属于s集
for(i=1;i<G->vexnum;i++) //对其余g.vexnum-1个顶点w,依次求v到w的最短路径
}
for(v=0;v<G->vexnum;v++)
{
final[v]=0;//初始化各顶点访问标志
D[v]=G->arcs[v0][v].adj; //v0到各顶点v的权值赋值给d[v]
for(w=0;w<G->vexnum;w++) //初始化p[][]数组,各顶点间的路径全部设置为空路径0

数据结构课程设计——校园导游图

数据结构课程设计——校园导游图

景德镇陶瓷学院信息工程学院班级:11计科(2)班学号:*************名:**指导老师:李娟、徐星时间:2013年6月27号题目:13*:图(校园导游图)7 :建立二叉树,层序、先序遍历14 :拓扑排序题目一:图(校园导游图)1.1、需求分析:需求:(1)将导游图看作一张带权无向图,顶点表示公园的各个景点,边表示各景点之间的道路,边上的权值表示距离。

为此图选择适当的数据结构。

(2)把各种路径都显示给游客,由游客自己选择游览路线。

(3)画出景点分布图于屏幕上。

分析:完成对整个导游图系统的功能实现,需要对的每一项功能都有清楚的设想和认识,了解并明确每一项功能的实现需要解决的问题,选择正确并且高效的算法把问题逐个解决,最终实现程序的正确调试运行。

有以下设计思路:(1).结合本校的实际情况,选出10个景点;(2).人为手工为选出的10个景点赋上相关信息(名称、代号、简介信息、以及路权等等);(3).根据选出来的10个景点用邻接矩阵存储校园图。

(4).依照景点的相关信息创建校园图。

(5).把纸质上的内容,利用C++编程语言编写查找景点相关信息的程序。

(6).根据人为赋值的路权,迪杰斯特拉算法计算任意两点之间的最短路径。

(7).综上所诉,用一个主函数把这些板块合成,生产一个菜单界面呈现在用户面前。

1.2、设计与实现:选出本校10个景点结合景德镇陶瓷学院实际情况,我选出以下10个景点,从1到10编号:图的初始化由于邻接矩阵特殊的存储方式,它非常便于快速的查找两个顶点之间的边上的权值。

所以,图采用带权的邻接矩阵存储。

决定了图的存储方式后,以华南农业大学10个景点的游览地图作为蓝本,把校园地图抽象化成顶点与边构成的图形式,如图2.2所示,途中数字代表线的权值。

1.3、模块的划分含有四个模块:(1)陶院地图信息(2)陶院景点信息(3)查找两点间最短路径(4)退出模板功能(1)将陶院的地图显示在程序运用上;(2)输入一个景点,运用程序上能够显示该景点的信息;(3)可以给游客提供两个景点的最短路径;(4)给游客提供方便。

数据结构课程设计-校园导航

数据结构课程设计-校园导航

课程设计报告课程名称数据结构课程设计题目校园导航指导教师设计起始日期学院计算机学院系别计算机科学与工程学生姓名班级/学号成绩一、需求分析本次实验设计的任务是实现一个简易的北京信息科技大学的校园导航平面图。

设计要包括下列要求:设计你的学校的平面图,至少包括10个以上的场所,每两个场所间可以有不同的路,且路长也可能不同,找出从任意场所到达另一场所的最佳路径(最短路径)。

本课题实现校园多个场所(至少10个)的最短路径求解。

(1)输入的形式和输入值的范围:本系统主要数据类型为字符型char及整形int,char型主要包括单位编号,单位名称,单位简介,功能编号;输入功能编号与单位编号进行操作。

(2 ) 输出的形式:输出则通过已有的信息数据,通过相关的操作输出相应信息。

(3) 程序所能达到的功能:本程序可供任何人使用,主要功能 1.浏览各单位及简介;2.查看所有游览路线;3.选择出发点和目的地求出最佳路径;4.查看某一单位信息。

(4)测试数据:包括正确的输入及其输出结果和含有错误的输入及其输出结果。

a.首先看到的是校园导航系统的菜单:b.查看浏览路线等待输入起始景点:C.选择出发点与目的地等待输入起始景点与目的地编号:d.参看景点信息等待输入景点编号:二、概要设计本系统包含一个文件。

设计分有菜单,显示信息,弗洛伊德算法,迪杰斯特拉算法,查找景点信息等程序段。

主程序为整系统的入口处,菜单主要实现显示系统功能,显示信息主要实现显示景点信息,弗洛伊德算法主要实现求两景点之间最短路径,迪杰斯特拉算法实现求两景点之间最短路径,查找景点信息主要实现显示某一景点信息。

系统首先通过主程序调用void main( );进入系统主菜单函数,根据用户的选择可分别进入:1.浏览各景点及简介;2.查看所有游览路线;3.选择出发点和目的地求出最佳路径;4.查看景点信息;5.退出系统。

选择“浏览各景点及简介”项,显示十个景点的有关信息,包括景点编号,景点名称,景点简介。

数据结构课程设计--校园导航图

数据结构课程设计--校园导航图
extern void Dispath(int dist[],int path[],int s[],int v,int i);
extern void Ppath(int path[],int i,int v);
void Point(MGraph p)
{
int x,y;
printf("请输入您所在的位置及目的地\n");
{8,32767,32767,8,32767,32767,6,32767,32767}};
p.n=M;p.e=N;
int i,j;
for(i=1;i<=M;i++)
for(j=1;j<=M;j++)
p.edges[i][j]=a[i][j];
for(i=1;i<=M;i++)
p.vexs[i].no=i;
typedef struct mgraph
{ int edges[MAXV][MAXV];
int n,e;//元素总个数边数
VertexType vexs[MAXV];
}MGraph;
extern void Check();
extern void Order(MGraph);
extern void Point(MGraph);
extern void Out(int x);
void Order(MGraph p)
{
int a[M+1][M+1];
a[M+1][M+1]={{0,1,2,3,4,5,6,7,8},
{1,0,5,32767,32767,32767,32767,32767,32767},
{2,5,0,10,8,32767,32767,32767,32767},

(完整word版)数据结构课程设计校园导游咨询

(完整word版)数据结构课程设计校园导游咨询

9、校园导游咨询问题描述:设计一个校园导游程序,为来访的客人提供各种信息查询服务。

基本要求:⑴设计华东交通大学的校园平面图,所含景点不少于10个。

以图中顶点表示校内各景点,⑵存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。

⑶为来访客人提供图中任意景点相关信息的查询。

⑷为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。

#include <stdio.h>#define MAXV 100 //最大顶点个数#define INF 32767 //用32767表示∞#include <stdlib.h> //调用函数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| 。

校园导游图

校园导游图

《数据结构》课程设计报告设计题目校园导游图学院名称信息工程学院专业班级计算机科学与技术(2)班姓名晁勉学号 1212210226一. 题目:校园导游图二. 设计目标通过设计一个校园导游图,进一步理解数据结构中有关于图的基本概念、定义术语、存储结构等,理解图在描述现实问题中的能力,明白数据结构在程序设计中的重要性等。

三. 问题描述给出学校的导游图(景点不少于10个),游客通过终端询问可知:任一景点的相关信息:从某一景点到另一景点的最短简单路径;游戏从校园大门进入,选一条最佳路线,使游客可以不重复地游览个景点,最后回到出口(出口就在入口旁边)。

四. 需求分析需求:(1)将导游图看作一张带权无向图,图中顶点表示主要景点,存放景点的编号、名称、简介等信息;(2)可以通过菜单提示操作,浏览校园全部景点;(3)查看所有游览路线,将某个景点的所有路线展示给游客;(4)选择出发点和目的地,将最短路线展示给游客;(5)输入景点编号,查看某个景点的信息。

分析:完成对整个校园导游图系统的功能实现,需要对的每一项功能都有清楚的设想和认识,了解并明确每一项功能的实现需要解决的问题,选择正确并且高效的算法把问题逐个解决,最终实现程序的正确调试运行。

有以下设计思路:(1)结合本校的实际情况,选出10个景点;(2)为选出的10个景点赋上相关信息(景点编号、名称、简介);(3)根据选出来的10个景点用邻接矩阵存储校园图。

(4)利用C语言和数据结构编写实现校园导游图系统各功能的实现;(5)根据人为赋值的路权,设计算法计算任意两点之间的最短路径并显示;(6) 综上所诉,用一个主函数把这些板块合成,生产一个菜单界面呈现在用户面前。

五. 概要设计程序由哪些模块组成以及模块之间的层次结构、各模块的调用关系;每个模块的功能。

课题涉及的数据结构和数据库结构;即要存储什么数据,这些数据是什么样的结构,它们之间有什么关系等。

六. 详细设计采用C语言定义相关的数据类型写出各模块的类C码算法图的定义typedefstructArCell{intadj; //路径长度}ArCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];typedefstruct //图中顶点表示主要景点,存放景点的编号、名称、简介等信息,初始化图形MGraph * CreatUDN(MGraph *G)//接受用户输入{inti,j,k,w;char v1[20],v2[20];printf("请输入图的顶点数,弧数:");scanf("%d%d",&G->vexnum,&G->arcnum);printf("请输入景点的编号、名称、简介:\n");for(i=0;i<G->vexnum;i++){printf("景点编号:");scanf("%d",&G->vexs->num);printf("景点名称:");scanf("%s",G->vexs[i].name);printf("景点简介:");scanf("%s",G->vexs->introduction);}for(i=0;i<G->vexnum;i++)for(j=0;j<G->vexnum;j++)G->arcs[i][j].adj=INFINITY;printf("请输入路径长度:\n");for(k=0;k<G->arcnum;k++){printf("第%d条边:\n",k+1);printf("景点对(x,y):");scanf("%s",v1);scanf("%s",v2);printf("路径长度:");scanf("%d",&w);i=LocateVex(G,v1);j=LocateVex(G,v2);if(i>=0&&j>=0){G->arcs[i][j].adj=w;G->arcs[j][i]=G->arcs[i][j];}}return G;}主菜单void main(){printf("\n 榆林学院导游图 \n");printf("********************************************\n");printf(" * 1.浏览校园全景 *\n");printf(" * 2.查看所有游览路线 *\n");printf(" * 3.选择出发点和目的地 *\n");printf(" * 4.查看景点信息 *\n");printf(" * 5.退出系统 *\n");printf(" ********************************************\n");printf("请选择您所需要的操作:");}画出主要函数的流程图七.测试分析白盒:查看代码完整性代码完整。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

景德镇陶瓷学院信息工程学院班级:12计科(2)班学号:201210510216姓名:乐升平指导老师:林卫中时间:2014年6月18号题目:校园导游图校园导游图1.1、需求分析:需求:(1)将导游图看作一张带权无向图,顶点表示公园的各个景点,边表示各景点之间的道路,边上的权值表示距离。

为此图选择适当的数据结构。

(2)把各种路径都显示给游客,由游客自己选择游览路线。

(3)画出景点分布图于屏幕上。

分析:完成对整个导游图系统的功能实现,需要对的每一项功能都有清楚的设想和认识,了解并明确每一项功能的实现需要解决的问题,选择正确并且高效的算法把问题逐个解决,最终实现程序的正确调试运行。

有以下设计思路:(1).结合本校的实际情况,选出10个景点;(2).人为手工为选出的10个景点赋上相关信息(名称、代号、简介信息、以及路权等等);(3).根据选出来的10个景点用邻接矩阵存储校园图。

(4).依照景点的相关信息创建校园图。

(5).把纸质上的内容,利用C++编程语言编写查找景点相关信息的程序。

(6).根据人为赋值的路权,迪杰斯特拉算法计算任意两点之间的最短路径。

(7).综上所诉,用一个主函数把这些板块合成,生产一个菜单界面呈现在用户面前。

1.2、设计与实现:选出本校10个景点结合景德镇陶瓷学院实际情况,我选出以下10个景点,从1到10编号: 编号 名称 编号 名称 编号 名称 编号 名称 1 研究生楼 2 二食堂 3 10#宿舍 4 主教学楼 5 毕业礼堂 6 主阶 7 一食堂 8 A 系列楼 9B 系列楼10图书馆11科艺楼12科阶13 篮球场 14 田径场 15 游泳池 16 体育馆17 翠湖 18 校门口 图的初始化由于邻接矩阵特殊的存储方式,它非常便于快速的查找两个顶点之间的边上的权值。

所以,图采用带权的邻接矩阵存储。

决定了图的存储方式后,以华南农业大学18个景点的游览地图作为蓝本,把校园地图抽象化成顶点与边构成的图形式,如图所示研究生楼 二食堂 10主教学楼 毕业礼堂主阶 一食堂A 系列楼B 系列楼 图书馆 科艺楼 科阶篮球场田径场研究生楼 10#宿舍 A 系列楼 篮球场 毕业礼堂主教学楼 科艺楼一食堂 二食堂主阶B 系列楼 图书馆 科阶 田径场游泳池体育馆 翠湖校门口1.3、模块的划分含有四个模块:(1)陶院地图信息 (2)陶院景点信息 (3)查找两点间最短路径 (4)退出 模板功能(1)将陶院的地图显示在程序运用上;(2)输入一个景点,运用程序上能够显示该景点的信息; (3)可以给游客提供两个景点的最短路径; (4)给游客提供方便。

#define N 18#define MAX 25 #define MAXedg 50 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <conio.h>void clrscr() { system("cls"); }typedef int AdjMatrix[MAX][MAX];体育馆 游泳池 翠湖 校门口typedef struct{int vexs[MAX];AdjMatrix arcs;}Matrix_Graph;typedef struct{char name[18];char information[1010];struct edgenode *link;}vexnode;typedef struct edgenode{int adjvex;int length;char info[18];char info2[1010];struct edgenode *next;}edgenode, *Node ;typedef struct Edge{int lengh;int ivex, jvex;struct Edge *next;} EdgeType;typedef struct{int num;char name[18];} vertex;typedef struct{vertex vexs[MAX];int edges[MAX][MAX]; }adjmax;void Name(int i)switch(i){case 1:printf("1:研究生楼\n\n");break;case 2:printf("2:二食堂\n\n");break;case 3:printf("3:10#宿舍\n\n");break;case 4:printf("4:主教学楼\n\n");break;case 5:printf("5:毕业礼堂\n\n");break;case 6:printf("6:主阶\n\n");break;case 7:printf("7:一食堂\n\n");break;case 8:printf("8:A系列楼\n\n");break;case 9:printf("9:B系列楼\n\n");break;case 10:printf("10:图书馆\n\n");break;case 11:printf("11:科艺楼\n\n");break;case 12:printf("12:科阶\n\n");break;case 13:printf("13:篮球场\n\n");break;case 14:printf("14:田径场\n\n");break;case 15:printf("15:游泳池\n\n");break;case 16:printf("16:体育馆\n\n");break;case 17:printf("17:翠湖\n\n");break;case 18:printf("18:校门口\n\n");break;default:printf("景点编号输入错误!请输入1-18的数字编号!\n\n"); break;}}void Information(int i)/*景点介绍*/{switch(i){case 1:printf("研究生楼:研究生的居住地及学习处。

\n\n");break;case 2:printf("二食堂:大部分学生的用餐地,深受大家喜爱。

\n\n");break;case 3:printf("10#宿舍:男宿舍楼,地理位置优越。

其余宿舍楼介绍略。

\n\n");break;case 4:printf("主教学楼:全校学生的上课之地。

\n\n");break;case 5:printf("毕业礼堂:毕业生的毕业典礼举办之地。

\n\n");break;case 6:printf("主阶:某些讲座场所以及考试场所。

\n\n");break;case 7:printf("一食堂:价格便宜,味道比二食堂稍重。

\n\n");break;case 8:printf("A系列楼:部分分院的实验室及上机之地(如:机电学院)。

\n\n");break;case 9:printf("B系列楼:部分分院的实验室及上机之地(如:信息学院)。

\n\n\n");break;case 10:printf("图书馆:学生的阅读、看书之地,其包含自习室,报刊阅览室、社科阅览室,美术阅览室等。

\n\n");break;case 11:printf("科艺楼:艺术生的天地。

\n\n\n");break;case 12:printf("科阶:大型活动及讲座的场所(尤其是科阶01)。

\n\n\n");break;case 13:printf("篮球场:顾名思义,打篮球的地方。

\n\n\n");break;case 14:printf("田径场:学生的运动之地,也是运动会场所。

含400米跑道,跑道内部是草坪,也是足球场。

\n\n\n");break;case 15:printf("游泳池:每年的差不多6、7月份开放,水质量优越,温度适宜。

\n\n\n");break;case 16:printf("体育馆:含篮球场,健身房,是下雨天的良好运动场所。

\n\n\n");break;case 17:printf("翠湖:陶院的一道亮丽风景线,是情侣之间约会、散步的首选场所。

\n\n\n");break;case 18:printf("校门口:宏伟壮观,秩序井然。

\n\n\n");break;default:printf("景点编号输入错误!请输入1->18的数字编号!\n\n"); break;}}void travgraph(vexnode g[],int n,adjmax adj) //查找指定景点信息{int i = 1,flag = 1,len;char ch;printf("\t请输入您要查询的景点序号: \n\n");printf("\t1.研究生楼 2.二食堂 3.10#宿舍 4.主教学楼 5.毕业礼堂 6.主阶\n\n");printf("\t7.一食堂8.A系列楼9.B系列楼10.图书馆11.科艺楼12.科阶\n\n");printf("\t13.篮球场14.田径场15.游泳池16.体育馆17.翠湖18.校门口\n\n");printf("你的选择是");scanf("%d",&len);getchar();printf("此景点的名称是:");Name(len);printf("此景点的介绍是:");Information(len);do{printf("\t\t是否继续? Y/N \n\n");printf("\t\t你的选择是:");scanf("%c",&ch);getchar();if(ch == 'Y' || ch == 'y'){clrscr();flag = 1;i = 1;printf("\t\t\t请再次输入您要查询的景点序号:\n\n");printf("\t1.研究生楼 2.二食堂 3.10#宿舍 4.主教学楼 5.毕业礼堂 6.主阶\n\n");printf("\t7.一食堂8.A系列楼9.B系列楼10.图书馆11.科艺楼12.科阶\n\n");printf("\t13.篮球场14.田径场15.游泳池16.体育馆17.翠湖18.校门口\n\n");printf("你的选择是");scanf("%d",&len);getchar();printf("此景点的名称是:");Name(len);printf("此景点的介绍是:");Information(len);continue ;}else{ flag = 0;printf("\t\t请再次按回车键或者任意键加回车键返回至主菜单");}break;}while(1);}void creat(Matrix_Graph *G){int i,j;for(i=1;i<=N;i++) G->vexs[i]=i;for(i=1;i<=N;i++)for(j=1;j<=N;j++) G->arcs[i][j]=0;G->arcs[1][2]=600; G->arcs[1][3]=700; G->arcs[1][4]=50; G->arcs[1][5]=650;G->arcs[2][1]=600; G->arcs[2][3]=100; G->arcs[2][4]=650;G->arcs[2][5]=50;G->arcs[3][1]=700; G->arcs[3][4]=750; G->arcs[3][5]=50;G->arcs[4][1]=50; G->arcs[4][5]=700; G->arcs[4][6]=50; G->arcs[4][7]=900;G->arcs[5][1]=650; G->arcs[5][6]=700; G->arcs[5][7]=150;G->arcs[6][7]=950; G->arcs[6][8]=50; G->arcs[6][9]=100;G->arcs[6][10]=200; G->arcs[6][11]=400; G->arcs[6][12]=500;G->arcs[7][8]=900; G->arcs[7][9]=850; G->arcs[7][10]=750;G->arcs[7][11]=150; G->arcs[7][12]=100;G->arcs[8][7]=900; G->arcs[8][9]=50; G->arcs[8][13]=1000;G->arcs[8][14]=1050; G->arcs[8][15]=1010; G->arcs[8][16]=1015; G->arcs[8][17]=100; G->arcs[8][18]=200;G->arcs[9][7]=50; G->arcs[9][8]=50; G->arcs[9][10]=100;G->arcs[9][17]=50; G->arcs[9][18]=150;G->arcs[18][13]=300; G->arcs[18][14]=250; G->arcs[18][15]=2000; G->arcs[18][16]=150;for(i=1;i<=N;i++)for(j=1;j<=N;j++)if(G->arcs[i][j]==0) G->arcs[i][j]=MAX;}void path(Matrix_Graph *G,int s,int e){int i,j,u,c=1,t,v;int r[N+1][N+1];int T[N],flag[N],d[N];for(i=0;i<=N;i++)for(j=0;j<=N;j++) r[i][j]=0;for(i=1;i<=N;i++){T[i]=-1;flag[i]=1;d[i]=MAX;}flag[s]=0;while(c<=N){t=MAX;for(i=1;i<=N;i++)if(flag[i]&&G->arcs[s][i]<t){t=G->arcs[s][i];v=i;r[v][1]=v;}for(i=1;i<=c;i++)for(j=1;j<=N;j++)if(flag[j]&&d[i]+G->arcs[T[i]][j]<t){t=d[i]+G->arcs[T[i]][j];v=j;if(r[v][0]!=-1){u=1;while(r[T[i]][u]!=0){r[v][u]=r[T[i]][u];u++;}}r[v][u]=v;}r[v][0]=-1;T[c]=v;flag[v]=0;d[c]=t;c++;}printf("\n最短路径是以下这条:\n(%d)",s);j=1;while(r[e][j]!=0){printf("-->(%d)",r[e][j]);j++;}printf("\n\n");}int main(){int i,j;Matrix_Graph G;creat(&G);int n = 0;vexnode g[MAX];EdgeType e[MAXedg];adjmax adj;char choice = 'x';while(1){clrscr();printf("\n\n\t\t\t ---校-园-导-游---");printf("\n\t\t--------------------------------------\n\n");printf("\t\t\t1. 陶院校园地图\n\n");printf("\t\t\t2. 陶院景点信息\n\n");printf("\t\t\t3. 查找两点间最短路径\n\n");printf("\t\t\t0. 退出\n\n");printf("\n\t\t--------------------------------------\n\n");printf("\t\t景德镇陶瓷学院校训:崇德尚学陶冶成器\n");printf("\n\t\t--------------------------------------\n\n");printf("\t\t请输入你的选择(0-3): ");choice = getchar();switch(choice){case '1':clrscr();printf("\t\t 陶院地图\n\n");printf("\n");printf(" 1.研究生楼* * * * * * 2.二食堂* * * * *3.10#宿舍楼\n");printf(" * * * *\n");printf(" * * * *\n");printf(" * * * *\n");printf(" * * * *\n");printf(" 4.主教学楼* * * * * * * * * * ** 5.毕业礼堂\n");printf(" * * *\n");printf(" * * *\n");printf(" * * *\n");printf(" * *\n");printf(" 6.主阶* * * * * * * * * * * * * * * * 7.一食堂\n");printf(" * * * * *\n");printf(" * * * * * \n");printf(" * * * * * *\n");printf(" * * * * * *\n");printf(" * * * * *\n");printf(" * * * *\n");printf(" 8.A系列楼9.B系列楼10.图书馆11.科艺楼12.科阶\n");printf(" * * * * *\n");printf(" * * * * * * * * * * * * * * * * * 13.篮球场\n");printf(" * * * * * *\n");printf(" * * * * * * * * * * * * * * * * * 14.田径场\n");printf(" * * * * * * * * \n");printf(" * * * * * * * 15.游泳池\n");printf(" * * * * * * * * *\n");printf(" * * * * * * 16.体育馆\n");printf(" * * * * **\n");printf(" * 17.翠湖* \n");printf(" * * *\n");printf(" * 18.校门口*\n");printf(" (入口)&(出口)\n");printf("\t\t输入任意键返回菜单");getchar();getchar();break;case '2':clrscr();travgraph(g,n,adj);getchar();break;case '3':clrscr();printf("\t\t 陶院地图\n\n");printf("\n");printf(" 1.研究生楼* * * * * * 2.二食堂* * * * *3.10#宿舍楼\n");printf(" * * * *\n");printf(" * * * *\n");printf(" * * * *\n");printf(" * * * *\n");printf(" 4.主教学楼* * * * * * * * * * * * 5.毕业礼堂\n");printf(" * * *\n");printf(" * * *\n");printf(" * * *\n");printf(" * *\n");printf(" 6.主阶* * * * * * * * * * * * * * * * 7.一食堂\n");printf(" * * * * *\n");printf(" * * * * * \n");printf(" * * * * *printf(" * * * * * *\n");printf(" * * * * *\n");printf(" * * * *\n");printf(" 8.A系列楼9.B系列楼10.图书馆11.科艺楼12.科阶\n");printf(" * * * * *\n");printf(" * * * * * * * * * * * * * * * * * 13.篮球场\n");printf(" * * * * * *\n");printf(" * * * * * * * * * * * * * * * * * 14.田径场\n");printf(" * * * * * * * * \n");printf(" * * * * * * * 15.游泳池\n");printf(" * * * * * * * * *\n");printf(" * * * * * * 16.体育馆\n");printf(" * * * * **\n");printf(" * 17.翠湖* \n");printf(" * * *\n");printf(" * 18.校门口*\n");printf(" (入口)&(出口)\n");printf("\2你现在的位置是(请输入1-18):\n\n");printf("\t1.研究生楼 2.二食堂 3.10#宿舍 4.主教学楼 5.毕业礼堂 6.主阶\n\n");printf("\t7.一食堂8.A系列楼9.B系列楼10.图书馆11.科艺楼12.科阶\n\n");printf("\t13.篮球场14.田径场15.游泳池16.体育馆17.翠湖18.校门口\n\n");printf("\t你的输入是:");scanf("%d",&i);getchar();printf("\2你想要去的地方是(请输入1-18):\n\n");printf("\t1.研究生楼 2.二食堂 3.10#宿舍 4.主教学楼 5.毕业礼堂 6.主阶printf("\t7.一食堂8.A系列楼9.B系列楼10.图书馆11.科艺楼12.科阶\n\n");printf("\t13.篮球场14.田径场15.游泳池16.体育馆17.翠湖18.校门口\n\n");printf("\t你的输入是:");scanf("%d",&j);getchar();path(&G,i,j);getchar();creat(&G);do{printf("是否继续查询Y/N");char ch;int flag=1;scanf("%c",&ch);getchar();if(ch == 'Y' || ch == 'y'){flag = 1;i = 1;printf("\2你现在的位置是(请输入1-18):\n\n");scanf("%d",&i);getchar();printf("\2你想要去的地方是(请输入1-18):\n\n");scanf("%d",&j);getchar();path(&G,i,j);getchar();creat(&G);continue ;}elseflag = 0;break;}while(1);break;case '0':clrscr();printf("\n\t\t--------按任意键退出!--------\n\n");printf("\n\t\t--------谢谢您的使用!--------\n");getchar();exit(0);break;default:printf("\n输入错误,请重新输入0-3之间的数字:\n");getchar();break;}}getchar();}。

相关文档
最新文档