查看原文:http://www.wyblog.cn/2016/12/09/%e5%b8%a6%e6%9d%83%e8%b7%af%e5%be%84%e6%9c%80%e7%9f%ad-dijkstra%e7%ae%97%e6%b3%95/Dijkstra算法是经典的求取带权最短路径的算法。 它采用贪心的思想,在每一步仅选取一个能够被确定为从已知顶点到该顶点已经为最短路径的顶点,并动态地去规划该顶点到其他顶点的最短路径距离。 本篇博文算法思想参考自《数据结构及算法分析》这本书,并将书本里的思想以及代码伪码给实现了。 图的实现还是采用邻接表的方式,比较节省空间。在每一步求取未知的最小路径的顶点时,可以采用小顶堆来实现,我这里是采用遍历的方式,因为顶点结构内包含了是否是未知的标记。 从Dijkstra算法的原理上看,要设置的变量有:
- 要确定顶点是已知还是未知的,所以需要一个Known变量。
- 要确定带权的路径的长度,需要一个dist变量。
- 要确定路径信息,所以每一个顶点结构体内部要储存最短路径到达此顶点的上一个顶点。
- 路径的权值,就储存在邻接表链表节点的weight变量里。
打印路径信息的函数采用递归的方式,逐层向上查找,直到达到起点。 算法代码如下:
#include<cstdio> #include<iostream> #include<queue> using namespace std; #define MAX_VERTEX_NUM 100 #define Ver
带权路径最短——Dijkstra算法
最新推荐文章于 2024-12-12 16:48:46 发布
本文介绍了Dijkstra算法,一种解决带权最短路径问题的经典算法。通过贪心策略逐步确定最短路径,并以邻接表节省空间。文章详细讲解了算法思路,包括使用Known变量跟踪已知顶点,dist变量记录路径长度,以及如何存储路径信息。同时,提供了基于邻接表和遍历的实现方式,以及使用递归打印路径的方法。

最低0.47元/天 解锁文章
2309

被折叠的 条评论
为什么被折叠?



