最短路

本文介绍了三种经典的最短路算法:Floyd算法,用于求解所有节点间的最短路径;Dijkstra算法,适用于非负权图,高效求解单源最短路径;以及Bellman-Ford算法,能处理含有负权边的情况。通过这些算法,可以解决图论中的关键问题。
摘要由CSDN通过智能技术生成

最短路



一、最短路相关概念

在这里插入图片描述

二、Floyd

我们定义一个数组 dis[k][x][y] ,表示只允许经过结点 V1 到 Vk ,结点 x 到结点 y 的最短路长度。

for (k = 1; k <= n; k++) {
  for (i = 1; i <= n; i++) {
    for (j = 1; j <= n; j++) {
      dis[i][j] = min(dis[i][j], dis[i][k] + dis[k][j]);
    }
  }
}

三、Dijkstra

只适用于非负权图,但是时间复杂度非常优秀。也是用来求单源最短路径的算法。
主要思想是,将结点分成两个集合:已确定最短路长度的,未确定的。

一开始第一个集合里只有 S (源点)。

然后重复这些操作:
1.对那些刚刚被加入第一个集合的结点的所有出边执行松弛操作。
2.从第二个集合中,选取一个最短路长度最小的结点,移到第一个集合中。

对那些刚刚被加入第一个集合的结点的所有出边执行松弛操作。
从第二个集合中,选取一个最短路长度最小的结点,移到第一个集合中。
直到第二个集合为空,算法结束。

四、Bellman-Ford

一种基于松弛(relax)操作的最短路算法。
支持负权。
能找到某个结点出发到所有结点的最短路,或者报告某些最短路不存在。
在国内,你可能听说过的“SPFA”,就是 Bellman-Ford 算法的一种实现。(优化)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值