数据结构课程设计—校园导航报告

合集下载

数据结构-算法实验报告——校园导航系统

数据结构-算法实验报告——校园导航系统

数据结构与算法分析课程设计报告设计题目:校园导航咨询系统专业学号姓名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.退出系统。

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

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

数据结构课程设计--校园导航图
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},

校园导航问题报告

校园导航问题报告

课程设计(数据结构)院、系计算机与软件学院专业网络工程姓名顾容宇徐鹏学号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;}}//下边是可直接到达的景点间的距离,由于两个景点间距离是互相的,// 所以要对图中对称的边同时赋值。

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

课程设计报告院、系:专业:软件工程班级:课程设计科目数据结构学生姓名:指导教师:完成时间:校园导航系统设计报告一、设计任务与目标设计要求:设计你的学校的平面图,至少包括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▲女生公寓,具体指桂园七栋,住宿条件较好。

相关文档
最新文档