- 1、本文档共21页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构 校园导游程序课程设计报告
合肥学院
计算机科学与技术系
课程设计报告
2009 ~2010 学年第 二学期
课程 数据结构与算法 课程设计名称 校园导游程序 学生姓名 王 伟 学号 0804013006 专业班级 08计科(3)班 指导教师 李 红 沈亦军
2010 年 6 月
题目:校园导游程序题目:用无向网表示你所在学校的校园景点平面图,图中定点表示主要景点,存放景点的编号、名称、简介等信息。要求能够回答有关景点介绍、游览路经等问题。
要求:(1)查询各景点相关信息;
(2)查询图中任意两个景点的最短路径。
(3)查询图中任意两个景点的所有路径。.
选作内容:求多个景点的最佳游览路经。
一、问题分析与任务定义
1、问题分析
我们将每个建筑看作图中的一个点,而建筑物之间直接相连的道路看作是无向图的边, 那么就可以得到一个无向图,而问题也就变成无向图中给定起点和终点的最短路径问题。而求查询图中任意两个景点的所有路径。就可以用深度优先遍历算法来实现。任意两个顶点之间的最短路径用Dirjstra算法来实现。从v1到v2的路径要么是v1-v2,要么中间经过了若干顶点。显然我们要求的是这些路径中最短的一条。这样一来,问题就很好解决了——最初都是源点到目的点,然后依次添加顶点,使得路径逐渐缩短,顶点都添加完了,算法就结束了。景点信息的查询可通过循环查找图中的景点,然后输出其对应的Introducion。在这里用Create_Mgraph()函数实现原始数据的输入 。
2、任务定义
根据设计的基本要求,可知本系统应实现以下几个功能:
(1)景点查询:景点查询,输出所查询景点的相关信息
(2)景点之间最佳路径查询功能:输出所选择的两点之间的最短路径及路径长度。
(3)两景点间所有路径:输出两点间存在的所有路径。
二、数据结构的选择和概要设计
1、图的定义:图中顶点表示主要景点,存放景点的编号、名称、简介等信息,图中的边表示景点间的道路,存放路径长度等信息。图的信息以邻接矩阵存储,利用二维数组作为矩阵坐标,二维数组的值表示图的两点间的距离,即无向图的权值,若两点间无直接路径,则以无穷大(此程序中为INF=20000)为权值。
2、校园导游程序的数据结构类型如下:
#define INF 20000 //用20000表示无穷大
#define max 20 //最多顶点个数
typedef struct{ //定义景点类型
int number; //景点序号
char *sight; //景点的名称
char *Introduction; //景点的简介
}Vertex;
typedef struct{ //定义图的类型
int m; //景点个数
int n; //边或弧的数目
Vertex vexs[max]; //一维数组,存储景点
int edges[max][max]; //二维数组,存储边或弧的权值
}MGraph;
int D[max];//全局数组,用来存放路径上的个顶点
int visited[max];//全局数组,用来记录各顶点被访问的情况
int a=0;//全局变量,用来记录每对顶点之间的所有路径的条数
3、概要设计
图的信息以邻接矩阵形式存储,邻接矩阵以二维数组的数据结构存储。vexs[i][j];当i=j及i点与j点无直接连通时,其值为无穷大,定义一个很大的整数INF代替无穷大。当i与j点邻接时,其值为两点间的权值即两景点距离。
(1)查询景点信息
1按照景点编号查询
2按照景点名称查询
(2)两点间最短路径
利用迪杰斯特拉(Dirjstra)算法求两点之间最短路径。
(3)两点间所有路径
利用邻接矩阵的“深度优先遍历”查找路径,从起始点a开始依次遍历,如果找到终点b,则输出相应路径,否则继续递归查找。程序框架图如图1所示:
图1 程序框架
三、详细设计和编码
1、首先确定以无向图为数据结构的校园地图如图2:
图2 校园地图
2、设计主函数:调用各子函数完成选择功能。主函数中以switch语句选择操作:
1━━查询景点间的所有路径
2━━查询景点的信息:
1按照景点编号查询
2按照景点名称查询
3━━查询景点间的最短游览路径
e━━退出程序
3、按深度优先遍历输出图中任意两个景点间的所有路径,通过调用函数Searchpath2(MGraph *G), disppath(MGraph *G,int i,int j)和path(MGraph *G,int i,int j,int k)其中函数
文档评论(0)