图:最短路径

最短路径


在有向网中A点(源点)到达B点(终点)的多条路径中寻找一条各边的权值之和最小的路径,即最短路径

和最小生成树的区别

路径上不一定包含n个顶点,也不一定包含n-1条边

Dijistra 算法-单源最短路径

  1. 初始化:先找出从源点v0到各终点vk的直达路径(v0,vk),即通过一条弧到达的路径
  2. 选择:从这些路径中找出一条长度最短的路径(v0,u)
  3. 更新:对其余各条路径进行适当调整
  4. 若在图中存在(u,vk),且 (v0,u)+(u,vk)< (v0,vk) ,则以路径(v0,u,vk)代替(v0,vk

在调整后的各条路径中,再找长度最短的路径,依此类推。

按路径长度递增次序产生最短路径
  1. 把V分成两组:S - 已求出最短路径的顶点的集合;T = V-S - 尚未确定最短路径的顶点集合
  2. 将T中顶点按 最短路径递增 的次序加入到S中

保证:

  1. 从源点v0到S中各顶点的最短路径长度都不大于从v0到T中任何顶点的最短路径长度

  2. 每个顶点对应一个距离值:

    S中顶点:从v0到此顶点的最短路径长度

    T中顶点:从v0到此顶点的只包括S中顶点作中间顶点的最短路径长度

算法步骤

D[i]初值:若<v0,vi>存在,则为其权值,否则为无穷
在这里插入图片描述

在这里插入图片描述

Floyd 算法-所有顶点间最短

算法思想:

  • 逐个顶点试探
  • 从vi到vj的所有可能存在的路径
  • 选出一条长度最短的路径

在这里插入图片描述

求最短路径的步骤

初始一个n阶方阵,令其对角线元素为0,若存在弧<vi,vj>,则对应元素为权值;否则为无穷。

在这里插入图片描述

逐步试着在原直接路径中增加中间顶点,若加入中间顶点路径变短,则修改之;否则,维持原值。所有顶点试探完毕,算法结束。

在这里插入图片描述

加入A顶点,新增了C-A-B的路径;

在这里插入图片描述

加入了B顶点,A-B-C路径长度小于A-C,替换之;

在这里插入图片描述

加入C顶点,B-C-A路径长度小于B-C,替换之;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值