- 1、本文档共16页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
校园导游程序报告
问题分析和任务定义
题目与要求
校园导游程序题目:用无向网表示你所在学校的校园景点平面图,图中定点表示主要景点,存放 景点的编号、名称、简介等信息。要求能够回答有关景点介绍、游览路经等问题。
要求:(1)查询各景点相关信息;
(2)查询图中任意两个景点的最短路径。
(3)查询图中任意两个景点的所有路径。.
选作内容:求多个景点的最佳游览路经。
根据设计的基本要求,可知本系统应实现以下几个功能:
(1)景点查询:景点查询,输出所查询景点的相关信息
(2)景点之间最佳路径查询功能:输出所选择的两点之间的最短路径及路径长度。
(3)两景点间所有路径:输出两点间存在的所有路径。
问题分析
确定以无向图为数据结构的校园地图如图1:
体育
体
育
场
7
南校门1
行政楼2
礼
堂
6
东
校门
3
主教
学区4
图书馆
5
食
堂
8
宿
舍
区
9
荷
塘
10
图1校园地图
图的信息以邻接矩阵形式存储,邻接矩阵以二维数组的数据结构存储。cost[i][j];
当i=j时及i点与j点无直接连通时,其值为无穷大,定义一个很大的整数Maxint代替无穷大。当i与j点邻接时,其值为两点间的权值即两景点距离。
(1)、查询景点信息
将相应景点信息存入文本文档中,依据需要调用读取文件,并显示在屏幕上。
(2)、两点间最短路径
利用迪杰斯特拉(Dirjstra)算法求两点之间最短路径。
(3)、两点间所有路径
利用邻接矩阵转换为邻接表,以邻接表的遍历查找路径,并将路径暂时存储,最后一次将各路径输出。
任务定义
设计creat ();函数存入图的矩阵信息。
设计infor ();函数查询景点信息。
设计DJ_shortestpath ();函数利用迪杰斯特拉算法求最短路径。
设计Allpath ();函数求两点间所有路径。
程序实现功能
查询某景点信息。
查找两景点间最短路径。
查找两景点间所有路径。
数据结构的选择和概要设计
数据结构的定义
图的定义:
图的信息以邻接矩阵存储,利用二维数组作为矩阵坐标,二维数组的值表示图的两点间的距离,即无向图的权值,若两点间无直接路径,则以无穷大为权值。
景点相关信息:
景点相关信息以文本文档存储,利用函数直接读取文本输出。
景点名称输出
以结构体存储各个景点编号及相对的名称,以便于输出显示。
struct PlaceName {
char name[10];
}Place[11];
概要设计
主函数:调用各子函数完成选择功能。
主函数中以switch语句选择操作。
查询景点信息——1
查找路径——2
查找所有路径——3
退出程序——4
程序框架图如图2
主函数
主函数
Dirjstra
算法最短路径
邻接矩阵转换
邻接表
创建图
输入临
接矩阵
遍历输出所有路径
查询景点相关信息
图2程序框架图
详细设计和编码
迪杰斯特拉算法核心思想:
把图的顶点集合V分成两个子集,第一个子集包含已确定了最短路径的顶点,令其为S,第二个子集(V-S)包含尚未确定最短路径的顶点。按最短路径长度递增的顺序逐个把V-S中的顶点加到S中去,直至从v出发可以到达的所有顶点都包含在S中。在这个过程中,总保持从v到S中各顶点的最短路径的长度都不大于从v到V-S中的任何顶点的最短路径的长度。另外,每个顶点对应一个距离值,S中的定点的距离值就是从v到此顶点的最短路径的长度,V-S中的顶点的距离值是从v到此顶点的只包括S中的顶点的最短路径长度。当然,每当把一个顶点从V-S移到S中去后,必须对V-S中剩余的顶点的距离值进行调整。
算法步骤如下:
初始时,S只包括顶点v,即S={ v },V-S包括其他所有顶点,v的距离值为0,V-S中的顶点的距离值是这样确定的:对V-S中的任意顶点w,若图中有边v,w,则w的距离为此边上的权值,否则w的距离值为∞(或用一个很大的数表示,程序中用Maxint=9999表示)。
然后从V-S中选择一个距离值最小的顶点k加入到S中去,此时k的距离值恰好就是从v到它的最短路径的长度。
S中加入一个顶点k后,对V-S中的各个顶点的距离值进行一次修正。对V-S中的任意顶点w,若k的距离值加上边k,w上的权值小于w的原距离值,则将w的距离值调整为k的距离值与边k,w上的权值之和,否则w的距离值保持不变。
重复步骤②和③,知道所有顶点都已包括在S中为止,即知道S=V为止。
在函数 DJ_shortestpath ();中实现了迪杰斯特拉算法。
图的大家邻接矩阵存储在二维数组cost[][]中,数组dist[]存放各顶点的当前距离值。程序中用
文档评论(0)