数据结构课程设计—校园导航报告
- 格式:doc
- 大小:159.50 KB
- 文档页数:17
数据结构与算法分析课程设计报告设计题目:校园导航咨询系统专业学号姓名2013 年3 月3 日一、问题描述设计你的学校的平面图,至少包括10个以上的场所,每两个场所间可以有不同的路,且路长也可能不同,找出从任意场所到达另一场所的最佳路径(最短路径)(参考课本P186-P192)。
二、需求分析本程序分为五个模块,分别是显示校园全景、查询景点信息、问路查询系统、查看游览路线和退出系统。
(1)显示校园全景展示校园概貌图和各景点编号、名称。
(2)查询景点信息输入要查询的景点编号,显示景点的编号、名称和景点的简单介绍。
(3)问路查询系统输入要参观的两个景点的编号(按从大到小输入),显示两个景点间的最短路径游览方式和最短路径长。
(4)查看游览路线查询某个景点到其他景点的所有路径,并显示其长度。
(5)退出系统查询完毕关闭窗口,显示退出系统的界面三、概要设计1、主要函数:void main() 主函数,程序入口csinfo() 初始化景点信息csroad() 初始化道路信息showpath() 显示校园全景search() 查询景点信息floyd() 弗洛伊德函数,查询两个景点之间的最短路径所要经过的中间节点print(int i,int j) 打印两个景点的路径及最短距离shortpath() 问路查询,求最短路径ShortestPath_DIJ(Maph * M) 利用Dijkstra算法来计算出起点到各个顶点之间的最短路径,以v0为起点menu() 显示菜单选项2、主要变量:ps[MaxPointNum] 定义主要景点信息,存放景点的编号、名称、简要介绍等信息char name[20] 景点名称char number[15] 景点编号char info[100] 景点简介信息MaxPointNum 最大景点个数INFINITY 近似无穷大,表示两景点不可达Maph M 全局变量,定义M为Maph类型int shortest[MaxPointNum][MaxPointNum] 定义全局变量存贮最短路径int path[MaxPointNum][MaxPointNum] 定义存贮路径3、存储结构:3.1 图的类型定义typedef struct{char name[20]; //景点名称char number[15]; //景点代号char info[100]; //景点信息}Elemtype; //景点类型3.2 定义景点typedef struct{int num; //顶点编号Elemtype data; //顶点信息}Point; //定义顶点3.3定义全局变量typedef struct{Point ps[MaxPointNum]; //存放顶点的一维数组int road[MaxPointNum][MaxPointNum];//存放路径的长度(邻接矩阵)int poinum,arcnum; //顶点数,边数}Maph;4、求解算法:迪杰斯特拉算法求解无向图的最短路径四、详细设计详细参见C语言源程序1.调试分析运行程序进行调试:1.进入主界面,出现校园导航咨询系统主菜单。
数据结构课程设计报告题目:校园导航系统学生姓名:谌幼华学号: 09110806班级:091108指导教师:邹国华2011 年6 月3 日目录一、需求分析说明 (3)二、总体设计 (3)三、详细设计 (5)四、实现部分 (8)五、程序测试 (13)六、总结 (15)七、参考文献 (15)校园导航系统一、需求分析说明:(一)课程设计目的:本课程设计的目的就是要达到理论与实际应用相结合,使我们能够根据数据对象的特性,学会数据组织的方法,能把现实世界中的实际问题在计算机内部表示出来,并培养基本的、良好的程序设计技能。
(二)设计要求:设计一个校园导航系统,为来访的客人提供导航服务,具体要求:1. 设计学校的平面图,至少包括10个以上的场所,每两个场所间可以有不同的路,且路长也可能不同,找出从任意场所到达另一场所的最佳路径(最短路径)。
2. 为来访客人提供图中任意景点相关信息的查询。
3. 提供途中任意景点问路查询,即求任意两个景点间的一条最短的简单路径以及任意景点到其他所有景点的最短路径查询。
4.列出所有校内无重复排列的景点,将所有景点的距离以邻接矩阵的方式呈现给使用者,提供使用者选择功能界面,按照提示进行操作。
5.在邻接矩阵中MAX表示最大距离即两个景点之间是不可到达的。
用实际权值来表示两个景点之间的距离,并且是可达的。
二、总体设计:1.数据结构:用图(无向网)来描述学校n个景点之间的关系,顶点为单位代号,权值为两景点的距离。
本系统基于东华理工大学校园平面图为基准而设计,先将校园内15个具有代表性的顶点列出,然后绘制出其平面图,标出任意两顶点间是否有直达的边,同时在图上有直达边的两顶点边的权值,本系统中设计的东华理工大学校园平面图如下(景点前面所对应的代号为系统中无向网的顶点号):东华理工大学学校平面图2.系统功能图:三、详细设计:一、按所设想的功能,把程序化分为7个模块,各模块的名称和其数据类型如下表所示:各模块的说明如下:1.类模块:本系统中只涉及了一个Graph(无向网类)类,其数据成员为无向网的相关信息,例如图的邻接矩阵(程序中用数组arcs[n+1][n+1]存放有关邻接矩阵的相关信息)、原点到各定点的相关信息(存放在dist[n+1数组中])、最短路径上该顶点的前一顶点相关信息(存放在path[n+1]数组中)、以求得到的最短路径上的顶点的顶点号(存放在s[n+1]数组中),同时将求最小路径的实现函shortest_path()定义为其成员函数。
《校园导航系统》课程设计报告姓名:蒋小文学号:110236100123 班级:1班专业:网络工程指导教师:唐轶媛蒋荣萍时间:2012年7月5日信息科学与工程学院目录摘要 (1)1.目的 (2)2.要求 (2)3.题目 (2)4.任务 (2)1).需求分析 (3)2).概要设计 (4)3).详细设计 (5)4).调试分析 (8)5.课设总结 (18)6.附录源代码 (19)1.目的数据结构是计算机专业的核心课程,是一门实践性很强的课程。
课程设计是加强学生实践能力的一个强有力手段,要求学生掌握数据结构的应用、算法的编写、类C语言的算法转换成C (C++)程序并上机调试的基本方法,还要求学生在完成程序设计的同时能够写出比较规范的设计报告。
2.要求2.1 课程设计时间为2周;2.2 设计语言C(C++)不限;2.3 课余时间完成源程序和课程设计报告等文档书写工作,上机时间只能做调试工作。
上机时带上源程序、数据结构教材、C语言教材。
2.4 上机任务(1)选择并定义合适的数据结构;(2)根据程序所要完成的基本要求,设计出完整的算法;(3)设计出主程序(main函数),使其成为完整的程序。
2.5 上机时间:上午8:30--11:30,下午3:00--5:303.题目题目:校园导航系统设计一个校园导游程序,后台操作:3.1、操作员信息管理如修改密码等3.2、能根据学校的规模进行添加景点信息、修改景点信息等功能,3.3、若临时有交通管制,能进行交通管制的设置和撤销(如某某时间段那条路进行那个方向的交通管制等)3.4、前台为来访的客人提供各种信息查询服务:3.4.1、设计学校的校园平面图,所含景点不少于10个。
以图中顶点表示校内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。
3.4.2、为来访客人提供图中任意景点相关信息的查询。
3.4.3、提供途中任意景点问路查询,即求任意两个景点间的一条最短的简单路径。
南京工程学院课程设计说明书(论文)题目校园导航系统课程名称数据结构院系通信工程学院专业信息工程班级学生姓名学号设计地点指导教师设计起止时间:2008 年12月29 日至年月日目录1.课程设计题目 (1)2.软件功能描述 (1)3.软件总体设计 (1)3.1数据结构描述与定义 (1)3.2模块设计 (3)4.测试结果与分析 (4)5.课程设计总结 (5)附录:源程序清单 (6)1.课程设计题目校园导航系统2.软件功能描述在近一个星期的努力下,我编写的校园导航系统软件终于能够成功完成。
采用工程思想,将系统共分一下几个模块:数据结构定义模块、导航图建立模块、求最短路径模块、主菜单;下面是具体各功能简单的实际应用:➢数据结构定义模块:模块定义了导航图中各个节点的基本结构类型,主要采用邻接矩阵的存储结构来真实反映各节点到其他所有节点的路径长度(权值大小)。
➢导航图建立模块:采用上述结构体类型对导航图中每个节点进行赋值。
包括:各定点的名称(地点名),各个节点到其他所有节点的真实路径长度(赋权值)。
➢求最短路径模块:本模块的基本思想是采用迪杰斯特拉算法求最短路径。
次模块是本校园导航系统的核心模块,求两点间的最短路径与求一点到其他所有点最短路径两个子功能均是在最短路径算法模块的基础上进行调用,进而实现导航功能。
➢主菜单:主菜单中主要是显示导航图中的所有导航节点,能够快速方便的对各个地点进行导航。
以上程序的几个模块,构成了校园导航系统的基本组成部分,程序运行良好,达到了课程设计的基本要求。
由于所学知识有限,功能各个方面还有欠妥之处,希望得到指出与改正。
3.软件总体设计3.1数据结构描述与定义1.节点数据结构类型:#define MAX_V 30 //最大顶点个数typedef struct{char* vexs[MAX_V]; //顶点向量int arcs[MAX_V][MAX_V];//邻接矩阵int vexnum,arcnum;//图的当前顶点数和弧数}MGraph;2.创建导航图函数:int CreateUDN(MGraph &G)函数描述:主要将每个节点进行命名、每个顶点到其他所有定点的路径值用邻接矩阵进行存储。
课程设计报告学院、系:大学学院计算机科学与技术系专业:软件工程班级:2008级9班课程设计科目数据结构学生:04080904 喆指导教师:娄雅芳完成时间:2010年10月-12月校园导航系统设计报告一、设计任务与目标设计要求:设计你的学校的平面图,至少包括10个以上的场所,每两个场所间可以有不同的路,且路长也可能不同,找出从任意场所到达另一场所的最佳路径(最短路径)。
本系统是一个涉及大学学院相关景点和场所查询系统,是为了方便人们能够更快更准地获得学校各个景点和场所的详细信息。
本系统为用户提供以下功能:(一)、查询了解学校概况,为导游参观者提供关于学校的相关信息。
(二)、查询校园各个场所和景点信息;(三)、为导游者或外来人员参观人员提供校园交通信息,方便用户走访学校。
校园导航查询系统的开发方法总结如下:(1) 调查,了解学校各个场所与场所或者是各个景点与景点之间的信息,路径和距离,从外来人员或者参观者和走访者的角度出发,该如何设计才能满足用户需求。
(2) 分析,对调查得到的数据进行分析,根据其要求实现的功能分析系统结构和界面将实现的基本功能。
(3) 设计与开发,设计系统界面并编辑实现其各个功能的代码。
(4) 调试,在设计完成后,调试系统运行的状况,修改完善系统,然后进行测试。
二、方案设计与论证校园旅游模型是由各个景点和景点以及场所和场所之间的路径组成的,所以这完全可以用数据结构中的图来模拟。
用图的结点代表景点或场所,用图的边代表景点或场所之间的路径。
所以首先应创建图的存储结构。
结点值代表景点信息,边的权值代表景点间的距离。
结点值及边的权值采用图存储。
本系统需要查询景点信息和求一个景点到另一个景点的最短路径长度及路线,为方便操作,所以给每个景点一个代码,用结构体类型实现。
计算路径长度,最短路线和最佳路径时可分别用迪杰斯特拉(Dijkastra)算法和哈密而顿回路算法实现。
最后用switch选择语句选择执行浏览景点信息或查询最短路径和距离。
课程设计报告课程名称数据结构课程设计题目校园导航指导教师设计起始日期学院计算机学院系别计算机科学与工程学生姓名班级/学号成绩一、需求分析本次实验设计的任务是实现一个简易的北京信息科技大学的校园导航平面图。
设计要包括下列要求:设计你的学校的平面图,至少包括10个以上的场所,每两个场所间可以有不同的路,且路长也可能不同,找出从任意场所到达另一场所的最佳路径(最短路径)。
本课题实现校园多个场所(至少10个)的最短路径求解。
(1)输入的形式和输入值的范围:本系统主要数据类型为字符型char及整形int,char型主要包括单位编号,单位名称,单位简介,功能编号;输入功能编号与单位编号进行操作。
(2 ) 输出的形式:输出则通过已有的信息数据,通过相关的操作输出相应信息。
(3) 程序所能达到的功能:本程序可供任何人使用,主要功能 1.浏览各单位及简介;2.查看所有游览路线;3.选择出发点和目的地求出最佳路径;4.查看某一单位信息。
(4)测试数据:包括正确的输入及其输出结果和含有错误的输入及其输出结果。
a.首先看到的是校园导航系统的菜单:b.查看浏览路线等待输入起始景点:C.选择出发点与目的地等待输入起始景点与目的地编号:d.参看景点信息等待输入景点编号:二、概要设计本系统包含一个文件。
设计分有菜单,显示信息,弗洛伊德算法,迪杰斯特拉算法,查找景点信息等程序段。
主程序为整系统的入口处,菜单主要实现显示系统功能,显示信息主要实现显示景点信息,弗洛伊德算法主要实现求两景点之间最短路径,迪杰斯特拉算法实现求两景点之间最短路径,查找景点信息主要实现显示某一景点信息。
系统首先通过主程序调用void main( );进入系统主菜单函数,根据用户的选择可分别进入:1.浏览各景点及简介;2.查看所有游览路线;3.选择出发点和目的地求出最佳路径;4.查看景点信息;5.退出系统。
选择“浏览各景点及简介”项,显示十个景点的有关信息,包括景点编号,景点名称,景点简介。
课程设计(数据结构)院、系计算机与软件学院专业网络工程姓名顾容宇徐鹏学号20091346087、20091346088 指导教师郑玉二O一O年十二月二十五日校园导航问题王耀南京信息工程大学计算机与软件学院,南京 210044摘要:程序设计目的是用哈斯图方式计算两个旅游点的最短距离以及路线。
编程所实现的功能除了可以查询两个旅游点的最短距离以及最短的路线,还可以看到旅游点的介绍,以及逛遍所有旅游点所能组成的所有路线可能,实现全面查询。
关键字:景点;路线;距离;校园导航1.课程设计题目设计要求:设计你的学校的平面图,至少包括10个以上的场所,每两个场所间可以有不同的路,且路长也可能不同,找出从任意场所到达另一场所的最佳路径(最短路径)。
2.分析2.1设计基础:要掌握最短路径的实现方式。
2.2分析设计课题的要求,要求编程实现以下功能:(1)查询景点路径(2)查询景点信息(3)查看参观路线(4)查询各景点之间的距离2.3主控菜单设计为实现通信录管理的操作功能,首先设计一个含有多个菜单项的主控菜单程序,然后再为这些菜单项配上相应的功能。
程序运行后,给出菜单项的内容和输入提示,如下:1.学校简介2.查询景点路径3. 查询景点信息4. 查看参观路线5. 查询各景点之间的距离6. 退出2.4设计课题已明确要求,有关的定义如下:typedefstructArcCell{intadj; // 相邻接的景点之间的路程char *info;}ArcCell; // 定义边的类型typedefstructVertexType{int number; // 景点编号char *sight; // 景点名称char *description; // 景点描述}VertexType; // 定义顶点的类型typedefstruct{VertexType vex[NUM]; // 图中的顶点,即为景点ArcCell arcs[NUM][NUM]; // 图中的边,即为景点间的距离intvexnum,arcnum; // 顶点数,边数}MGraph; // 定义图的类型3.步骤3.1函数调用图函数调用关系3.2主代码#include<iostream >#include <string.h>#include <stdio.h>#include <stdlib.h>#define Max 32767#define NUM 11typedef struct ArcCell{int adj; // 相邻接的景点之间的路程char *info;}ArcCell; // 定义边的类型typedef struct VertexType{int number; // 景点编号char *sight; // 景点名称char *description; // 景点描述}VertexType; // 定义顶点的类型typedef struct{VertexType vex[NUM]; // 图中的顶点,即为景点ArcCell arcs[NUM][NUM]; // 图中的边,即为景点间的距离int vexnum,arcnum; // 顶点数,边数}MGraph; // 定义图的类型MGraph G; // 把图定义为全局变量int P[NUM][NUM]; // //long int D[NUM]; // 辅助变量存储最短路径长度int x[13]={0};void CreateUDN(int v,int a); // 创建图的函数void pingmu(); //屏幕输出函数void introduce();void ShortestPath(int num); //最短路径函数void output(int sight1,int sight2); //输出函数void PrintMGraph();char Menu(); // 主菜单void search();;// 查询景点信息char SearchMenu(); // 查询子菜单void HaMiTonian(int); // 哈密尔顿图的遍历void NextValue(int);void display(); // 显示遍历结果void main() // 主函数{ int v0,v1;char ck;system("color 0");CreateUDN(NUM,11);do{ck=Menu();switch(ck){case'1':introduce();printf("\n\n\t\t\t%-25s\n\n",G.vex[0].description); getchar();getchar();break;case '2':system("cls");pingmu();printf("\n\n\t\t\t请选择起点景点(1~10):"); scanf("%d",&v0);printf("\t\t\t请选择终点景点(1~10):");scanf("%d",&v1);ShortestPath(v0); // 计算两个景点之间的最短路径output(v0,v1); // 输出结果printf("\n\n\t\t\t\t请按回车键继续...\n");getchar();getchar();break;case '3':search();break;case '4':system("cls");pingmu();x[0]=1;HaMiTonian(1);printf("\n\n\t\t\t\t请按回车键继续...\n");getchar();getchar();break;case'5':PrintMGraph();printf("\n\n\t\t\t\t请按回车键继续...\n");getchar();getchar();break;};}while(ck!='e');}char Menu() // 主菜单 //{char c;int flag;do{flag=1;system("cls");pingmu();introduce();printf("\n\t\t\n");printf("\t\t \n");printf("\t\t 1.学校简介 \n");printf("\t\t 2.查询景点路径 \n");printf("\t\t 3.查询景点信息 \n");printf("\t\t 4.查看参观路线 \n");printf("\t\t 5.查询各景点之间的距离 \n");printf("\t\t e.退出 \n");printf("\t\t \n");printf("\t\t\n");printf("\t\t\t\t请输入您的选择:");scanf("%c",&c);if(c=='1'||c=='2'||c=='3'||c=='4'||c=='5'||c=='e') flag=0;}while(flag);return c;}char SearchMenu() // 查询子菜单{char c;int flag;do{flag=1;system("cls");pingmu();introduce();printf("\n\t\t\n");printf("\t\t \n");printf("\t\t 1、按照景点编号查询 \n");printf("\t\t 2、按照景点名称查询 \n");printf("\t\t e、返回 \n");printf("\t\t \n");printf("\t\t \n");printf("\t\t\t请输入您的选择:");scanf("%c",&c);if(c=='1'||c=='2'||c=='e')flag=0;}while(flag);return c;}void search() // 查询景点信息{int num;int i;char c;char name[20];do{system("cls");c=SearchMenu();switch (c){case '1':system("cls");introduce();pingmu();printf("\n\n\t\t请输入您要查找的景点编号:"); scanf("%d",&num);for(i=0;i<NUM;i++){if(num==G.vex[i].number){printf("\n\n\t\t\t您要查找景点信息如下:");printf("\n\n\t\t\t%-25s\n\n",G.vex[i].description); printf("\n\t\t\t按任回车返回...");getchar();break;}}if(i==NUM){printf("\n\n\t\t\t没有找到!");printf("\n\n\t\t\t按回车键返回...");getchar();getchar();}break;case '2':system("cls");pingmu();introduce();printf("\n\n\t\t请输入您要查找的景点名称:"); scanf("%s",name);for(i=1;i<NUM;i++){if(!strcmp(name,G.vex[i].sight)){printf("\n\n\t\t\t您要查找景点信息如下:");printf("\n\n\t\t\t%-25s\n\n",G.vex[i].description); printf("\n\t\t\t按回车键返回...");getchar();getchar();break;}}if(i==NUM){printf("\n\n\t\t\t没有找到!");printf("\n\n\t\t\t按回车键返回...");getchar();}break;}}while(c!='e');}void CreateUDN(int v,int a) // 创建图的函数{int i,j;G.vexnum=v; // 初始化结构中的景点数和边数G.arcnum=a;for(i=1;i<G.vexnum;++i) G.vex[i].number=i; // 初始化每一个景点的编号// 初始化没一个景点名及其景点描述G.vex[0].sight="学校简介";G.vex[1].sight="东大门";G.vex[2].sight="培训楼";G.vex[3].sight="气象楼";G.vex[4].sight="文德楼";G.vex[5].sight="明德楼";G.vex[6].sight="尚贤楼";G.vex[7].sight="电影院";G.vex[8].sight="北辰楼";G.vex[9].sight="图书馆";G.vex[10].sight="实验楼";// 这里把所有的边假定为32767,含义是这两个景点之间是不可到达for(i=1;i<G.vexnum;++i){for(j=1;j<G.vexnum;++j){G.arcs[i][j].adj=Max;G.arcs[i][j].info=NULL;}}//下边是可直接到达的景点间的距离,由于两个景点间距离是互相的,// 所以要对图中对称的边同时赋值。
课程设计报告课程名称:数据结构设计题目:校园导航问题院系:信息技术学院班级:设计者:学号:指导教师:设计时间:目录一、设计目的 0二、设计要求和设计指标 0三、设计内容 03.1需求分析 03.1.1程序所能达到的功能 03.1.2输入的形式和输入值的范围 03.1.3输出的形式 (1)3.1.4测试数据和输出结果 (1)3.2总体设计 (1)3.2.1抽象数据类型定义 (1)3.2.2主程序模块的整体流程 (2)3.2.3各模块调用关系如下 (2)3.3详细设计 (2)3.3.1有向网节点结构体类型定义 (2)3.3.2 主程序和其它主要函数伪码算法 (3)3.3.3 函数的调用关系 (10)3.4测试与分析 (10)3.4.1测试 (10)3.4.2分析 (12)四、总结 (13)五、参考文献 (13)六、附录 (13)课程设计(大作业)报告一、设计目的1.加深对《数据结构》这一课程所学内容的进一步理解与巩固2.通过完成课程设计,逐渐培养自己的编程能力;3.培养给出题目后,构建框架,用计算机解决的能力;4.通过调试程序积累调试C程序设计的经验;二、设计要求和设计指标设计你的学校的平面图,至少包括10个以上的场所,每两个场所间可以有不同的路,且路长也可能不同,找出从任意场所到达另一场所的最佳路径(最短路径)三、设计内容3.1需求分析3.1.1程序所能达到的功能(1) map——输出辽宁工程技术大学平面图。
(2) init()——按相应编号输入各个节点内容,对相应路径赋值的函数。
(3) menu()——菜单函数(4) information()——输出简介的函数(5) way()——最短路径的输出函数(6) shortestpath()——调用弗洛伊德和最短路径输出的函数(7) main()——主函数3.1.2输入的形式和输入值的范围输入数字和字母:字母:以s查询最短路径;以i查询信息;以e退出程序。
##大学数据结构课程设计报告题目:校园导航系统院(系):计算机工程学院学生姓名:班级:学号:起迄日期: 2011.6.19--6.30指导教师:指导教师评语:成绩:签名:年月日20XX—20XX年度第 2 学期一、需求分析1.问题描述:从理工大学的平面图中选取10个有代表性的景点,抽象成一个无向带权图。
以图中顶点表示景点,边上的权值表示两地之间的距离,求取任意两点间最短路径。
2.基本功能本程序主要实现的功能是为用户提供路径咨询。
根据用户指定的始点和终点输出相应路径(用到output()函数),或者根据用户指定的景点输出景点的信息(用到search()函数)。
3.输入输出本程序主要输入输出信息是景点编号和景点名称,以字符串的形式输入输出。
二、概要设计1.设计思路:本程序是校园导航系统,即求两点间的最短路径。
其主要算法是迪杰斯特拉算法,在此基础上再加上菜单函数输出函数造图函数查找函数即可。
2.数据结构设计:抽象数据类型图的定义如下:ADT Graph{数据对象V:V是具有相同特性的数据元素的集合,称为顶点集。
数据关系R:R={VR}VR={(v,w)|v,w V,(v,w)表示v和w之间存在路径}基本操作p:CreatGraph(&G,V,VR)初始条件:V是图的顶点集,VR是图中边的集合。
操作结构:按V和VR的定义构造图G。
DestroyGraph(&G)初始条件:图G存在。
操作结果:销毁图G。
LocateVex(G,u)初始条件:图G存在,u和G中顶点有相同特征。
操作结果:若G中存在顶点u,则返回该顶点在图中位置;否则返回其他信息。
GetVex(G,v)初始条件:图G存在,v是G中某个顶点。
操作结果:返回v的信息。
FirstEdge(G,v)初始条件:图G存在,v是G中某个顶点。
操作结果:返回依附于v的第一条边。
若该顶点在G中没有邻接点,则返回“空”。
NextEdge(G,v,w)初始条件:图G存在,v是G中某个顶点,w是v的邻接顶点。
安徽省巢湖学院计算机与信息工程学院课程设计报告课程名称《数据结构》课题名称校园导航系统专业计算机科学与技术班级10计本2班学号********姓名吴宗林联系方式152****6478指导教师江家宝20 11 年12 月29 日目录1、数据结构课程设计任务书 (1)1.1、题目 (1)1.2、要求 (1)2、详细设计 (1)2.1、程序中所采用的数据结构及存储结构的说明 (1)2.2、算法的设计思想 (2)3、调试与测试: (2)3.1、调试方法与步骤: (2)3.2、测试结果的分析与讨论: (2)4、时间复杂度的分析: (4)5、源程序清单和执行结果 (5)6、C程序设计总结 (9)7、致谢 (10)8、参考文献 (10)1、数据结构课程设计任务书1.1、题目校园导航问题1.2、要求设计你的学校的平面图,至少包括10个以上的场所,每两个场所间可以有不同的路,且路长也可能不同,找出从任意场所到达另一场所的最佳路径(最短路径)。
1)设计校园平面图,在校园景点选10个左右景点。
以图中顶点表示校园内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等有关信息。
2)为来访客人提供图中任意景点相关信息的查询。
3)为来访客人提供任意景点的问路查询,即查询任意两个景点之间的一条最短路径。
2、详细设计模块功能说明:如函数功能、入口及出口参数说明,函数调用关系描述等;2.1、程序中所采用的数据结构及存储结构的说明(1)图。
采用邻接矩阵存储,其中图所用到的结构体为:typedef struct{SeqList vertices; //表示图中的顶点int Edge[MaxVertices][MaxVertices]; //表示图中的边int numOfEdge; //表示图中边的数目}AdjMGraph;(2)景点。
用顺序表存储。
所用到的结构体为:typedef struct{char name[20]; //顶点名称int code; //顶点代号char introduction[50]; //顶点信息简介}DataType;(3)景点之间的连接描述,所用到的结构体为:typedef struct{int row;int col;int weight;}RowColWeight;用图来存放所提供的所有景点,然后用线性表来存放每一个景点的信息,其中包括景点的名称,代号,信息简介,以及其它的一些信息。
数据结构报告校园导航问题一、引言校园导航问题是在大型校园环境中,为了帮助学生、教职员工和访客快速准确地找到目的地而提出的。
校园导航系统需要提供用户友好的界面和高效的导航功能,以满足用户的需求。
本报告将介绍一个基于数据结构的校园导航系统的设计和实现。
二、问题描述在大型校园中,学生、教职员工和访客常常面临找不到目的地的问题。
校园导航系统的目标是提供一个方便、快捷且准确的导航服务。
该系统需要满足以下需求:1. 提供校园地图:系统需要包含校园的地图信息,包括建筑物、道路和其他地标的位置和连接关系。
2. 支持路径规划:用户可以输入起始点和目的地,系统能够计算出最短路径,并提供导航指引。
3. 支持多种交通方式:系统需要考虑不同交通方式,如步行、自行车和汽车,并根据用户选择提供相应的路径。
4. 提供实时信息:系统需要实时更新校园地图信息,包括建筑物的开放时间、道路的交通情况等。
三、设计思路为了实现校园导航系统,我们可以采用以下数据结构和算法:1. 图结构:校园地图可以表示为一个有向加权图,其中节点表示建筑物或地标,边表示道路或连接关系,边的权重表示距离或时间。
2. 最短路径算法:可以使用Dijkstra算法或A*算法计算起始点到目的地的最短路径。
3. 用户界面:可以设计一个用户友好的界面,包括输入起始点和目的地、选择交通方式等功能。
四、系统实现基于上述设计思路,我们可以实现一个校园导航系统。
系统的实现可以分为以下几个步骤:1. 数据采集:收集校园地图信息,包括建筑物和道路的位置和连接关系。
可以使用GPS定位和地图绘制工具进行数据采集。
2. 数据存储:将采集到的数据存储到数据库中,以便系统可以快速访问和处理。
3. 路径规划:根据用户输入的起始点和目的地,使用最短路径算法计算最短路径,并生成导航指引。
4. 用户界面:设计一个用户友好的界面,包括地图显示、输入框、按钮等元素,以便用户可以输入起始点和目的地,并选择交通方式。
毕业论⽂校园导航系统数据结构课程设计报告书课程设计报告书课程名称数据结构设计题⽬校园导航系统专业班级计算机11-4 班⽬录1.设计时间 (2)2.设计⽬的 (2)3.设计任务 (2)4.设计内容 (2)4.1需求分析 (2)4.2总体设计 (3)4.3详细设计 (4)4.4测试与分析 (12)4.4.1测试 (12)4.4.2分析 (13)4.5 附录 (14)5 总结与展望 (20)6.参考⽂献 (21)7.成绩评定 (21)1 设计时间2013年12⽉3⽇2 设计⽬的1.加深对《数据结构》这⼀课程所学内容的进⼀步理解与巩固2.通过完成课程设计,逐渐培养⾃⼰的编程能⼒;3.培养给出题⽬后,构建框架,⽤计算机解决的能⼒;4.通过调试程序积累调试C程序设计的经验;3设计任务给出校园各主要建筑的名称信息及有线路联通的建筑之间的距离,利⽤校园导航系统计算出给定的起点到终点之间的最近距离及线路。
4 设计内容4.1需求分析1.程序所能达到的功能:(1) map——输出⼭东科技⼤学平⾯图。
(2) init()——按相应编号输⼊各个节点内容,对相应路径赋值的函数。
(3) floyd()-- --弗洛伊德求最短路径(4) information()——输出简介的函数(5) Path()——最短路径的输出函数(6) shortestpath()——调⽤弗洛伊德和最短路径输出的函数(7) main()——主函数2.输⼊的形式和输⼊值的范围:输⼊数字和字母:字母:以s查询最短路径;以i查询信息;以e退出程序。
数字:从1到9输⼊。
3.输出的形式:从A到B得最短路径为:A-到-C-到-D-到-B最短距离为:xxx⽶。
4.测试数据包括在正确的输⼊及输出结果及含有错误的输⼊及输出结果:Input:sOutput:Please enter the number two to query : 1 7Output:The shortest path from Area C dormitory building to library is: Area C dormitory building--Area C restaurant--library; The shortest distance is:150meters.Input:iOutput:Please enter the number of query site: 3Output:@name: Area B dormitory building@introduction:Area B student rest areainput:eoutput:Thank you for you use4.2总体设计1.抽象数据类型定义typedef struct{char name[100] ;int number;char introduce[100];}Vertex;2.主程序模块的整体流程1、进⼊主函数,调⽤init(),map()。
计算机工程学院课程设计报告课程名称:数据结构课程设计设计题目:校园导航问题院系:计算机工程学院专业:计算机科学与技术组别:学生姓名: 学号:起止日期:2011 年12 月26 日~2012 年 1月3 日指导教师:目录1需求分析 02.1 课程设计(实践周)题目···························································错误!未定义书签。
2.2课程设计(实践周)任务及要求 ················································错误!未定义书签。
2.3课程设计(实践周)思想 (1)2.4 软硬件运行环境开发工具 (1)2概要设计 .................................................................................. 错误!未定义书签。
数据结构课程设计—校园导航报告
校园导航作为一种常用的地图应用,其设计并不复杂,但在功能实现中涉及到多种常
见数据结构,如图、树结构等。
本报告对校园导航的数据结构设计进行详细说明,主要可
以分为三个部分:
1、数据输入。
在实现校园导航功能之前,需要输入校园数据,各个元素需要形成节点并构建图,比
如楼宇、地点以及相连的路径等,用户可以输入各个节点的属性,然后形成节点、构建图、标记属性等。
2、数据结构设计
对于校园地图来说,一般采用有向图和无向图这两种图形结构。
有向图表示有方向性
的连接关系,一般用于实现单程导航;无向图表示无方向性的连接关系,一般用于实现多
程导航,比如从一个地点到达另一个地点的最短路径。
另外,在校园地图中也会遇到对节点进行索引的情况,一般采用哈希表来构造索引,
哈希表存储不同的数据结构的元素,以及这些元素的信息,从而实现快速查找功能。
3、搜索算法设计
如许多搜索应用,校园导航中也有搜索功能,搜索过程中,会在图和哈希表中寻找符
合条件的结果。
有关搜索算法,常用的有深度优先搜索算法和广度优先搜索算法。
深度优先搜索算法通过沿着关系网的深度来搜索,即每次搜索一条路径直至无路可走;而广度优先搜索算法通过沿着关系网的广度来搜索,即每次从多条路径中选择最佳路径进
行搜索,并将其标记,直到找到最终结果
总体来看,校园导航数据结构设计包含了输入、构建图、节点索引以及搜索等多种操作,可以利用图、树、哈希表等数据结构设计实现各项功能,以最优的性能完成地图搜索
工作。
数据结构课程设计校园导航一、课程目标知识目标:1. 学生能理解并掌握数据结构中图的基本概念,包括顶点、边、邻接矩阵和邻接表。
2. 学生能够运用图的表示方法,特别是适合校园导航的图结构。
3. 学生能够描述并实现至少两种图的遍历算法,如深度优先搜索(DFS)和广度优先搜索(BFS)。
技能目标:1. 学生能够运用所学知识,设计并实现一个简单的校园导航系统,能够规划出两点之间的最短路径。
2. 学生通过实践项目,培养解决实际问题的能力,掌握算法的应用和优化。
3. 学生能够通过编程实践,提高使用数据结构解决复杂问题的能力。
情感态度价值观目标:1. 学生能够认识到数据结构在解决实际问题中的重要性,增强学习数据结构的兴趣和积极性。
2. 学生通过小组合作完成项目,培养团队协作能力和交流沟通技巧。
3. 学生在探索过程中能够体验到算法解决问题的乐趣,培养科学探究精神和创新思维。
本课程设计针对高年级学生,结合数据结构学科特点,旨在通过校园导航项目,使学生将理论知识与实际应用紧密结合。
课程强调理解与操作并重,注重培养学生的实践能力和创新精神,同时引导学生形成积极的情感态度和正确的价值观。
通过具体学习成果的分解,课程为教学设计和评估提供了明确、可衡量的标准。
二、教学内容1. 图的基本概念:- 顶点与边- 有向图与无向图- 邻接矩阵与邻接表2. 图的遍历算法:- 深度优先搜索(DFS)- 广度优先搜索(BFS)- 应用实例分析3. 最短路径算法:- Dijkstra算法- Floyd-Warshall算法- 应用实例分析4. 校园导航系统设计:- 系统需求分析- 图的构建与表示- 导航算法实现与优化5. 项目实践:- 小组分工与合作- 编程实现与调试- 系统测试与评估本教学内容按照课程目标,以数据结构课本中图的相关章节为基础,结合校园导航项目进行系统组织。
教学大纲明确教学内容安排和进度,确保学生能够逐步掌握图的原理、算法和项目实践。
题目:校园导航问题班级:信计0901 姓名:刘佺学号:3090104020 完成日期:2011.6一:需求分析1.运行环境:Microsoft Visual C++ 6.02.程序所实现的功能:设计一个校园导游程序,为来访的客人提供各种信息查询服务。
为来访客人提供图中任意景点相关信息的查询。
为来访客人提供图中任意景点相关信息的查询。
3.程序的输入和包含输入的数据格式和说明:用户只需要按照页面的提示输入需要操作的序号,然后按回车确认即可。
4.程序的输出格式和说明:当用户输入所要查询的地点序号,并且回车后,屏幕自动生成所查询路径的最短路线和距离。
5.测试数据:当用户进入最短距离查询界面后,输入起始地点序号1(江苏大学校大门)和终点序号后5(药学院),屏幕上自动生成这两条路径之间的最短距离519米,和最短路径江苏大学校大门→图书馆→药学院。
当用户输入起始地点序号7(三江楼)和终点序号后13(女生一区),屏幕上自动生成这两条路径之间的最短距离1305米,和最短路径为三江楼→三山楼→东山操场→女生一区。
二:设计说明(1).主要的数据结构设计说明:结构体的定义:typedef struct VertexType{int number;char *sight;}VertexType;typedef struct{VertexType vex[NUM];int arcs[NUM][NUM];int vexnum;}MGraph;常量的定义:#define Max 32767#define NUM 1各个函数的定义:void CreateMGraph(int v) //创建图的函数,其中v表示图中的顶点数void Map() //地图展示函数,用于输出西安科技大学的平面简略图char Menu() //主菜单显示于操作界面void Info() //资料介绍函数,用于当用户选择查询地点资料时输出地点的资料信息void Dijkstra(int num) //迪杰斯特拉函数void Display(int sight1,int sight2) //地图展示函数void main() //主函数的定义(2).程序的主要流程图求最短路径算法流程图:(3.)主函数对各个函数的调用工作(4).主要函数的说明:#define Max 32767 //用Max来表示权值为此时的两点间直接不可达#define NUM 15 //选取了学校的十七个地点用数组存储,其中数组第一个元素不存储地点以方便操作typedef struct VertexType{int number;char *sight;}VertexType; //定义顶点的结构体类型,number表示顶点编号,字符数组表示顶点的名称typedef struct{VertexType vex[NUM];int arcs[NUM][NUM];int vexnum;}MGraph; //定义图的结构体类型,vex[NUM]数组存储顶点,arcsp[NUM][NUM]矩阵存储边的权值,vexnum表示顶点的个数MGraph G;{生成G表示结构体变量MGraph}int P[NUM][NUM]; //定义全局变量P[NUM][NUM]存储点之间的最短路径long int D[NUM]; //定义全局变量D[NUM]存储点之间最短路径的权值void Dijkstra(int num) //通过迪杰斯特拉算法求num点到其余点的最短路径,并将最短路径保存在数组P[NUM][NUM]中,将最短路径的权值保存在数组D[NUM]中{int v,w,i,t;int final[NUM];int min;for(v=1;v<NUM;v++){final[v]=0; //置空最短路径终点集D[v]=G.arcs[num][v]; //置初始的最短路径长度for(w=1;w<NUM;w++)P[v][w]=0; //置空最短路径if(D[v]<32767){P[v][num]=1;P[v][v]=1;}}D[num]=0;final[num]=1; //初始化num顶点属于S集for(i=1;i<NUM;++i) //开始循环,每次求得num到某个顶点的最短路径,并添加到S 集{min=Max; //min为当前所知的num到顶点的最短距离for(w=1;w<NUM;++w)if(!final[w]) //w顶点在V-S集中if(D[w]<min){v=w;min=D[w];}final[v]=1; //与num相距最近的顶点并入S集for(w=1;w<NUM;++w) //更新最短路径if(!final[w]&&((min+G.arcs[v][w])<D[w])) //修改D[w]和P[w],w在V-S集中{D[w]=min+G.arcs[v][w];for(t=0;t<NUM;t++)P[w][t]=P[v][t];P[w][w]=1;}}}char Menu() //主菜单显示于操作界面从而让用户选择查询路径功能或者查询地点信息功能char c;int flag; //定义标志flag确定循环条件do{flag=1;Map();printf("\t\t 1.查询地点路径 \n");printf("\t\t 2.地点信息简介\n");printf("\t\t e.退出 \n");printf("\t ***********************江苏大学*************************\n");printf("\t\t\t请输入您的选择:");scanf("%c",&c);if(c=='1'||c=='2'||c=='e')flag=0;}while(flag);return c;}void Display(int sight1,int sight2) //输出函数用于通过数组P[NUM][NUM]提取出从点sight1到点sight2的最短路径,从D[NUM]中输出点sight1到点sight2的最短路径的权值{int a,b,c,d,q=0;a=sight2;if(a!=sight1){printf("\n\t从%s到%s的最短路径是",G.vex[sight1].sight,G.vex[sight2].sight);printf("\t(最短距离为 %dm.)\n\n\t",D[a]); //从D[NUM]中提取出sight1到sight2的最短距离的权值输出printf("\t%s",G.vex[sight1].sight);d=sight1;for(c=0;c<NUM;++c){P[a][sight1]=0;for(b=0;b<NUM;b++){if(G.arcs[d][b]<32767&&P[a][b]){printf("-->%s",G.vex[b].sight); //通过P[NUM][NUM]确定sight1到sight2的最短路径q=q+1;P[a][b]=0;d=b;if(q%8==0) printf("\n");}}}}}void main() //主函数{int v0,v1;char e;char ck;CreateMGraph(NUM);Do //用do while循环确保循环至少进行一次{system("cls"); //用system("cls")清屏使屏幕简洁ck=Menu();switch(ck) //用switch语句确定用户选择功能{case '1':gate: //门函数使程序退回到gate位置system("cls");Map();do{printf("\n\n\t\t\t请选择出发地序号(1~14):");scanf("%d",&v0);if(v0<1||v0>17)printf("\n\n\t\t\t\t输入错误!\n");}while(v0<1||v0>17);do{printf("\t\t\t请选择目的地序号(1~14):");scanf("%d",&v1);if(v1<1||v1>14||v1==v0)printf("\n\n\t\t\t\t输入错误!\n");}while(v1<1||v1>14||v1==v0);Dijkstra(v0);Display(v0,v1);printf("\n\n\t\t\t\t请按任意键继续,按e退回首页\n");getchar();scanf("%c",&e);if(e=='e'){当标识符e等于e时跳出语句}break;goto gate;case'2':system("cls");Info();printf("\n\n\t\t\t\t请按回车键退回首页...\n");getchar();getchar();break;};}while(ck!='e'); //当标识符ck不等于e时继续循环}三.上机结果及体会1.测试结果:(如图所示)打开程序所显示的界面。
课程设计报告院、系:专业:软件工程班级:课程设计科目数据结构学生姓名:指导教师:完成时间:校园导航系统设计报告一、设计任务与目标设计要求:设计你的学校的平面图,至少包括10个以上的场所,每两个场所间可以有不同的路,且路长也可能不同,找出从任意场所到达另一场所的最佳路径(最短路径)。
本系统是一个涉及吉林大学珠海学院相关景点和场所查询系统,是为了方便人们能够更快更准地获得学校各个景点和场所的详细信息。
本系统为用户提供以下功能:(一)、查询了解学校概况,为导游参观者提供关于学校的相关信息。
(二)、查询校园各个场所和景点信息;(三)、为导游者或外来人员参观人员提供校园交通信息,方便用户走访学校。
校园导航查询系统的开发方法总结如下:(1) 调查,了解学校各个场所与场所或者是各个景点与景点之间的信息,路径和距离,从外来人员或者参观者和走访者的角度出发,该如何设计才能满足用户需求。
(2) 分析,对调查得到的数据进行分析,根据其要求实现的功能分析系统结构和界面将实现的基本功能。
(3) 设计与开发,设计系统界面并编辑实现其各个功能的代码。
(4) 调试,在设计完成后,调试系统运行的状况,修改完善系统,然后进行测试。
二、方案设计与论证校园旅游模型是由各个景点和景点以及场所和场所之间的路径组成的,所以这完全可以用数据结构中的图来模拟。
用图的结点代表景点或场所,用图的边代表景点或场所之间的路径。
所以首先应创建图的存储结构。
结点值代表景点信息,边的权值代表景点间的距离。
结点值及边的权值采用图存储。
本系统需要查询景点信息和求一个景点到另一个景点的最短路径长度及路线,为方便操作,所以给每个景点一个代码,用结构体类型实现。
计算路径长度,最短路线和最佳路径时可分别用迪杰斯特拉(Dijkastra)算法和哈密而顿回路算法实现。
最后用switch选择语句选择执行浏览景点信息或查询最短路径和距离。
搭建程序框架图,其图如下所示:三、算法说明(一)设计功能的实现接下来根据以上搭建的程序框架完成各个模块的算法1、首先是抽象数据类型的定义:图的抽象数据类型的定义:ADT Mgragh{数据对象V: V是具有相同特征的数据元素的集合,称为定点集数据关系R={VR}VR={ <V,W> | V, W∈V, <V , W>表示从V到W的边}2、基本操作:CreateUDN(&G,V,VR); // 创建图初始条件:V是图的顶点集,VR是图中边的集合。
操作结果:按V和VR的定义构造图 G。
(二)主要算法设计及相关算法补充先创建图存储学校各个景点或场所,以图的顶点表示景点或场所,以边表示路径,再利用迪杰斯特拉(DijkStra)算法求出校园各个地方的最短路径,然后根据需要进行补充相关算法。
四、全部源程序清单#include "stdio.h"#include "iostream.h"#include "malloc.h"#include "conio.h"#include "stdlib.h"#define Num 11 //最多顶点个数#define uplimit 100000 //定义一个无穷大的值struct intt{int value;};intt Edge[Num][Num]; //Edge为带权邻接矩阵 intt dist[Num]; //dist为最短路程intt path[Num]; //path为最短路径上该顶点的前一顶点的顶点号intt S[Num]; //S为已求得的在最短路径上的顶点号intt D[Num];/*** 生成地图,输入地图的基本信息***/void BuildMap(){int i,j;/* 初始化平面图矩阵 */for ( i=0;i<11;i++){for ( j=0;j<11;j++){Edge[0][0].value=0 , Edge[0][1].value=25 , Edge[0][2].value=25 ;Edge[0][3].value=90, Edge[0][4].value=uplimit, Edge[0][5].value=uplimit ;Edge[0][6].value=10 , Edge[0][7].value=uplimit ,Edge[0][8].value=uplimit;Edge[0][9].value=uplimit, Edge[0][10].value=uplimit;Edge[1][0].value=25 , Edge[1][1].value=0 , Edge[1][2].value=10 ;Edge[1][3].value=32, Edge[1][4].value=uplimit, Edge[1][5].value=uplimit ;Edge[1][6].value=10 , Edge[1][7].value=uplimit ,Edge[1][8].value=21;Edge[1][9].value=16, Edge[1][10].value=uplimit;Edge[2][0].value=25 , Edge[2][1].value=10 , Edge[2][2].value=0 ;Edge[2][3].value=uplimit, Edge[2][4].value=uplimit, Edge[2][5].value=uplimit ;Edge[2][6].value=uplimit, Edge[2][7].value=uplimit ,Edge[2][8].value=uplimit;Edge[2][9].value=uplimit, Edge[2][10].value=uplimit;Edge[3][0].value=90 , Edge[3][1].value=32 , Edge[3][2].value=uplimit ;Edge[3][3].value=0 , Edge[3][4].value=uplimit, Edge[3][5].value=uplimit ;Edge[3][6].value=uplimit, Edge[3][7].value=uplimit ,Edge[3][8].value=26;Edge[3][9].value=uplimit, Edge[3][10].value=uplimit;Edge[4][0].value=uplimit, Edge[4][1].value=uplimit ,Edge[4][2].value=uplimit ;Edge[4][3].value=uplimit, Edge[4][4].value=0, Edge[4][5].value=9 ;Edge[4][6].value=uplimit, Edge[4][7].value=uplimit ,Edge[4][8].value=uplimit;Edge[4][9].value=uplimit, Edge[4][10].value=60;Edge[5][0].value=uplimit , Edge[5][1].value=uplimit ,Edge[5][2].value=uplimit ;Edge[5][3].value=uplimit, Edge[5][4].value=9, Edge[5][5].value=0 ;Edge[5][6].value=uplimit , Edge[5][7].value=15 , Edge[5][8].value=50;Edge[5][9].value=14, Edge[5][10].value=uplimit;Edge[6][0].value=10 , Edge[6][1].value=10 , Edge[6][2].value=uplimit;Edge[6][3].value=uplimit, Edge[6][4].value=uplimit,Edge[6][5].value=uplimit ;Edge[6][6].value=0 , Edge[6][7].value=35 , Edge[6][8].value=uplimit;Edge[6][9].value=30, Edge[6][10].value=uplimit;Edge[7][0].value=uplimit , Edge[7][1].value=uplimit ,Edge[7][2].value=uplimit ;Edge[7][3].value=uplimit, Edge[7][4].value=uplimit,Edge[7][5].value=15 ;Edge[7][6].value=35 , Edge[7][7].value=0 , Edge[7][8].value=uplimit;Edge[7][9].value=13, Edge[7][10].value=uplimit;Edge[8][0].value=uplimit , Edge[8][1].value=21 , Edge[8][2].value=uplimit ;Edge[8][3].value=26, Edge[8][4].value=uplimit;Edge[8][5].value=50 ;Edge[8][6].value=uplimit , Edge[8][7].value=uplimit ,Edge[8][8].value=0;Edge[8][9].value=22, Edge[8][10].value=10;Edge[9][0].value=uplimit , Edge[9][1].value=16 , Edge[9][2].value=uplimit ;Edge[9][3].value=uplimit, Edge[9][4].value=uplimit, Edge[9][5].value=14 ;Edge[9][6].value=30 , Edge[9][7].value=13 , Edge[9][8].value=22;Edge[9][9].value=0, Edge[9][10].value=uplimit;Edge[10][0].value=uplimit , Edge[10][1].value=uplimit ,Edge[10][2].value=uplimit;Edge[10][3].value=uplimit, Edge[10][4].value=60; Edge[10][5].value=uplimit ;Edge[10][6].value=uplimit , Edge[10][7].value=uplimit ,Edge[10][8].value=10;Edge[10][9].value=uplimit, Edge[10][10].value=0;}}}/* 找出场所间的最短距离--迪杰斯特拉算法 */void ShortestDist(int s){for ( int i=0;i<11;i++){ //dist和path数组初始化dist[i].value=Edge[s][i].value; //邻接矩阵第s行元素赋值到dist中S[i].value=0; //已求出最短路径的顶点集合初始化if(i!=s && dist[i].value<uplimit){path[i].value=s;}else path[i].value=-1; //路径存放数组初始化}S[s].value=1;//顶点s加入顶点集合dist[s].value=0;/* 循环计算该场所与邻接场所之间的最短距离 */for (i=0;i<11-1;i++){ //从顶点s确定n-1条路径float min=uplimit;int u=s;for (int j=0;j<11;j++){ //选择当前不在集合S中具有最短路径的顶点u/* 如果有路径比目前的最小值还小,则替换这个最小值 */if (!S[j].value && dist[j].value<min){u=j;min=dist[j].value;}}S[u].value=1; //将顶点u加入集合S,表示它已在最短路径上for (int w=0;w<11;w++){ //修改if (!S[w].value && Edge[u][w].value<uplimit && dist[u].value+Edge[u][w].value<dist[w].value){dist[w].value=dist[u].value+Edge[u][w].value;path[w].value=u;}}}}void bh() //显示场所名称{cout<<"\t0.女生公寓 1.图书馆 2.体育馆"<<endl;cout<<"\t3.校东门 4.一教学楼 5.教师公寓"<<endl;cout<<"\t6.食堂 7.体育场 8.校南门"<<endl;cout<<"\t9.大学生活动中心 10.实验楼"<<endl;}/*将顶点序列号转换成场所名称*/void Outpath(int c){ switch(c){case 0: cout<<"女生公寓";break;case 1: cout<< "图书馆";break;case 2: cout<< "体育馆";break;case 3: cout<< "校东门";break;case 4: cout<< "一教学楼";break;case 5: cout<< "教师公寓";break;case 6: cout<< "食堂";break;case 7: cout<< "体育场";break;case 8: cout<< "校南门";break;case 9: cout<< "大学生活动中心";break;case 10:cout<<"实验楼";break;}/* 输出两个场所之间的最短距离,和最短路径 */void getdata(int s,int e){D[0].value=e;int k;for (k=0;D[k].value!=s;k++){D[k+1].value=path[D[k].value].value;}if(S[e].value){cout<<"\n\t场所"<<s<<","<<e<<"之间的最短距离是:"<<dist[e].value<<endl;cout<<"\n\t场所"<<s<<","<<e<<"之间的最短路径是:";for(; k!=-1;k--){Outpath(D[k].value);if (k!=0){cout<<" --> ";}}}elsecout<<"\n\t场所"<<s<<"到场所"<<e<<"之间没有路径!"<<endl;}void Begin(){int flag=1;int s,e;while ( flag ){bh();cout<<"\n\t请输入起始场所号与目的场所号:";cin>>s>>e;cout<<endl;if(s<11 && s>=0 && e<11 && e>=0){flag=0;}elsecout<<"\n场所号非法,请重新输入!";}ShortestDist(s);getdata(s,e);/*显示场所的具体信息*/void info(int c) //c为场所对应的数字号{switch(c){case 0:cout<<"\t▲女生公寓,具体指桂园七栋,住宿条件较好。