ImageVerifierCode 换一换
格式:DOCX , 页数:9 ,大小:125.46KB ,
资源ID:20208991      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/20208991.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构课程设计报告Dijkstra算法求最短路径Word格式文档下载.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构课程设计报告Dijkstra算法求最短路径Word格式文档下载.docx

1、最短路径是否存在,存在的情况最短路径是多少,其次是不存在。5.问题分析 实现本程序要解决以下几个问题:如何存储一个有向图。如何在界面中输出该有向图。如何定义起始源点。如何选择出最短路径。找到的最短路径如何输出。第 2章 数据结构的选择和概要设计 1.数据结构的选择:在图的结构中,任意两个顶点之间都可能存在关系,比线性表和树要复杂。由于不存在严格的前后顺序,因而不能采用简单的数组来存储图;另一方面,如果采用链表,由于图中各顶点的度数不尽相同,最小度数和最大度数可能相差很大,如果按最大度数的顶点来设计链表的指针域,则会浪费很多存储单元,反之,如果按照各个顶点设计不同的链表结点,则会给操作带来很大的

2、困难。在此我选用邻接矩阵的存储结构。采用邻接矩阵存储,很容易判断图中两个顶点是否相连,也容易求出各个顶点的度。不过任何事情都不是完美的,采用邻接矩阵存储图时,测试其边的数目,必须检查边二维数组的所有元素,时间复杂度为 O(n2),这对于顶点很多而边较少的图(稀疏图)是非常不合算的。以邻接矩阵存储有向图。2.概要设计 对于最短路径问题:最短路径是在实际应用中非常有用的工具,我们常见的两种最短路径是:(1)从某源点到其余各顶点之间的最短路径。(2)每一段顶点之间的最短路径 在这里我们解决第一类问题。Dijkstra算法用于求最短路径:Dijkstra算法是按路径长度递增的次序逐步产生源点到其他顶点

3、间的最短路径。算法建立一个顶点集合 S,初始时该集合只有源点 V0,然后逐步将已求得最短路径的顶点加入到集合中,直到全部顶点都在集合 S 中,算法结束。2.3 Dijkstra算法思想 设 costi,j=0,S 为已经求得最短路径的顶点集合,distancei数组的每个元素表示当前状态下源点 V0到 Vi 的最短路径。算法如下:1)初始化:S=V0,distancei=cost0,i。2)选择一个终点 Vj,满足 distancej=MIN distancei|ViV-S。3)把 Vj 加入到 S 中。4)修改 distance数组元素,修改逻辑为对于所有不在 S 中的顶点 Vi.if(di

4、stancej+costi,j distancei)distancei=distancej+costi,j 5)重复操作 2)、3)、4),直到全部顶点加入到 S 中。输入顶点名称 输入每条边的信息 返回每个结点 的位置 创建图 Dijkstra算法的实现 Dwarcsij.info=NULL;for(k=0;karcnum;k+)dj=n;nfo=NULL;djarcsjk.adj);else printf(t 3000);node0=v0 初始化记录经过的顶点数都为 0。pathi.num=0;初始化顶点集合 s 为空,即还未开始。si=0;a)源点的选择:将 v0顶点加入到顶点集合 s

5、中。sv0=1 b)利用 for循环选择一个终点 Vj,使其满足 V0到 Vj 距离最短,同时将 Vj 加入集合S 中。c)根据 j 顶点调整当前的最短路径,若满足 disti distj+costji,则修改 disti的值。同时 V0到 Vi 的最短路径中经过的顶点数加 1,即 pathi.num+;并将经过的顶点存入数组 pnode即 pathi.pnodepathi.num=j d)此时一趟求最短路径完毕,将终点 V1添加到路径中。e)循环执行 d),e),f)操作,直到全部顶点加入到 S 中。第 4章 上机调试 记录调试过程中错误和问题的处理 1)当输入格式不符合程序要求时,会出现循

6、环 2)当两顶点间没有路径时,权值为无穷大,但在本程序中只能用一个具体的数字2000 代替抽象的无穷大。3)在程序的调试过程可暂时多加一些输出语句以便及时查看一下中间运行情况,并对程序规格说明作调整和改动。算法的时间和空间性能分析 时间复杂度 对于 n个顶点的有向图,求一个顶点到其他顶点的最短路径的时间为 O(n),调整最短路径的循环共执行 n-1 次,是二层循环,所以,时间复杂度是 O(n2)。空间复杂度 采用邻接矩阵存储有向图,应处理每两个顶点之间的关系,所以空间复杂度为 O(n2)。算法设计、调试的经验和体会 Dijkstra算法在上课的时候曾作为重点讲过,所以在做查找最短路径的算法时很

7、流畅,但是在输出最短路径的时候遇到了很大的阻力。因为在定义结点时,使用的是结构体数组,所以当处理 V0到每个结点的最短路径时,导致无法具体记录经过的顶点数,只能记录源点、终点前一顶点以及终点。所以本程序在输出最短路径时有较大的瑕疵,还需进一步修改。第 5章 测试结果 测试结果:注意问题:1、输入顶点个数:最大不超过 25,请输入罗马数字,若输入其他符号,无意义;2、以“字母 字母 数字”的格式输入图的信息,输入第一个字母为原点,第二个字母为终点,输入“数字”为权值,最后输入一个“字母”为顶点输入。输入完成;3、在输入完成后,屏幕显示邻接矩阵与最短路径。第 6章 学习心得体会 通过对本次课程设计

8、的学习与交流,使我学习到一部分很重要的关于编程方面思想,同时也获得了部分学习其他学科的方法。学习重在于体会,体会这种学科给我带来的思考,给我带来由浅入深的演算心得。做一次课程设计,不仅仅是为了完成某项任务,而在于是否能从这次任务中总结出一些处理同类任务的方法和技巧。每次全力的付出,都会有或多或少的收获。通过对本次课程设计涉及的问题的分析和处理,了解到学习数据结构对编程的技巧和思想方法。以前也了解过数据结构相关的书籍,但没有深入的学习,本次上机课程设计从选题上也把学习的方法应用其中,在编程时算法的理解和分析十分重要,首先的弄懂它的基本框架,用什么来算法来实现,最后通过查找部分资料,修改调试,总结

9、心得,就是一种进步。第 7章 参考文献:严蔚敏 吴伟明 编著的数据结构(C 语言版):杨晓波 主编 王 弘 王聪华 胡 永 副主编的 数据结构实验指导(C 语言版)附件:#include#include#define MAX_VERTEX_NUM 25 dj=INFINITY;G-arcsij.info=NULL;dj;dj)arcsin.adj;pathn=i;/if /for for(m=0;mvexnum;m+)if(finalm=1&m!=w)printf(t 从%c到%c 的最短路径长度为:%dt 路径是:,G-vexsw,G-vexsm,Dm);/输出最大值时则表示两点之间没有最短路径 Short(G,path,m,w);printf(%c,G-vexsm);printf(n);else printf(t 从%c到%c没有不存在路径!n,G-vexsw,G-vexsm);/判断是否存在最短路径 main()MGrph m;VertexType ch;int j;Creat_YG(&m);juzhen(&printf(n 请输入要开始的顶点:);scanf(%c,&ch);j=LocateVex(&m,ch);getchar();ShortestPath(&m,j);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1