最短路径问题

本文详细介绍了Dijkstra算法用于求解两点间及单源点的最短路径,以及Floyd算法处理所有顶点间最短路径的方法。通过实例展示了这两种算法的步骤和过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最短路径

第一类问题:两点间的最短路径 ----Dijkstra算法

第一类问题:某源点到其他各点最短路径 ----Floyd算法

Dijkstra算法

  • 单源点最短路径

1.初始化:先从源点找到到各个终点的路径

2.选择:从路径中选出一条长度最短的路径

3.更新:然后对其余路径进行适当调整

 如下例所示

假设有下面这样的图:
    A
   / \
  6   1
 /     \
C---2---B---3---D
 \       \
  4       1
   \       \
    E---1---F
1.首先将所有节点的最短路径距离设置为无穷大,除了起点A,我们将它的最短路径距离设置为0。
最短路径距离:
A: 0
B: ∞
C: ∞
D: ∞
E: ∞
F: ∞
​
2.从A开始,我们考虑它的邻居B和C。通过A到达它们的距离分别是1和6。我们更新B和C节点的最短路径距离。
最短路径距离:
A: 0
B: 1 (由A更新)
C: 6 (由A更新)
D: ∞
E: ∞
F: ∞
​
3.下一步,选择最短路径距离最小的节点,这里是B,权重为1,然后考虑B的邻居节点D、F、C。通过B到达D的距离是4 (1+3),到F是2 (1+1)。更新D和F的最短路径距离。
最短路径距离:
A: 0
B: 1
C: 3 (由B更新)
D: 4 (由B更新)
E: ∞
F: 2 (由B更新)
​
4.下一步中,我们选择新的最短路径距离最小的节点,即F,权重为2。F的邻居有E和B,但通过F到B不会比已有的路径更短,我们检查到E的距离,是3。更新E的最短路径距离
最短路径距离:
A: 0
B: 1
C: 3 (由B更新)
D: 4 (由B更新)
E: 3 (由F更新)
F: 2
​
5.接下来,我们选择E,跟新C为7(3+4),但这没有比现在的3小所以保留。
最短路径距离:
A: 0
B: 1
C: 6
D: 4
E: 3
F: 2

Folyd算法

  • 所有顶点间的最短路径

1.逐个顶点试探

2.列出两顶点存在的所有可以

3.选出最短的初始距离矩阵

 如下例所示

A <----1----> B ----2----> C
 \                        ^
  \                      /
   --------4------------
  A B C
A 0 ∞ ∞
B ∞ 0 ∞
C ∞ ∞ 0

加入边缘的权重,AB距离是1,B到C的距离是2,A到C的距离是4
  A B C
A 0 1 4      AB AC       
B 1 0 2   BA    BC
C ∞ ∞ 0   

选择节点B作为中间节点。我们检查所有通过B的路径,看看能否改进
  A B C
A 0 1 3      AB ABC
B 1 0 2   BA    BC
C ∞ ∞ 0

选择节点A作为中间节点。我们检查所有通过B的路径,看看能否改进
不能

选择节点C作为中间节点。我们检查所有通过B的路径,看看能否改进
不能

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值