- 1、本文档共17页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
合肥学院
计算机科学与技术系
课程设计报告
2009 ~ 2010 学年第 2 学期
课程
数据结构与算法
课程设计名称
Dijkstra算法的实现
学生姓名
学号
0804012044
专业班级
指导教师
2010 年 6月
Dijkstra算法的实现
问题分析与任务定义
1、课程设计题目:
1.1题 目:对任意图,选择合适的数据结构表示图,在此基础上实现求解最短路径的Dijkstra算法
1.2 要 求:设计合理的数据结构存储图,简单有效的实现Dijkstra算法。
1.3具体任务:建立图的存储模块,建立图的输出模块,在建图后从单源点开始求最短路径,并显示出来!
2、原始数据的输入格式:
2.1建图模块: 2.1.1 数字
2.2.2 数字+空格+数字+空格+数字+回车
2.3显示模块:回车
3、实现功能:
3.1 建立有向图
3.2 显示存储的有向图
3.3 显示从顶点到其他各顶点的最短路径
4、测试用例:
4.1正确数据:a)顶点:3;边值信息:0 1 6;0 2 4;1 2 5;2 0 6;0 0 0;
b)顶点:0;边值信息:0 0 0;
输出结果:a) v0到v1的最短路径是6,v0到v2的最短路径是4
b) 没有最短路径
4.2错误数据:a) 顶点:a
b)顶点:2;边值信息:0 3 6;0 4 4;13 5; 0 0 0;
c)顶点:3;边值信息:0 1 a;
输出结果:边值错误,请从新输入
5、问题分析:
实现本程序要解决以下几个问题:
5.1如何存储一个有向图。
5.2如何在界面中输出该有向图。
5.3如何定义起始源点。
5.4如何选择出最短路径。
5.5找到的最短路径如何输出。
数据结构的选择和概要设计
数据结构的选择:
在图的结构中,任意两个顶点之间都可能存在关系,比线性表和树要复杂。由于不存在严格的前后顺序,因而不能采用简单的数组来存储图;另一方面,如果采用链表,由于图中各顶点的度数不尽相同,最小度数和最大度数可能相差很大,如果按最大度数的顶点来设计链表的指针域,则会浪费很多存储单元,反之,如果按照各个顶点设计不同的链表结点,则会给操作带来很大的困难。
在此我选用邻接矩阵的存储结构。采用邻接矩阵存储,很容易判断图中两个顶点是否相连,也容易求出各个顶点的度。不过任何事情都不是完美的,采用邻接矩阵存储图时,测试其边的数目,必须检查边二维数组的所有元素,时间复杂度为O(n2),这对于顶点很多而边较少的图(稀疏图)是非常不合算的。
以邻接矩阵存储有向图,如图1中有向图G所示,其邻接矩阵为图 2 cost。
1
1
5
3
6
4
2
45
10
50
20
15
30
3
15
10
20
0
50
10
∞
45
∞
0
15
50
10
∞
20
0
∞
∞
∞
∞
15
∞
20
∞
0
35
∞
∞
∞
∞
30
0
∞
0
∞
3
∞
∞
∞
35
图2. 有向图 图2.矩阵cost
有向图的邻接矩阵cost[i][j]定义为
int cost [n][n];
概要设计
2.1对于最短路径问题:
最短路径是在实际应用中非常有用的工具,我们常见的两种最短路径是:
(1)从某源点到其余各顶点之间的最短路径。
(2)每一段顶点之间的最短路径
在这里我们解决第一类问题。
2.2 Dijkstra算法用于求最短路径:
Dijkstra算法是按路径长度递增的次序逐步产生源点到其他顶点间的最短路径。算法建立一个顶点集合S,初始时该集合只有源点V0,然后逐步将已求得最短路径的顶点加入到集合中,直到全部顶点都在集合S中,算法结束。
2..3 Dijkstra算法思想
设cost[i,j]=0,S为已经求得最短路径的顶点集合,distance[i]数组的每个元素表示当前状态下源点V0到Vi的最短路径。算法如下:
1) 初始化:S={V0}, distance[i]=cost[0,i]。
2) 选择一个终点Vj,满足distance[j]=MIN{ distance[i]|Vi∈V-S}。
3)把Vj加入到S中。
4)修改distance数组元素,修改逻辑为对于所有不在S中的顶点Vi.
if(distance[j]+cost[i,j] distance[i]) { distance[i]= distance
您可能关注的文档
- (毕业论文设计)-“和美、包容”的张掖湿地文化(学术精品).doc
- (毕业论文设计)-“宏业枫华”住宅小区项目策划与可行性分析报告(学术精品).doc
- (毕业论文设计)-_图像边缘提取方法研究(学术精品).doc
- (毕业论文设计)-“马鸣湖”葡萄酒品牌提升策划书(学术精品).doc
- (毕业论文设计)-“温馨旅途”旅游列车车厢座椅设计(学术精品).doc
- (毕业论文设计)-《寒夜》中的曾树生形象、汪文宣形象分析(学术精品).doc
- (毕业论文设计)-《三国演义》战争艺术分析(学术精品).doc
- (毕业论文设计)-《三国演义》中的刘备形象分析(学术精品).doc
- (毕业论文设计)-《三国志》与《三国演义》刘备形象比较(学术精品).doc
- (毕业论文设计)-《夏天来了》中班主题活动设计方案(学术精品).doc
文档评论(0)