关于Dijkstra 和 Bellman-ford算法的简单理解

Posted CodesKiller

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Dijkstra 和 Bellman-ford算法的简单理解相关的知识,希望对你有一定的参考价值。

两个算法都是跟求图的有源最短路径有关。Dijkstra主要针对的是无负权值节点的图,而Bellman-Ford算法则是可以处理有负权值的有向图的最短路径问题。两者都用到了一个“松弛计算”的方法,也就是在遍历图的顶点和边的过程中修改距离数组的值,从而来找出最短路径。
   Dijkstra算法针对无负权值的图,求源点到某特定点的最短距离。大概的思路是:
   将图的顶点分成两个集合S,V。S中开始时只有源点,而V中是剩下的点。有一个dis[n](n为图的节点数)的数组来记录每一个点到源点的特殊距离,这个距离都是从源点只经过S中的点而到达所求点的距离。每次的操作需要用“松弛计算”更新dis,遍历完成即可得到最短距离。
    而Bellman-Ford算法主要是针对有负权值的图。来判断该图中是否有负回路,或者存在最短路径的点。判断的思路,从源点出发,进行n - 1(n为顶点数)遍历,在每次的遍历过程中,对所有的边进行遍历判断,同样是利用松弛计算的思想,dis[v] > dis[u] + w(u, v)不断更新dis数组的值,直到循环结束。然后就是这个算法最精彩的地方了,再对所有的边进行一次遍历,看是否存在dis[v] > dis[u] + w(u, v)的边,若存在,则返回FALSE,说明图中存在负回路;若不存在,则返回TRUE,dis数组记录的就是每一个点到源点的最小值。

以上是关于关于Dijkstra 和 Bellman-ford算法的简单理解的主要内容,如果未能解决你的问题,请参考以下文章

1003 Emergency(Dijkstra,Bellman-Ford,SPFA三种解法)

浅谈 DFS(回溯算法)Dijkstra 算法Bellman-Ford 算法

单源最短路径算法——Bellman-ford算法和Dijkstra算法

求最短路径(Bellman-Ford算法与Dijkstra算法)

单源最短路径—Bellman-Ford算法 Dijkstra算法

四大算法解决最短路径问题(Dijkstra+Bellman-ford+SPFA+Floyd)