对于无权图来说,可以使用广度优先遍历算法BFS,实现求单源路径最短。但是,如果图带了权值,求这种最短路径可以通过经典的Dijkstra(迪杰斯特拉)算法或者是Floyd(弗洛伊德)算法来求解。当然,这两种算法也是不容易理解的。这里以简单直白的描述方式来介绍以上两种经典算法。

一、Dijkstra算法求单源最短路径问题

算法的核心是:循环遍历所有结点,找到还没有确定的最短路径,且dist最小的顶点Vi,令Final[i] = true,以此来判断是否已找到最短路径。

dist[]:记录从源点V0到其他各顶点 当前的最短路径长度,其初值取自弧上的值

path[]:表示从源点到顶点i之间的最短路径的直接前驱结点

图表阐释:

第一轮:首先易得V1->V3和V1->V4没有直接路径,标记为无穷,第一轮分别统计V1能到的V2和V5距离分别是10、5,选最短的V1->V5(dist = 5)

第二轮:统计V1->V5->Vx的路径长度,对比V1->V2(dist=10),选最小值V1->V5->V4(dist=7)

第三轮:统计V1->V5->V4->Vx、V1->V2、V1->V5->Vx的长度,选最小值

以此类推,直到所有结点都被遍历完成

需要注意的是,Dijktra不适用于边上带负权值的情况,因为不一定会得到正确的结果,可能正负相加后会小于最短路径的路径长度了。

二、Floyd算法求各顶点之间最短路径问题

算法阐释:

第一轮:先根据领接矩阵,得到一个Vi->Vj直接路径权值,如果不存在就标无穷

第二轮:找矩阵中最大的值,例如V0->V2(dist=13),逐个扫描看看有没有其他捷径(比如V0->V1->V2),发现更短的路径10

以此类推

需要注意的是,Floyd算法虽然支持边是负值的图,但是不允许带有负权值的边组成回路,Floyd算法同样支持带权无向图,因为带权无向图可以视为权值相同往返二重边的有向图

以上两种算法都是基于贪心策略的,Dijkstra算法时间复杂度为O(V²),Floyd算法时间复杂度为O(V³)

难难难!如何求图的某一顶点到其他顶点最短距离?迪杰斯特拉Dijkstra和弗洛伊德Floyd要上场了相关推荐

  1. 【数据结构】图的应用(普利姆算法、克鲁斯卡尔算法、迪杰斯特拉算法、弗洛伊德算法、拓扑排序)

    最小生成树 什么是最小生成树 是一棵树 - 无回路 - |V|个顶点一定有|V|-1条边 是生成树 - 包含全部顶点 - |V|-1条边全在图里 贪心算法 什么是"贪":每一步都要 ...

  2. c语言迪杰斯特拉算法求最短路径,迪杰斯特拉 ( Dijkstra ) 最短路径算法

    迪杰斯特拉算法介绍 迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径.它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止. 基本 ...

  3. 图的最短路径之迪杰斯特拉算法和弗洛伊德算法

    文章目录 一.迪杰斯特拉(Dijkstra)算法 1.定义描述 2.算法思想 3.算法步骤 4.算法图解 二.弗洛伊德(Floyd)算法 1.定义描述 2.算法思想 3.算法步骤 三.Dijkstra ...

  4. 数据结构——图——迪杰斯特拉(Dijkstra )算法

    数据结构--图--迪杰斯特拉(Dijkstra )算法 这是一个按路径长度递增的次序产生最短路径的算法.它的思路大体是这样的. 比如说要求图7-7-3中顶点v0到顶点v1的最短距离,没有比这更简单的了 ...

  5. Java 图的最短路径问题-迪杰斯特拉算法VS弗洛伊德算法

    1.迪杰斯特拉算法VS弗洛伊德算法 迪杰斯特拉算法通过选定的被访问顶点,求出从出发访问顶点到其他顶点的最短路径: 弗洛伊德算法中每一个顶点都是出发访问点,所以需要将每一个顶点看做被访问顶点,求出从每一 ...

  6. python基于广度优先(BFS)的迪杰斯特拉(Dijkstra)算法 求最短路径

    python深度优先与广度优先的遍历算法区别 首先要理解搜索步,一个完整的搜索步包括两个处理: a) 获得当前位置上,有几条路可供选择 b) 根据选择策略,选择其中一条路,并走到下个位置 广度优先:就 ...

  7. 图 相关算法~从头学算法【广搜、 深搜、 拓扑排序、 并查集、 弗洛伊德算法、迪杰斯特拉算法】

    图的相关主流算法主要有: 广度优先搜索 深度优先搜索 拓扑排序 并查集 多源最短路径(弗洛伊德算法) 单源最短路径(迪杰斯特拉算法) 其中呢,最基本的是前两种,也就是平时常用的广搜和深搜,本文中将概要 ...

  8. (王道408考研数据结构)第六章图-第四节4:最短路径之迪杰斯特拉算法(思想、代码、演示、答题规范)

    文章目录 一:BFS算法局限性 二:迪杰斯特拉(dijkstra)算法基本思想 三:迪杰斯特拉(dijkstra)算法代码实现 四:迪杰斯特拉(dijkstra)算法代码视频演示 五:迪杰斯特拉(di ...

  9. 【图】最短路径--迪杰斯特拉(Dijkdtra)算法

    迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径. 它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止. 算法思想 每次找到离源 ...

最新文章

  1. Hadoop记录-metastore jmx配置
  2. 开放搜索查询分析服务架构解读
  3. kali BEEF-XSS启动报错解决
  4. 根据XML更新Userprofile
  5. 损失函数_SRGAN损失函数(目标函数)详解
  6. 谐波分析显著性检验matlab,关于谐波检测方法的MATLAB仿真及综合性能分析.pdf
  7. 阿里程序员双11语录走红
  8. 逐帧动画与人运动动画制作
  9. IE CSS Bug及解决方案参考手册
  10. Java基础难点补充
  11. 零基础学python-零基础如何开始学习 Python?看完这篇从小白变大牛!
  12. html怎么实现追加表格,jQuery实现html表格动态添加新行的方法
  13. java段注释_Java的注释
  14. matlab解全微分方程,通过MATLAB求二阶全微分方程解析解
  15. springboot 图片大小压缩
  16. [Usaco2010 Dec]Treasure Chest 藏宝箱
  17. 基于MNIST数据集实现手写数字识别
  18. STM32定时器输入捕获,脉宽测量知识点
  19. laydate 周_第37周动画数据周报 |书灵记1st Kiss火热上线
  20. Cisco模拟器的基本使用

热门文章

  1. 考心理健康教育教师资格证-初出茅庐
  2. 《时代》杂志:元宇宙将如何塑造我们的未来?
  3. 上亿会员 为b站会员购众筹项目打下消费基础
  4. unity Layer CullingMask
  5. 着色Shading(1)(光照、着色)(笔记)
  6. javaScript -- touch事件详解(touchstart、touchmove和touchend)
  7. 产品思维 -- 用户体验
  8. 花了500学的seo课程教程笔记公布
  9. 大学计算机基础线下作业,【计算机基础论文】大学计算机基础教学新形式探究(共4665字)...
  10. html实现正方体原理,CSS3 实现正方体