美文网首页
4. Dijkstra算法

4. Dijkstra算法

作者: 執著我們的執著 | 来源:发表于2018-07-04 20:11 被阅读0次

Dijkstra算法 : 求图中某一顶点到其余各顶点的最短路径;

算法:
  1. 初始化:引入3个辅助数组dist[ ],path[ ],set[ ],源顶点为v0
    • dist[vi] :表示当前已找到的源v0终vi最短路径长度
      初态:若v0 -> vi上有边(一条边),则dist[vi]为边上的权值,否则置为∞
    • path[vi] :表保存从v0vi最短路径上vi的前一个顶点(也就是中转站
      初态:若v0 -> vi上有边(一条边直连),则path[vi] = v0,否则置为path[vi] = -1
    • set[ ] :为标记数组,set[vi]=0表示viT中,即vi没有并入最短路径中;set[vi]=1表示viS中,表示已并入最短路径中
      初态:源顶点为1,其余都为0
      [注] S表示已并入最短路径的顶点集合(即set[ ]=1的顶点),T表示未并入最短路径的顶点集(即set[ ]=0的顶点),
  2. 执行过程
    (1) 从当前剩余顶点(即set[ ]=0)的顶点的dist[ ]中取最小值,假设为Vu点,将set[Vu]设为1
    (2) 循环扫描图中顶点,对每个顶点做如下检测:设当前扫描的顶点为vj
          §1. 检测vj是否已被并入S,即set[vj]=1,若是,则跳过它,什么都不做
          §2. 若set[vj] = 0,则比较 dist[vj]dist[Vu]+g[Vu][vj]g[Vu][vj]Vu->vj的权值)
              1' 若 dist[vj] <= dist[Vu]+g[Vu][vj],则什么都不做
              2' 若 dist[vj] > dist[Vu]+g[Vu][vj],则用右边小的值代替dist[vj]的值,并将path[vj]=Vu
    解释:情况2'中dist[Vu]+g[Vu][vj] 小,就是视Vu为中转站,通过中转站Vu使得到vj的距离比它之前的值小,也就是说明了中转站减小了最短路径,并将中转站顶点设为vj的前一个顶点
    (3) 对(1) (2)循环执行n-1次(为图中顶点的个数),即可得到v0到其余所有顶点的最短路径

[注]

  • set[ ]是用来看还有哪些顶点没有加入到最短路径中
  • path[ ]是用来看若用来中转站,通过path[ ]可以找到中转这条路径
  • dist[ ]是找当前最小的路径长度


示例:
解析:
推演过程
由上表可知,顶点0到顶点1~6的最短路径长度为 4,5,6,10,9,16
path[] : -1,0,1,0,5,2,4
path[]数组保存的是前驱关系,也就是保存了一棵用双亲存储结构存储的树,通过path[]可打印出从源顶点到任一顶点的最短路径上所经过的所有顶点
借助栈实现逆向输出:
Code




Dijkstra算法代码实现

相关文章

  • 4. Dijkstra算法

    Dijkstra算法 : 求图中某一顶点到其余各顶点的最短路径; 算法: 初始化:引入3个辅助数组:dist[ ]...

  • 图的最短路径

    Dijkstra算法&Floyd算法 一、Dijkstra算法 Dijkstra算法思想: 只计算v0出发到其他顶...

  • 深入解析Dijkstra's Algorithm ——

    什么是Dijkstra算法? Dijkstra算法是用来寻找最短路径最著名的算法之一。具体来说,Dijkstra算...

  • Dijkstra 算法

    Dijkstra 算法 前言 为了达到任意两结点的最短路径,我们有几种算法可以实现:Dijkstra 算法、Flo...

  • 寻找最短路径

    这方面的经典算法,有Dijkstra算法和Floyd算法。 下面简单说一下基于Dijkstra算法略作小改动的一个...

  • 7.8图的应用:最短路径问题

    最短路径问题:Dijkstra算法 ❖解决带权最短路径问题的经典算法是以发明者命名的“Dijkstra算法”❖这是...

  • 最短路径

    两种最短路径算法:Dijkstra和Bellman 学习资料:《啊哈!算法》 Dijkstra 问题:在一张图中,...

  • 模板

    并查集 拓扑排序 Floyd算法 Dijkstra算法

  • 最短路径解决方法

    Floyd算法;Dijkstra算法;Bellman-Ford算法;动态规划算法

  • 最短路径算法(旅游规划实例java语言)

    Dijkstra算法 简介 迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点(不是...

网友评论

      本文标题:4. Dijkstra算法

      本文链接:https://www.haomeiwen.com/subject/kjldeftx.html