对于无权的图来说:

若从一顶点到另一顶点存在着一条路径,则称该路径长度为该路径上所经过的边的数目,它等于该路径上的顶点数减1。

由于从一顶点到另一顶点可能存在着多条路径,每条路径上所经过的边数可能不同,即路径长度不同,我们把路径长度最短(即经过的边数最少)的那条路径叫做最短路径,其路径长度叫做最短路径长度或最短距离。

对于带权的图来说:

考虑路径上各边上的权值,则通常把一条路径上所经边的权值之和定义为该路径的路径长度或称带权路径长度。

从源点到终点可能不止一条路径,把带权路径长度最短的那条路径称为最短路径,其路径长度(权值之和)称为最短路径长度或者最短距离。

Floyd算法

Floyd算法(Floyd-Warshall algorithm)又称为弗洛伊德算法、插点法,是解决给定的加权图中顶点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被用于计算有向图的传递闭包。该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名。

适用范围:无负权回路即可,边权可正可负,运行一次算法即可求得任意两点间最短路。

优缺点:

Floyd算法适用于APSP(AllPairsShortestPaths),是一种动态规划算法,稠密图效果最佳,边权可正可负。此算法简单有效,由于三重循环结构紧凑,对于稠密图,效率要高于执行|V|次Dijkstra算法。

优点:容易理解,可以算出任意两个节点之间的最短距离,代码编写简单

缺点:时间复杂度比较高,不适合计算大量数据。

时间复杂度:O(n^3);空间复杂度:O(n^2);

任意节点i到j的最短路径两种可能:

  1. 直接从i到j;
  2. 从i经过若干个节点k到j。

map(i,j)表示节点i到j最短路径的距离,对于每一个节点k,检查map(i,k)+map(k,j)小于map(i,j),如果成立,map(i,j) = map(i,k)+map(k,j);遍历每个k,每次更新的是除第k行和第k列的数。

步骤:

第1步:初始化map矩阵。
矩阵中map[i][j]的距离为顶点i到顶点j的权值;

如果i和j不相邻,则map[i][j]=∞。

如果i==j,则map[i][j]=0;                                          
第2步:以顶点A(假设是第1个顶点)为中介点,若a[i][j] > a[i][1]+a[1][j],则设置a[i][j]=a[i][1]+a[1][j]。

无向图构建最短路径长度邻接矩阵:

核心代码:

有向图构建最短路径长度邻接矩阵:

步骤:

核心代码:

最短路径模板+解析——(FLoyd算法)相关推荐

  1. 最短路径问题(Floyd算法、Dijkstra算法、Bellman-Ford算法、SPFA算法)

    导入 最短路径问题是指在一幅带权图中,找出连接两个顶点之间的所有路径中,边权和最短的那一条.如下图就是一幅带权图,边上的数字就代表该边的权值.解决最短路径问题有多种不同的算法,本文将对它们的基本思想与 ...

  2. 最短路径——Dijkstra算法与Floyd算法

    最短路径 Dijkstra算法 C语言代码实现 代码解析 Floyd算法 算法解析 C语言代码实现 最短路径问题 最短路径问题是我们经常会面临的一种决策问题.在图论中,非网图(边没有权值)的最短路径就 ...

  3. 最短路径—Dijkstra算法和Floyd算法

    Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Di ...

  4. 最短路径Dijkstra算法和Floyd算法整理、

    转载自:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.html 最短路径-Dijkstra算法和Floyd算法 Dijks ...

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

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

  6. 图的最短路径算法及matlab实现(Dijkstra算法、Floyd算法、Bellman-Ford算法、Johnson 算法)

    图的最短路径算法 Dijkstra算法 Dijkstra算法研究的是从初始点到其他任一结点的最短路径,即单源最短路径问题,其对图的要求是不存在负权值的边. Dijkstra算法主要特点是以起始点为中心 ...

  7. Floyd算法、Dijkstra算法例题

    二 1.用Floyd算法求解下图各个顶点的最短距离. 2.对于下图使用Dijkstra算法求由顶点a到顶点h的最短路径. 2.解析 1)用Floyd算法求解各个顶点的最短距离. 第一步:画出初始化距离 ...

  8. floyd算法:我们真的明白floyd吗?

    图论里一个很重要的问题是最短路径问题. 这个问题,在离散数学课上会考,数据结构与算法课上会考,图论课上会考,计算机网络里会考.... 解决最短路径问题有几个出名的算法: 1.dijkstra算法,最经 ...

  9. Floyd算法求解最短距离

    1.问题 用Floyd算法求解下图各个顶点的最短距离.写出Floyd算法的伪代码和给出距离矩阵(顶点之间的最短距离矩阵). 2.解析 Floyd算法又称为插点法,是一种利用动态规划的思想寻找给定的加权 ...

最新文章

  1. IMU, 自动驾驶定位团队“小而美”的队员
  2. 在Flex中使用HTTPService传递参数
  3. sql server 海量数据速度提升:SQL优化-索引(7) 【转】
  4. LeetCode 257. 二叉树的所有路径 思考分析
  5. 搭建Servlet在线视频
  6. python画五角星填充不同颜色_不同颜色牡丹怎么画?3种牡丹图解教你画,适合0基础学习,收藏...
  7. Django shell保存数据
  8. Linux 设置系统时间和时区2.Ubuntu
  9. asp打开exe执行本地程序._ASP.NET Core Web实现Windows 服务功能
  10. 40套各种风格住宿酒店行业网站html5模板大气商务酒店网站模板度假村酒店官方网站模板旅行酒店宾馆整站模板html5网页静态模板Bootstrap扁平化网站源码css3手机seo自适响应
  11. 2021 年 五一数学建模比赛 B 题(第四问至第六问)
  12. 【安全思维导图】————4、Git思维导图
  13. stata 自相关专题【计量经济系列(五)】
  14. Linux数据库迁移
  15. 别再问我Android前景如何了?我都要发飙了
  16. 【技术分享】ApolloEDU6.0+LGSVL联合仿真环境搭建
  17. 拿到腾讯 offer 的第二天,我从字节跳动离职了
  18. sscanf提取字符串数字
  19. pascal语法基础
  20. Excel交叉引用及其应用实例

热门文章

  1. excel实现自动排序
  2. OCR识别系列之一-----文档字符识别
  3. 【学习的好去处】:http://ucenter.51cto.com/reg_01.php?fromuid=981939reback=http://down.51cto.com
  4. C语言实现建立顺序表,修改顺序表,插入顺序表,删除顺序表
  5. DataBase培训
  6. 如何查看linux内核版本
  7. intell idea 快速启动设置
  8. List的toArray()方法和toArray(T[] a)方法
  9. CAD批量打图精灵更新至9.5.3,支持使用Adobe PDF虚拟打印机以创建高质量的PDF文件。
  10. android 微信刷步数,微信QQ自动手动刷步数支持98800步安卓应用