Dijkstra 邻接矩阵 单源点最短路径

Dijkstra 单源点最短路径 邻接矩阵实现 图解说明
摘要由CSDN通过智能技术生成
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">一、定义</span>
<span style="font-family: 新宋体; font-size: 14px; orphans: 2; text-align: -webkit-auto; widows: 2; background-color: rgb(255, 255, 255);">     最短路径定义:在图中假设边有权值,从一点u到另一点v,如果有多条路径,其中路径权值和最小的路径是最短路径(一条路径的权值等于这条路径上所有边权值加和)</span>
     单源点最短路径定义:给定一个源点s,求s到所有点的最短路径。
二、解决的问题
     Dijkstra解决的是单源点最短路径问题,解决的是满足特定条件的图的最短路径问题,条件如下:
     
     1. 边权值 >= 0

     Dijkstra算法是选出的最短路径权值是递增的,如果出现负权值的边,Dijkstra不能保证结果正确。

三、用到的技术
     松弛:
     最短路径算法都用到“松弛”技术,即是否能对当前s到v的距离进行改善?表示为:if d[v] > d[u]+w[u,v],不同算法对边松弛的次数和顺序不同。
     
四、算法详解
     给出算法描述(参考<<算法导论>>第三版P383)
     
     Dijkstra(G,w,s)
     1 INITIALIZE-SINGLE-SOUREC(G,s)
     2 S= Ø
           3 Q=G.V
     4 while Q!= Ø
     5      u=EXTRACT-MIN(Q)
     6      S=S ∪{u}
     7      for each vertex v∈G.adj[u]
     8           RELAX(u,v,w)

     符号解释:
     INITIALIZE-SINGLE-SOUREC(G,s): 初始化操作,主要是两点,使源点s到所有顶点距离d[s,v]等于∞,以及对指示顶点是否已得到最短路径的数组finished[i]置false,(特别的: 初始化d[s] = 0)
     S: 大S表示已经得到最短路径的顶点集合
     Q: 表示还未得到最短路径的顶点集合
     s: 小s表示源点
      EXTRACT-MIN(Q): 从未得到最短路径的顶点集合中选出一个当前d[s,v]最小的顶点v', v'就是这一轮选出的顶点,表示 v'已经找到最短路径
     RELAX: 进行松弛操作,查看是否存在更短的路径,改善距离d[v]

     算法解释:
     第1行:初始化
     第2行:已得到最短路径顶点集合S置空
     第3行:未得到最短路径顶点集合Q初始化为图中所有顶点
   
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值