最短路径-弗洛伊德算法

整理自《数据结构高分笔记》

1、算法思想

迪杰斯特拉算法可以得到从图中某一顶点到图中其余每个顶点的最短路径。如果只要求算图中任意一对顶点间的最短路径,则通常用弗洛伊德算法。

关于弗洛伊德算法的原理,我们直接通过一个例子来体会一下:

上图中对应的邻接矩阵为:

初始时要设置两个矩阵A和Path,A用来记录当前已经求得的任意两个顶点的最短路径长度,Path用来记录当前两顶点间最短路径上要经过的中间顶点。

初始时:A和Path如下所示:

第一步
以0作为中间点,参照上一步矩阵的结果,检测所有结点对,假设当前所检测的顶点对为(i,j),如果A[i][j]>A[i][0] + A[0][j],则将A[i][j]改为A[i][0] + A[0][j]的值,并将Path[i][j]改为0.经过本次检测和修改,所得矩阵如下:

第二步
以1为中间节点,参照上一步矩阵的结果,检测所有结点对,其中有:A[0][2]>A[0][1] + A[1][2]=9,所以将A[0][2]改为9,Path[0][2]改为1:

第三步
以2为中间节点,参照上一步矩阵的结果,检测所有结点对,进行修改。

第四步
以3为中间节点,参照上一步矩阵的结果,检测所有结点对,进行修改。

经过上面的步骤,得到的最终的矩阵为:

由矩阵A可以得到图中任意两点之间的最短路径长度,以及最短路径所经过的结点。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 图的概念 图是一种非线性的数据结构,一个图中有两类东西,一种是结点,一种是边.我们用V这个集合来表示节点(vert...
    fredal阅读 2,401评论 2 14
  • 第一章 绪论 什么是数据结构? 数据结构的定义:数据结构是相互之间存在一种或多种特定关系的数据元素的集合。 第二章...
    SeanCheney阅读 5,867评论 0 19
  • 最短路径算法在现实生活中也具有非常多的应用,例如在一个复杂的景区,想要从一个景点到另外一个景点,利用最短路径算法就...
    郑明明阅读 1,865评论 0 6
  • Floyd 算法 简介 Floyd 算法又称为插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径...
    廖少少阅读 8,722评论 0 1
  • 贪心算法 贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上...
    fredal阅读 9,314评论 3 52