Floyd算法的手工快速求解

本文通过实例详细解析Floyd算法,介绍如何手工快速求解图中任意两点间的最短路径。核心思想是通过中间点寻找最短路径,并通过画十字和排除法简化步骤,提高效率。最终通过逐步以各顶点为中间点进行运算,得出完整的最短路径矩阵。
摘要由CSDN通过智能技术生成

前言

关于Floyd算法的手工快速求解,对考研数据结构大大滴有好处,如果感觉有用的话点个赞吧。

一、题目

利用Floyd算法求下图任意两顶点间的最短路径(图片来自天勤2021年数据结构高分笔记)

二、步骤

1.把图转成邻接矩阵形式

这一步相信各位大帅比都会。很简单,看图发现有4个点,画出4×4的空表,观察图又发现0到1有条,边权值为5,那么第0行第1列这个单元填入5,其他边同理。最后把剩下没有填完的单元全部写无穷(为了方便这里用X代替),表示该单元对应的两点之间无路径。得到邻接矩阵如下:

邻接矩阵
初始时,两点最短路径中间顶点矩阵path如下(起初没有中间顶点,用-1表示):
在这里插入图片描述

2.画十字

相信各位都知道Floyd算法的核心思想就是找中间点来缩短两点之间的距离。若以第i个点作为中间点,则在邻接矩阵的(i,i)单元画十字,下面以0作为中间点开始:

在这里插入图片描述

3.排除

首先,画十字的部分(黄色)不要修改。其次,因为对角线部分全0,所以这部分一定不需要修改。最后,看十字(黄色)部分,找到有X(无穷)的单元,在上面继续画十字。至于为什么这么做,别问,找一个题来照着做。
在这里插入图片描述
以被选中的X为中心画十字排除,完毕后结果如下(橙色为被排除部分):
在这里插入图片描述

4.比较

剩下的每个绿色单元都有横竖对应的两个黄色单元,如下图黑色框起部分:
在这里插入图片描述
在这里插入图片描述

计算两个黄色单元的和,若该和小于绿色单元的值,则用该和替换绿色单元的值,否则不做改变。

上图由发现3+5>3;3+7>2;两个单元均不改变。

5.得出一轮结果

由上面的分析可知,以0作为中间点没有缩短任何距离
在这里插入图片描述

6.将剩余其他顶点重复2-5操作

在顶点0处理结果的基础上继续操作剩下的1、2、3顶点
顶点1作为中间点
(1)画十字
在这里插入图片描述
(2)排除

在这里插入图片描述

(3)比较
观察上一个图绿色单元X、7、2,绿X对应黄色单元5和4,绿7对应黄色单元5和2,绿2对应黄色单元3和2,发现5+4<X;5+2=7;3+2>2;所以只改变第一行第三个单元,该单元的值变为对应的两个黄色单元值之和,即5+4=9,结果如下
在这里插入图片描述
值改变后path矩阵的相应位置也要修改成中间顶点的编号,因为本次取中间顶点为1,所以修改如下:
在这里插入图片描述

顶点2作为中间点
(1)画十字
在这里插入图片描述
(2)排除
在这里插入图片描述
(3)比较
观察发现三个值为X的绿色单元满足修改条件,把它们的值分别修改为对应的两个黄色单元之和
在这里插入图片描述
值改变后path矩阵的相应位置也要修改成中间顶点的编号
在这里插入图片描述

顶点3作为中间点
(1)画十字
在这里插入图片描述
(2)排除
在这里插入图片描述
(3)比较
在这里插入图片描述
值改变后path矩阵的相应位置也要修改成中间顶点的编号
在这里插入图片描述

7.最终结果

当所有顶点都完成后即可得到最终结果

任意两点最短路径为
在这里插入图片描述
两点最短路径中间顶点矩阵path为
在这里插入图片描述

结语

王道、天勤给的方法都是检查所有顶点对,一一进行比较,个人感觉不够快。此方法重要在于画十字,等你熟练之后,十字一画,要改哪个地方,值是多少,一目了然。根本不需要检查所有顶点对,分分钟写出结果。

  • 12
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值