数据结构实验报告五最短路径
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验课程名称数据结构课程设计
专业班级
学生姓名
学号
指导教师
2012至 2013学年第一学期第 1 至 9 周
目录
一、概述: (3)
1.1 问题描述 (3)
1.2 系统实现的目标 (3)
1.3 系统实现方案 (3)
二、系统分析: (4)
2.1设计思想 (4)
2.2设计要求 (4)
2.3需求分析 (4)
2.4 算法描述 (5)
三、概要设计: (7)
3.1 程序流程图 (8)
四、详细设计: (9)
4.1建立图的存储结构 (9)
4.2单源最短路径 (9)
4.3任意一对顶点间最短路径 (10)
4.4 建立有向图的存储结构 (11)
4.5迪杰斯特拉算法 (11)
4.6弗洛伊德算法 (12)
4.7 运行主控程序 (13)
五、运行与测试: (14)
六、:总结与心得 (16)
附录:程序代码 (16)
一、概述:
1.1 问题描述
在交通网络非常发达,交通工具和交通方式不断更新的今天,人们在出差、旅游或做其他出行时,不仅关心节省交通费用,而且对里程和所需要的时间等问题也感兴趣。对于这样一个人们关心的问题,可用一个图结构来表示交通网络系统,利用计算机建立一个交通咨询系统。图中的顶点表示城市,边表示城市之间的交通关系。这个交通系统可以回答出行旅客提出的各种路径选择问题。例如,问题之一:“一位旅客要从A城到B城,他希望选择一条途中中转次数最少的路线。”假设图中每一站都需要换车,那么这个问题反映到图上就是要找一条从顶点A 到顶点B的所含边数目最少的路径。我们只需要从顶点A出发对图作广度优先搜索,一旦遇到顶点B就终止。由此所得广度优先生成树上,从根顶点A到顶点B 的路径就是中转次数最少的路径。路径上A与B之间的顶点就是路径的中转站,但这只是一类最简单的图的最短路径问题。系统还可以回答诸如此类的等等的路径选择问题。
1.2 系统实现的目标
通过进行课程设计,了解并初步掌握设计、实现较大系统的完整过程,包括:系统分析、编码设计、系统集成、以及调试分析,熟练掌握数据结构的选择、设计、实现以及操作方法,为进一步的应用开发打好基础。
应用所学数据结构知识,独立完成问题分析,结合数据结构理论知识,编写程序求解指定问题。
1.3 系统实现方案
首先确定系统要实现怎样的目的,实现这些目的需要先实现哪些程序,这就是核心部分,划分出模块并写出其源代码,此程序大致分了六大模块,由一个主函数组和五个自定义函数组成,而后是上机调试,将几大模块组成一个协调完整的能实现其功能的程序,最后提交设计报告
二、系统分析:
2.1设计思想
用邻接矩阵来存储交通网络图的信息,运用迪杰斯特拉算法实现图上单源最短路径问题,然后运用费洛伊德算法实现图中任意一对顶点间最短路径问题,这样就会实现旅客所要咨询的问题。
2.2设计要求
该交通咨询系统要完成城市网络图的存储,并要实现求任意一个城市顶点到其他城市顶点的最短路径问题,还要实现任意两个城市顶点间的最短路径问题。故设计要分成三部分,一是建立交通网络图的存储结构;二是解决单源路径问题;最后再实现两个城市之间的最短路径问题。
设计要求:
1. 建立交通网络网的存储结构。
2. 总体设计要画流程图。
3. 提供程序测试方案。
4. 界面友好。
2.3需求分析
根据要求,需要在系统中建立无向图。系统应该有高度灵活性,可以由用户根据当前交通网络图输入初始数据,并且可以更改。系统根据用户的输入建立无向图的结构,并通过狄克斯特拉算法和弗洛伊德算法实现要求,并提供两种功能供用户选择。
2.4 算法描述
狄克斯特拉算法的具体流程图
弗洛伊德算法的具体流程图
开始
初始化距离和路径
设为从到的只以
集合中的节点为中间节点的最短
路径的长度
最短路径不经过点k 最短路径经过点k
输出结果
三、概要设计:
程序中将涉及下列两个抽象数据类型:一个是图,一个是队列。
1、设定“图”的抽象数据类型定义:
ADT Graph{
数据对象 V:V 是具有相同特性的数据元素的集合,称为顶点集。
数据关系 R:
R={VR}
VR = {< v, w >| v, w ∈VP(v, w), < v, w > 表示从v到w的弧,
谓词P(v, w)定义了弧< v, w > 的意义或信息}
基本操作P:
CreateGraph(&G,V,VR);
初始条件:V 是图的顶点集,VR 是图中弧的集合。
操作结果:按V 和VR 的定义构造图。
LocateVex(G,u);
初始条件:图G 存在,u 和G 中的顶点有相同特征。
操作结果:若G 中存在顶点u,则返回该顶点在图中位置;否则返回其他信息。
First_next_adj(G,v);
初始条件:图G 存在,v 是G 中某个顶点。
操作结果:返回V 的第一个邻接顶点。若顶点在G 中没有邻接顶点,则返回“空” 。
DFSTraverse(G,i);
初始条件:图G 存在,i 为某个顶点在邻接矩阵中的位置。
操作结果:以i 为起始点,对图进行深度优先遍历。
BFSTraverse(G,i);
初始条件:图G 存在,i 为某个顶点在邻接矩阵中的位置。
操作结果:以i 为起始点,对图进行广度优先遍历。}ADT Graph
2、设定队列的抽象数据类型定义:
ADT Queue{
数据对象:D={ a i a i ∈BiTree, i ∈N+ }
数据关系:R1={< a i , a i −1 >| a i −1 , a i ∈D ,i=2,…,n}
约定a1 端为队列头,a n 端为队列尾。
基本操作:
InitQueue(&Q)
操作结果:构造一个空队列Q。
EnQueue(&Q,&e)
初始条件:队列Q 已存在。
操作结果:插入元素 e 为Q 的新的队尾元素。
DeQueue(&Q)
初始条件:队列Q 已存在。
操作结果:删除Q 的对头元素,并返回其值。
QueueEmpty(&Q)