Floyd 算法介绍

本文介绍了Floyd算法,一种用于查找图中任意两个节点间最短路径的方法。通过逐步插入节点,更新最短路径信息,避免了重复调用Dijkstra算法的效率问题。详细步骤包括数据结构初始化、插点过程,并通过实例展示了算法如何逐步找到最短路径。

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

一 背景介绍

如果求解任意两个节点之间的最短路径,则需要以每个节点为源点,重复调用 n 次 DijKstra 算法。其实是完全没有必要这么麻烦,Floyd 算法可用于求解任意两个节点之间的最短距离。Floyd 算法又被称为插点法,其核心思想是在节点 i 与 j 之间插入节点 k,看看是否可以缩短节点 i 和 j 之间的距离。

二 算法步骤

1 数据结构

设置地图带权邻接矩阵为 G.Ege[][],即如果从节点 i 到节点 j 有边,则 G.Ege[i][j]=<i,j>的权值,否则 G.Ege[i][j]=无穷大;采用两个辅助数组:最短距离数组dist[i][j],记录从节点 i 到节点 j 的最短路径长度;前驱数组 p[i][j],记录从节点 i 到节点 j 的最短路径商节点 j 的前驱。

2 初始化

初始化 dist[i][j]=G.Ege[i][j],如果从节点 i 到节点 j 有边相连,则初始化 p[i][j]=i,否则 p[i][j]=-1。

3 插点

在节点 i 和 j 之间插入节点 k,看是否可以缩短节点 i、j 之间的距离。如果 dist[i][j] > dist[i][k] + dist[k][j],则 dist[i][j] = dist[i][k] + dist[k][j],记录节点 j 的前驱 p[i][j]=p[k][j]。

三 图解

最初的地图如下:

1 数据结构

最初 G.Ege[i][j] 的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值