难难难!如何求图的某一顶点到其他顶点最短距离?迪杰斯特拉Dijkstra和弗洛伊德Floyd要上场了
对于无权图来说,可以使用广度优先遍历算法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要上场了相关推荐
- 【数据结构】图的应用(普利姆算法、克鲁斯卡尔算法、迪杰斯特拉算法、弗洛伊德算法、拓扑排序)
最小生成树 什么是最小生成树 是一棵树 - 无回路 - |V|个顶点一定有|V|-1条边 是生成树 - 包含全部顶点 - |V|-1条边全在图里 贪心算法 什么是"贪":每一步都要 ...
- c语言迪杰斯特拉算法求最短路径,迪杰斯特拉 ( Dijkstra ) 最短路径算法
迪杰斯特拉算法介绍 迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径.它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止. 基本 ...
- 图的最短路径之迪杰斯特拉算法和弗洛伊德算法
文章目录 一.迪杰斯特拉(Dijkstra)算法 1.定义描述 2.算法思想 3.算法步骤 4.算法图解 二.弗洛伊德(Floyd)算法 1.定义描述 2.算法思想 3.算法步骤 三.Dijkstra ...
- 数据结构——图——迪杰斯特拉(Dijkstra )算法
数据结构--图--迪杰斯特拉(Dijkstra )算法 这是一个按路径长度递增的次序产生最短路径的算法.它的思路大体是这样的. 比如说要求图7-7-3中顶点v0到顶点v1的最短距离,没有比这更简单的了 ...
- Java 图的最短路径问题-迪杰斯特拉算法VS弗洛伊德算法
1.迪杰斯特拉算法VS弗洛伊德算法 迪杰斯特拉算法通过选定的被访问顶点,求出从出发访问顶点到其他顶点的最短路径: 弗洛伊德算法中每一个顶点都是出发访问点,所以需要将每一个顶点看做被访问顶点,求出从每一 ...
- python基于广度优先(BFS)的迪杰斯特拉(Dijkstra)算法 求最短路径
python深度优先与广度优先的遍历算法区别 首先要理解搜索步,一个完整的搜索步包括两个处理: a) 获得当前位置上,有几条路可供选择 b) 根据选择策略,选择其中一条路,并走到下个位置 广度优先:就 ...
- 图 相关算法~从头学算法【广搜、 深搜、 拓扑排序、 并查集、 弗洛伊德算法、迪杰斯特拉算法】
图的相关主流算法主要有: 广度优先搜索 深度优先搜索 拓扑排序 并查集 多源最短路径(弗洛伊德算法) 单源最短路径(迪杰斯特拉算法) 其中呢,最基本的是前两种,也就是平时常用的广搜和深搜,本文中将概要 ...
- (王道408考研数据结构)第六章图-第四节4:最短路径之迪杰斯特拉算法(思想、代码、演示、答题规范)
文章目录 一:BFS算法局限性 二:迪杰斯特拉(dijkstra)算法基本思想 三:迪杰斯特拉(dijkstra)算法代码实现 四:迪杰斯特拉(dijkstra)算法代码视频演示 五:迪杰斯特拉(di ...
- 【图】最短路径--迪杰斯特拉(Dijkdtra)算法
迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径. 它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止. 算法思想 每次找到离源 ...
最新文章
- Hadoop记录-metastore jmx配置
- 开放搜索查询分析服务架构解读
- kali BEEF-XSS启动报错解决
- 根据XML更新Userprofile
- 损失函数_SRGAN损失函数(目标函数)详解
- 谐波分析显著性检验matlab,关于谐波检测方法的MATLAB仿真及综合性能分析.pdf
- 阿里程序员双11语录走红
- 逐帧动画与人运动动画制作
- IE CSS Bug及解决方案参考手册
- Java基础难点补充
- 零基础学python-零基础如何开始学习 Python?看完这篇从小白变大牛!
- html怎么实现追加表格,jQuery实现html表格动态添加新行的方法
- java段注释_Java的注释
- matlab解全微分方程,通过MATLAB求二阶全微分方程解析解
- springboot 图片大小压缩
- [Usaco2010 Dec]Treasure Chest 藏宝箱
- 基于MNIST数据集实现手写数字识别
- STM32定时器输入捕获,脉宽测量知识点
- laydate 周_第37周动画数据周报 |书灵记1st Kiss火热上线
- Cisco模拟器的基本使用
热门文章
- 考心理健康教育教师资格证-初出茅庐
- 《时代》杂志:元宇宙将如何塑造我们的未来?
- 上亿会员 为b站会员购众筹项目打下消费基础
- unity Layer CullingMask
- 着色Shading(1)(光照、着色)(笔记)
- javaScript -- touch事件详解(touchstart、touchmove和touchend)
- 产品思维 -- 用户体验
- 花了500学的seo课程教程笔记公布
- 大学计算机基础线下作业,【计算机基础论文】大学计算机基础教学新形式探究(共4665字)...
- html实现正方体原理,CSS3 实现正方体