【图】三种最短路径算法

BFS求无权图的单源最短路径

  1. d[]是保存结点2与其他结点的最短路径
  2. path[]是保存最短路径从哪一个结点过来

Dijkstra算法

弥补BFS算法只能求单源最短路径只适用于无权图,或所有边的权值都相同的图的短板

算法实例流程





结果分析

缺点

Dijkstra算法不适用于有负权值的带权图

Floyd算法(各顶点间的最短路径)

算法思想

使用动态规划思想,将问题的求解分为多个阶段
对于n个顶点的图G,求任意一对顶点 Vi-> Vj 之间的最短路径可分为如下几个阶段:

  • #初始:不允许在其他顶点中转,最短路径是?
  • #0:若允许在V0中转,最短路径是?
  • #1:若允许在V0、V1中转,最短路径是?
  • #2:若允许在V0、V1、V2中转,最短路径是?
  • #n-1:若允许在V0、V1、V2 ...... Vn-1中转,最短路径是?

算法实例演示







结果分析

Code

优缺点

  1. Floyd算法可以用于负权值带权图
  2. Floyd算法不能解决带有“负权回路”的图((有负权值的边组成回路),这种图有可能没有最短路径,如下图

三大算法的复杂度分析

BFS算法的时间复杂度要根据图的存储结构是邻接矩阵还是邻接表而定,故有两种结果!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沉淀体育生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值