最短路径问题之Dijkstra算法(C语言)

Posted bfhonor

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最短路径问题之Dijkstra算法(C语言)相关的知识,希望对你有一定的参考价值。

一、单源最短路径

(一)Dijkstra算法(带权图、无权图)

1. BFS算法的局限性

  • 带权路径⻓度——当图是带权图时,⼀条路径上所有边的权值之和,称为该路径的带权路径⻓度
  • BFS算法求单源最短路径只适用于无权图,或所有边的权值都相同的图

2. Dijkstra算法

  • 初始:从V0开始,初始化三个数组信息如下👇
  • 第1轮:循环遍历所有结点,找到还没确定最短路径,且dist 最⼩的顶点Vi,令final[i]=ture。


  • 第2轮:循环遍历所有结点,找到还没确定最短路径,且dist 最⼩的顶点Vi,令final[i]=ture。


  • 第3轮:循环遍历所有结点,找到还没确定最短路径,且dist 最⼩的顶点Vi,令final[i]=ture。


  • 第4轮:循环遍历所有结点,找到还没确定最短路径,且dist 最⼩的顶点Vi,令final[i]=ture。

3. 如何使用数组信息?

4. Dijkstra算法的时间复杂度

5. 对比:Prim 算法的实现思想

6. 用于负权值带权图


  • 事实上V0到V2 的最短带权路径长度为 5
  • 结论:Dijkstra 算法不适用于有负权值的带权图

以上是关于最短路径问题之Dijkstra算法(C语言)的主要内容,如果未能解决你的问题,请参考以下文章

最短路问题 Dijkstra算法- 路径还原

Python 图_系列之纵横对比 Bellman-Ford 和 Dijkstra 最短路径算法

贪心算法之最短路径(Dijkstra算法)

C++ 图进阶系列之纵横对比 Bellman-Ford 和 Dijkstra 最短路径求解算法

最短路径算法(Dijkstra)

最短路径算法之Dijkstra算法