图算法之——dijkstra算法
一.算法特点
目标:找出加权图中前往X的最短路径
适用于:无环有向加权图,且各边的权值为正
二.算法思路
三.算法示例演示
如下图,请找出结点v1到其他各个结点的最短路径:
首先创建一个字典(散列表),该字典的键表示结点名字,值表示从v1到该结点的最短路径。下图中,字典初始化后只有v1的邻居节点被写入值:
按照算法的思路,我们先找到距离起点最近的结点(v3),结点v3已经是最短路径了(因为迪杰特斯拉算法处理的是边权值为正的图,所以经其他任何节点再到v3的路径和不会小于v1到v3的权值,之后的步骤同理)。接着寻找v3的邻居节点(v4),更新v4的开销为10+50=60。此外,要完成这个需求,还应该定义一个字典,保存结点的父节点信息。此处将v4的父节点标为v3,并且把v3标记为处理过的结点。
接着再找到下一个距离v1最近并且没有被标记过的结点,重复以上步骤,v5的邻居节点有v4和v6两个,经过v5到达v4和v6的路径分别为50和90,将字典中对应的值修改后,将v4和v6的父节点改为v5(此处若经过v5的值大于原来的值则不应该修改父节点),标记v5为已处理结点。
继续按照循环的思路,最后字典被修改为:
到目前,只有v2结点没有被处理过了。然而此时应当理解∞的含义,即没有任何一个结点可以到达v2结点,因此v2结点是不可到达的,没有最近距离。通过上述字典和记录父节点的列表即可求出最短距离及最短路径。
四.算法实现(Python)
图算法之——dijkstra算法的更多相关文章
- 【图算法】Dijkstra算法及变形
图示: 模版: /* Dijkstra计算单源最短路径,并记录路径 m个点,n条边,每条边上的权值非负,求起点st到终点et的最短路径 input: n m st et 6 10 1 6 1 2 6 ...
- 单源最短路径-Dijkstra算法
1.算法标签 贪心 2.算法描述 具体的算法描述网上有好多,我觉得莫过于直接wiki,只说明一些我之前比较迷惑的. 对于Dijkstra算法,最重要的是维护以下几个数据结构: 顶点集合S : 表示已经 ...
- 单源最短路径(1):Dijkstra 算法
一:背景 Dijkstra 算法(中文名:迪杰斯特拉算法)是由荷兰计算机科学家 Edsger Wybe Dijkstra 提出.该算法常用于路由算法或者作为其他图算法的一个子模块.举例来说,如果图中的 ...
- 最短路径问题---Dijkstra算法详解
侵删https://blog.csdn.net/qq_35644234/article/details/60870719 前言 Nobody can go back and start a new b ...
- 最短路径问题的Dijkstra算法
问题 最短路径问题的Dijkstra算法 是由荷兰计算机科学家艾兹赫尔·戴克斯特拉提出.迪科斯彻算法使用了广度优先搜索解决非负权有向图的单源最短路径问题,算法终于得到一个最短路径树> ...
- 最短路径-迪杰斯特拉(dijkstra)算法及优化详解
简介: dijkstra算法解决图论中源点到任意一点的最短路径. 算法思想: 算法特点: dijkstra算法解决赋权有向图或者无向图的单源最短路径问题,算法最终得到一个最短路径树.该算法常用于路由算 ...
- 求两点之间最短路径-Dijkstra算法
Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.D ...
- Dijkstra算法优先队列实现与Bellman_Ford队列实现的理解
/* Dijkstra算法用优先队列来实现,实现了每一条边最多遍历一次. 要知道,我们从队列头部找到的都是到 已经"建好树"的最短距离以及该节点编号, 并由该节点去更新 树根 到其 ...
- 关于dijkstra算法的一点理解
最近在准备ccf,各种补算法,图的算法基本差不多看了一遍.今天看的是Dijkstra算法,这个算法有点难理解,如果不深入想的话想要搞明白还是不容易的.弄了一个晚自习,先看书大致明白了原理,就根据书上的 ...
随机推荐
- virtualBox 虚拟机下nginx设置不缓存静态文件不起作用解决办法
最近开发的时候,调整js时会一直使用缓存文件,无法显示改动!nginx配置静态文件add_header Cache-Control no-cache;也不起作用,很苦恼! nginx配置代码:even ...
- Linux(CentOS7.0)下 C访问MySQL (转)
按语: 最近项目在云服务器上 centos6.8,安装了mysql5.5.39 server和client,但C连接不知所措: 后在官网下载了 devel.share .share-comp ...
- 解决The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone
Spring Boot JPA 使用Mysql是出现如下错误: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represe ...
- ML: 聚类算法R包 - 模型聚类
模型聚类 mclust::Mclust RWeka::Cobweb mclust::Mclust EM算法也称为期望最大化算法,在是使用该算法聚类时,将数据集看作一个有隐形变量的概率模型,并实现模型最 ...
- AXI Quad SPI
AXI Quad SPI 信息来源
- OpenEXR的读取机制
这还是一篇学习笔记,知识重点还是领会完再敲一遍比较好. OpenEXR通过RgbaInputFile这个接口读取RGBA ONLY图像文件信息,该接口通过dataWindow()方法获取图像边界坐标信 ...
- scp命令拷贝
文件拷贝,将172.16.1.2中的文件拷贝到本机中 scp root@172.16.1.2:/home/root/others/music/1.mp3 /home/space/music/1.mp3 ...
- WPF DataGrid 用法
XAML==> <Window x:Class="QueueSystem.MainWindow" xmlns="http://schemas.microsof ...
- sqlserver 全局事务查询
-- 此语句用于查看最老的活动事务.未完成的分布式事务或复制事务的信息. dbcc opentran -- 通过动态管理视图查看活动事务 select*from sys.dm_tran_active_ ...
- Node.js 0.12: 正确发送HTTP POST请求
Node.js 0.12: 正确发送HTTP POST请求 本文针对版本:Node.js 0.12.4 之前写过一篇Node.js发送和接收HTTP的GET请求的文章,今天再写一篇,讲发送POST的请 ...