一.算法特点

目标:找出加权图中前往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算法的更多相关文章

  1. 【图算法】Dijkstra算法及变形

    图示: 模版: /* Dijkstra计算单源最短路径,并记录路径 m个点,n条边,每条边上的权值非负,求起点st到终点et的最短路径 input: n m st et 6 10 1 6 1 2 6 ...

  2. 单源最短路径-Dijkstra算法

    1.算法标签 贪心 2.算法描述 具体的算法描述网上有好多,我觉得莫过于直接wiki,只说明一些我之前比较迷惑的. 对于Dijkstra算法,最重要的是维护以下几个数据结构: 顶点集合S : 表示已经 ...

  3. 单源最短路径(1):Dijkstra 算法

    一:背景 Dijkstra 算法(中文名:迪杰斯特拉算法)是由荷兰计算机科学家 Edsger Wybe Dijkstra 提出.该算法常用于路由算法或者作为其他图算法的一个子模块.举例来说,如果图中的 ...

  4. 最短路径问题---Dijkstra算法详解

    侵删https://blog.csdn.net/qq_35644234/article/details/60870719 前言 Nobody can go back and start a new b ...

  5. 最短路径问题的Dijkstra算法

      问题 最短路径问题的Dijkstra算法 是由荷兰计算机科学家艾兹赫尔·戴克斯特拉提出.迪科斯彻算法使用了广度优先搜索解决非负权有向图的单源最短路径问题,算法终于得到一个最短路径树>    ...

  6. 最短路径-迪杰斯特拉(dijkstra)算法及优化详解

    简介: dijkstra算法解决图论中源点到任意一点的最短路径. 算法思想: 算法特点: dijkstra算法解决赋权有向图或者无向图的单源最短路径问题,算法最终得到一个最短路径树.该算法常用于路由算 ...

  7. 求两点之间最短路径-Dijkstra算法

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

  8. Dijkstra算法优先队列实现与Bellman_Ford队列实现的理解

    /* Dijkstra算法用优先队列来实现,实现了每一条边最多遍历一次. 要知道,我们从队列头部找到的都是到 已经"建好树"的最短距离以及该节点编号, 并由该节点去更新 树根 到其 ...

  9. 关于dijkstra算法的一点理解

    最近在准备ccf,各种补算法,图的算法基本差不多看了一遍.今天看的是Dijkstra算法,这个算法有点难理解,如果不深入想的话想要搞明白还是不容易的.弄了一个晚自习,先看书大致明白了原理,就根据书上的 ...

随机推荐

  1. 代码阅读笔记:【C-COT】

    [C-COT]:Danelljan M, Robinson A, Khan F S, et al. Beyond correlation filters: Learning continuous co ...

  2. VS2013 未找到与约束。。。

    新建项目或打开项目时,VS2013 未找到与约束...问题: 解决方案:控制面板>程序>程序和功能 找到如下选中软件右击修复 即可(修复前需关闭VS2013)

  3. Spring Schedule实现定时任务

    applicationContext.xml 1. 增加配置 <!-- 开启定时任务 --> <task:annotation-driven /> <!-- 开启注解 - ...

  4. Docker Dockerfile 一

    1.概述 创建Docker镜像的方式有三种 docker commit命令:由容器生成镜像: Dockerfile文件+docker build命令: 从本地文件系统导入:OpenVZ的模板. 关于这 ...

  5. Winfrom窗体无法关闭问题--检查是否存在重写

    问题描述: Winfrom窗体无法关闭问题----点击关闭/最大/最小化无法正常相应. 问题来源: 老版本的程序要求使用无边框的Form窗体(实现功能——设置为无边框窗体并重写窗体的关闭.最大.最小化 ...

  6. url参数 加密

    加密 url +? btoa(param) 解密 url + ?atob(param)

  7. 数据仓库专题(2)-Kimball维度建模四步骤

    一.前言 四步过程维度建模由Kimball提出,可以做为业务梳理.数据梳理后进行多维数据模型设计的指导流程,但是不能作为数据仓库系统建设的指导流程.本文就相关流程及核心问题进行解读. 二.数据仓库建设 ...

  8. 解决wordpress文章归档和分类目录小工具标题重复问题

    最近更新了wordpress,发现更新后小工具中的文章归档和分类目录出现了标题重复,经检查,是部分主题下,主题的代码已经输出了标题,而wordpress的代码又再次输出了一次.于是我们需要删除word ...

  9. 学习笔记之Sublime Text

    Sublime Text - A sophisticated text editor for code, markup and prose https://www.sublimetext.com/ A ...

  10. 文档碎片及xml讲解

    1.将数据渲染到页面的几种方式 1.字符串拼接 2.dom循环 3.模板 4.文档碎片 字符串拼接: 优势:只进行一次dom回流 缺点:原有的dom事件会消失 案例分析:原有list中有3个li,并且 ...