本文转载自:Angel_Kitty

地址:https://www.cnblogs.com/ECJTUACM-873284962/p/6995648.html

已注明出处,尊重原作者!

loyd算法

1.定义概览

Floyd-Warshall算法(Floyd-Warshall algorithm)是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被用于计算有向图的传递闭包。Floyd-Warshall算法的时间复杂度为O(N3),空间复杂度为O(N2)。

2.算法描述

1)算法思想原理:

Floyd算法是一个经典的动态规划算法。用通俗的语言来描述的话,首先我们的目标是寻找从点i到点j的最短路径。从动态规划的角度看问题,我们需要为这个目标重新做一个诠释(这个诠释正是动态规划最富创造力的精华所在)

从任意节点i到任意节点j的最短路径不外乎2种可能,1是直接从i到j,2是从i经过若干个节点k到j。所以,我们假设Dis(i,j)为节点u到节点v的最短路径的距离,对于每一个节点k,我们检查Dis(i,k) + Dis(k,j) < Dis(i,j)是否成立,如果成立,证明从i到k再到j的路径比i直接到j的路径短,我们便设置Dis(i,j) = Dis(i,k) + Dis(k,j),这样一来,当我们遍历完所有节点k,Dis(i,j)中记录的便是i到j的最短路径的距离。

2).算法描述:

a.从任意一条单边路径开始。所有两点之间的距离是边的权,如果两点之间没有边相连,则权为无穷大。   

b.对于每一对顶点 u 和 v,看看是否存在一个顶点 w 使得从 u 到 w 再到 v 比己知的路径更短。如果是更新它。

3).Floyd算法过程矩阵的计算----十字交叉法

方法:两条线,从左上角开始计算一直到右下角 如下所示

给出矩阵,其中矩阵A是邻接矩阵,而矩阵Path记录u,v两点之间最短路径所必须经过的点

相应计算方法如下:

最后A3即为所求结果。

算法时间复杂度:O(n^3)

typedef struct
{        char vertex[VertexNum];                                //顶点表         int edges[VertexNum][VertexNum];                       //邻接矩阵,可看做边表         int n,e;                                               //图中当前的顶点数和边数
}MGraph; void Floyd(MGraph g)
{int A[MAXV][MAXV];int path[MAXV][MAXV];int i,j,k,n=g.n;for(i=0;i<n;i++)for(j=0;j<n;j++){   A[i][j]=g.edges[i][j];path[i][j]=-1;}for(k=0;k<n;k++){ for(i=0;i<n;i++)for(j=0;j<n;j++)if(A[i][j]>(A[i][k]+A[k][j])){A[i][j]=A[i][k]+A[k][j];path[i][j]=k;} }
}

coding AD:最短路径Floyd算法过程矩阵的计算:十字交叉法相关推荐

  1. 最短路径--Floyd算法

    Floyd算法 1.定义概览 Floyd-Warshall算法(Floyd-Warshall algorithm)是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被 ...

  2. C++ 实现带权有向图的每对顶点之间的最短路径Floyd算法(完整代码)

    基本思想是: 假设求从顶点vi到vj的最短路径. 如果从vi到vj有弧,则从vi到vj存在一条长度为arcs[i][j]的路径,该路径不一定是最短路径,尚需进行n次试探. 首先考虑路径(vi, v0, ...

  3. 【最短路径Floyd算法详解推导过程】看完这篇,你还能不懂Floyd算法?还不会?...

    简介 Floyd-Warshall算法(Floyd-Warshall algorithm),是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,与Dijkstra算法类似.该算法名称以 ...

  4. 最短路径Floyd算法图解与C++实现

    邻接矩阵特征 Floyd算法建立在对图的邻接矩阵的操作上,理解Floyd首先要理解邻接矩阵 对于有向图,邻接矩阵的一行代表该顶点的出边,一列代表该顶点的入边 对于无向图则不区分出边与入边,邻接矩阵表示 ...

  5. 最短路径——Floyd算法HDU Today(hdu2112)

    最短路径问题是图论研究中的一个经典算法问题, 旨在寻找图(由结点和路径组成的)中两结点之间的最短路径. 算法具体的形式包括: 确定起点的最短路径问题 - 即已知起始结点,求最短路径的问题. 确定终点的 ...

  6. 求最短路径Floyd算法的并行化(解APSP问题)

    求最短路径的串行算法在互联网上应该一搜一大堆,也非常简单,几行代码搞定.但Floyd的并行算法却很难搜到,github倒是有一些,但不容易运行成功,这里对这个算法的并行化进行详细的讲解,结合论文以及实 ...

  7. 最短路径——Floyd算法

    1. 背景: Floyd算法又称为插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,与Dijkstra算法类似.该算法名称以创始人之一.1978年图灵奖获得者.斯坦福大学计算 ...

  8. 最短路径(Floyd算法)(c/c++)

    如果要得到图中各个顶点之间的最短路径,方法1:可以对每一个顶点采用Dijkstra算法:方法2:可以采用Floyd算法,它是一种用来求双源点之间最短路径的算法,采用邻接矩阵来存储图 辅助结构 int ...

  9. 最短路径——Floyd算法及优化(蓝桥杯试题集)

    *对最短路径问题以及floyd算法.Dijkstra算法不是很理解的同学请移步前几篇博客~ 题目链接: http://lx.lanqiao.cn/problem.page?gpid=T15 问题描述 ...

  10. HDU2066 一个人的旅行【最短路径+Floyd算法】

    一个人的旅行 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

最新文章

  1. 青云八核服务器无限申请教程,零云旗下快速开发框架lyadmin映像使用指南(青云服务器版)...
  2. 3.4 matlab用for语句实现循环结构
  3. windows下yolov3的配置
  4. C++ 对象和实例的区别,以及用new和不用new创建类对象区别
  5. Android开发之使用TabLayout快速实现选项卡切换功能(附源码下载)
  6. OJ4007-计算字符串距离【各种dp之2】
  7. C++静态数据成员与静态函数(案例分析)
  8. java 获取http地址_java如何获取当前时间,java如何获取ip地址
  9. jdk1.8 HashMap ConcurrentHashMap
  10. YUM安装部署LAMP环境
  11. 从PHP门外汉---菜鸟---高手的进阶之路
  12. Java就业面试问题大全
  13. Sample Science 909 Lab for Mac - 909鼓声虚拟乐器
  14. python倒数切片_python切片
  15. 比较好用的服务器和网站在线测速工具分享
  16. AS3字符串正则表达式
  17. strchr()和strrchr()
  18. web渗透之文件上传漏洞
  19. 计算机课玩手机检讨500,上学带手机检讨书500字范文(精选6篇)
  20. java utf 8_java utf-8 乱码的解决方法

热门文章

  1. Linux下隐藏文件和显示隐藏文件命令
  2. 【转】photoshop CS2安装激活破解教程
  3. mysql远程备份_mysql实现自动远程备份一办法
  4. 《历史是个什么玩意儿》袁腾飞最新语录
  5. react骨架屏自动生成_网页骨架屏自动生成方案(dps)
  6. PVE安装画面灰白只显示鼠标解决方案
  7. 《逐梦旅程 WINDOWS游戏编程之从零开始》笔记6——四大变换光照与材质
  8. 【Visual C++】游戏开发笔记三十八 浅墨DirectX提高班之六 携手迈向三维世界:四大变换展身手
  9. 浅谈springboot
  10. 看风云变幻,自云淡风轻