数据结构 实验报告五 最短路径

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 算法描述

狄克斯特拉算法的具体流程图

弗洛伊德算法的具体流程图

设为从到的只以

三、概要设计:

程序中将涉及下列两个抽象数据类型:一个是图,一个是队列。

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 的定义构造图。

LocateV ex(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)

相关文档
最新文档