课程设计 单源点最短路径算法的实现

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

数据结构课程设计

设计说明书

单源点最短路径算法的实现

学生姓名

学号

班级

成绩

指导教师

数学与计算机科学学院

2015年 1 月 2 日

数据结构课程设计评阅书

课程设计任务书

2014—2015学年第1学期

专业:学号:姓名:

课程设计名称:数据结构课程设计

设计题目:单源点最短路径算法的实现

完成期限:自 2014 年 12 月 22 日至 2015 年 1 月 2 日共 2 周

设计内容及要求:

最短路径问题已经被应用到GIS、GPS等信息管理系统中,为人们生活带来了很大便利。它属于图结构问题,其解决方法也有不少(如Dijkstra、A-star)。单源点最短路径问题解决的是既定起点的情况下,寻求该点到图中其它顶点的最短路径。请用C/C++语言的结构体、指针、数据结构等基础知识,编写程序实现图的结构定义、图的存储,以及求解单源点最短路径。

设计过程以及写作要求如下:

(1)要针对本题目,认真研究所设计的内容,用简明扼要的语言描述课题,给出课题的基本内容及要求;

(2)根据数据结构的相关知识给出实现建立任意m个顶点n条边的图算法、按照用户给定的源点和目标点,求出它们间的最短路径(打印出来)算法的基本策略及思路;

(3)给出较为详尽数据结构与算法,算法可以用流程图、伪代码等描述手段进行描述;

(4)给出一个完整的算法实现的C/C++程序,算法中的各子算法要力求用函数来实现;

(5)对编写的程序要进行详尽的测试分析;

(6)对本课题的设计工作要进行一个完整深刻的总结。

最终设计成果形式为:

1、设计软件一套;

2、撰写一份课程设计说明书一份,打印并装订成册。

指导教师(签字):教研室主任(签字):

批准日期:年月日

摘要

本系统以VC++作为软件开发环境,C语言作为程序开发语言,邻接矩阵作为存储结构,设计与实现了最短路径运算。该系统实现了有向图的存储、最短路径的运算等主要功能。依照该系统可以解决生活中许多问题,比如交通路线的选择,工程时间的预算等等,让人们可以做出合理的选择。本系统通过分析课题的背景、意义、要求,分别从课题描述、逻辑设计、算法设计、调试与测试等各个方面详细介绍了系统的设计与实现过程,最后对系统的完成情况进行了总结。界面清晰,操作简单,易于用户接受。

关键词:VC++;邻接矩阵; 最短路径

目录

1课题描述 (1)

2 问题分析与任务定义 (2)

2.1问题分析 (2)

2.2任务定义 (2)

3 算法设计 (3)

3.1 图的邻接矩阵的存储结构 (3)

3.2 Dijkstra算法思想 (4)

4 系统逻辑设计 (5)

4.1 主函数流程图如图4.1所示 (5)

4.2 Create函数流程图如图4.2所示 (6)

4.3 Dijkstra函数流程图如图4.3所示 (8)

5 源代码 (11)

6 调试与测试 (14)

6.1合法数据输入 (14)

6.2非法数据输入 (15)

总结 (16)

参考文献 (17)

1课题描述

乘车旅行的人大多数都希望找出到目的地尽可能短,花费少的行程,那么如何找出从出发点到目的地的最短路径?由于路径比较多,所以用手工计算起来比较复杂,抽象,因此人们用计算机语言代替手工计算来求得最短路径。而在计算机语言中迪杰斯拉算法比较常用,简捷,故人们经常借助计算机程序用迪杰斯拉算法求得单源点的最短路径,这样可以广泛的提高效率,而且条理清晰,通俗易懂。

2 问题分析与任务定义

2.1问题分析

本系统是要解决的是单源点最短路径问题,设计程序,实现最短路径的求法,系统需要达到的主要功能如下:

(1) 编写算法能够建立带权图,并能够用Dijkstra算法求该图的最短路径。

(2) 能够选择图上的任意一顶点做为开始节点。最短路径输出不必采用图形方式,可顶点序列方式输出。

(3) 根据课设题目要求,拟将整体程序分为三大模块。两个子模块相互独立,没有嵌套调用的情况,在主模块中调用上面两个子模块。

2.2任务定义

根据课设题目要求,拟将整体程序分为三大模块。两个子模块相互独立,没有嵌套调用的情况,在主模块中调用上面两个子模块以下是三个模块的大体分析:

(1) 建立有向图的存储结构。

(2) 应用Dijkstra算法求出该有向图的最短路径。

(3) 在主函数中调用两个子函数,完成最短路径的程序设。

3算法设计

3.1图的邻接矩阵的存储结构

一个图的邻接矩阵表示唯一的。故在图的邻接矩阵表示中,除了需要用一个二维数组存储顶点之间相邻关系的邻接矩阵外,通常还需要使用一个具有n个元素的一维数组存储顶点信息,其中下标为i的元素存储顶点vi的信息。本设计是基于类C语言的算法描述,因此,图的邻接矩阵的存储结构定义如下:

#define MVNum 50

typedef struct {

VertexType vexs[MVNum];

Adjmatrix arcs[MVNum][MVNum];

}Mgraph;

在本系统中,以邻接矩阵存储有向图,如图3.1a中有向图G所示,其邻接矩阵为

3.2 Dijkstra算法思想

(1)Dijkstra算法核心是贪心,实质是按路径长度递增产生诸顶点的最短路径算法。用自然语言描述如下:

初始化S和D,置空最短路径终点集,置初始的最短路径值;

S[v1]=TRUE;D[v1]=0;

While(S集中的顶点数

{

开始循环,每次求的v1到某个v顶点的最短路径,并将v加到S集中;

S[v]=TRUE; 更新当前最短路径及距离。

}

(2)Dijkstra算法结束后,通过设置一个数组记录下一个节点的前趋节点,然后通过倒叙的方式输出该最短路径。

相关文档
最新文档