dijkstra算法的流程

dijkstra算法的流程

ID:22679924

大小:164.51 KB

页数:6页

时间:2018-10-30

dijkstra算法的流程_第1页
dijkstra算法的流程_第2页
dijkstra算法的流程_第3页
dijkstra算法的流程_第4页
dijkstra算法的流程_第5页
资源描述:

《dijkstra算法的流程》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、Dijkstra算法的流程图需求和规格说明:Dijkstra算法是典型最短路算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低。算法本身并不是按照我们的思维习惯——求解从原点到第一个点的最短路径,再到第二个点的最短路径,直至最后求解完成到第n个点的最短路径,而是求解从原点出发的各有向路径的从小到大的排列,但是算法最终确实得到了从原点到图中其余各点的最短路径,可以说这是个副产品,对于算法的终结条件也应该以求得了原点到图中其余各点的最短

2、路径为宜。清楚了算法的这种巧妙构思后,理解算法本身就不是难题了。实现注释:想要实现的功能:Dijkstra算法是用来求任意两个顶点之间的最短路径。在该实验中,我们用邻接矩阵来存储图。在该程序中设置一个二维数组来存储任意两个顶点之间的边的权值。用户可以将任意一个图的信息通过键盘输入,让后在输入要查找的两个顶点,程序可以自动求出这两个顶点之间的最短路径。已经实现的功能:在该实验中,我们用邻接矩阵来存储图。在该程序中设置一个全局变量的二维数组,用它来存储任意两个顶点之间的边的权值。然后通过最短路径的计算,输入从任意两个顶点之间的最短路径的大小。用户手册:对于改程序,不需要客

3、户进行什么复杂的输入,关键是用来存放图的任意两个顶点之间的边的权值的二维数组的初始化,即将要通过Dijkstra算法求最短路径的图各条边的权值放入二维数组中。这样程序就可以自动的计算出任意两个顶点之间的最短路径并且进行输出。设计思想:s为源,w[u,v]为点u和v之间的边的长度,结果保存在dist[]初始化:源的距离dist[s]设为0,其他的点距离设为无穷大,同时把所有的点状态设为没有扩展过。循环n-1次:1.在没有扩展过的点中取一距离最小的点u,并将其状态设为已扩展。2.对于每个与u相邻的点v,如果dist[u]+w[u,v]

4、更新成更短的距离dist[u]+w[u,v]。此时到点v的最短路径上,前一个节点即为u。结束:此时对于任意的u,dist[u]就是s到u的距离。程序源代码:#include#include"Conio.h"#definetrue1#definefalse0#defineI9999//无穷大#defineN5//城市顶点的数目intcost[N][N]={{0,3,I,8,I},{3,0,5,I,4},{I,5,0,4,7},{8,I,4,0,2},{I,4,7,2,0}};intdist[N];//存储当前最短路径长度intv0='A'-65;//初

5、始点是Aintmain(){intfinal[N],i,v,w,min,k;printf("任意两个定点之间的最短路径如下:");for(k=0;k

6、]&&dist[w]%c:%2dt",v0+65,i+65,dist[i]);}printf("");v0++;}return0;}运行结果:调试报告:错误:运行结果如下:而正确的运行结果是这样的:出现的问题是在寻找最短

7、路径和更新dist[]数据的两个for循环之间少了一个赋值语句。如下:final[v]=true;//加入新边当每次找到从v0到其它各定点的最短路径是,将该定点标记为已经找到了最短路径,下次查找是不再对该顶点的dist[]的值进行改变。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。