在许多路由问题中,寻找图中一个顶点到另一个顶点的最短路径或最小带权路径是非常重要的提炼过程。正式表述为,给定一个带权有向图G = (V, E) , 顶点s到v中顶点t的最短路径为在边集E中连接s到t代价最小的路径。要做到这一点首先要解决更为一般的单源最短路径问题。在单源最短路径问题中,计算从一个起始顶点s到其他与之相邻顶点之间的最短路劲。
Dijkstra算法
解决单源最短路径问题的方法之一就是Dijkstra算法。Dijkstra算法会生成一颗最短路径树,树的根为起始顶点s, 树的分支为从顶点s到图G中所有其他顶点的最短路径。此算法要求图中的所有权值均为非负数。与Prim算法类似,Dijkstra算法也采用贪心算法,它总是将当前看起来最近的最短的边加入最短路径中。
从根本上来说,Dijkstra算法通过选择一个顶点,并不断探测与之相关的边,类似广度优先搜索,找出当前距离最近的点。
结合下图简要的说一下算法运行过程:
1. 求从顶点a开始的单源最短路径,就是图中每个点距离a的最短路。
2. 选定a,标记访问过了,首先初始化图中各点与a的距离,在实际代码中一般用一个数组dist[i]存放这个

Dijkstra算法是解决图中单源最短路径问题的一种有效方法,尤其适用于所有权值非负的图。该算法通过贪心策略,每次选择当前未访问顶点中距离起点最近的一个,逐步构建最短路径树。在实际应用中,Dijkstra算法常用于路由问题和其他需要计算最短路径的场景。
最低0.47元/天 解锁文章
1090

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



