[数据结构]Dijkstra算法求单源最短路径
概念
求带权有向图中某个源点到其余各个顶点的最短路径,最常用的是Dijkstra算法。该算法设置一个集合S记录已求得的最短路径的顶点,可用一个数组s[]来实现,初始化为0,当s[Vi]=1时表示将顶点Vi放入S中,初始时把源点V0放入S中。此外,在构造过程中还设置了两个辅助数组:
dist[]:记录了从源点v0到其他各个顶点当前的最短路径长度,dist[i]初值为arcs[V0][i]。
path[]:path[i]表示从源点到顶点i之间的最短路径的前驱结点,在算法结束时,可根据其值追溯得到源点V0到定点Vi的最短路径。
假设从定点0出发,即V0=0,集合S最初只包含顶点0,邻接矩阵arcs表示带权有向图,arcs[i][j]表示有向边
实例及解析
分析步骤(注意这是个有向图!):
- 第一趟,由于我们从V1开始,可以直接遍历到V2,V5;我们可以看到V1-V2的权值为10,V1-V5的权值为5,所以我们选最短的那一条路径,即V1-V5。
- 第二趟,我们可以从V1,V5,可以直接遍历到V2,V3,V4;V5-V2的权值为8(我们也可以从v1-v2,但是从v1-v5-v2的路径更短),V5-V3的权值为14,V5-V4的权值为7,我们选择最短的那一条路径,即V5-V4。
- 第三趟,我们可以从V1,V5,V4出发,可以遍历到V2,V3;V1-V5-V2为8,V1-V5-V4-V3为13,所以选最短的那一条,即V1-V5-V2为8。
- 第四趟,只剩下最后一个顶点,也就是V3,从V1-V5-V2-V3路径长度为9,遍历完成。
算法复杂度
这个算法的时间复杂度为O(|V|²),如果要找出所有结点对之间的最短距离,则需要对每个结点运行一次Dijkstra算法,时间复杂度为O(|V|³)。
注意
如果边上带有负权值,Dijkstra算法并不使用。若允许边上带有负权值,则可能出现当与S内某点以负边连接的点确定其最短路径时,它的最短路径加上这条负边的权值结果可能小于a原先确定的最短路径长度,而此时a在Dijkstra算法下是无法更新的。
[数据结构]Dijkstra算法求单源最短路径的更多相关文章
- Dijkstra算法求单源最短路径
Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店 ...
- SPFA算法与dijkstra算法求单源最短路径的比较
SPFA是运用队列,把所有的点遍历到没有能更新的,点可以重复入队 如题http://www.cnblogs.com/Annetree/p/5682306.html dijkstra是每次找出离源点最近 ...
- 51nod 1445 变色DNA ( Bellman-Ford算法求单源最短路径)
1445 变色DNA 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 有一只特别的狼,它在每个夜晚会进行变色,研究发现它可以变成N种颜色之一,将这些颜色标号为0,1 ...
- [数据结构与算法-15]单源最短路径(Dijkstra+SPFA)
单源最短路径 问题描述 分别求出从起点到其他所有点的最短路径,这次主要介绍两种算法,Dijkstra和SPFA.若无负权优先Dijkstra算法,存在负权选择SPFA算法. Dijkstra算法 非负 ...
- 【转】Dijkstra算法(单源最短路径)
原文:http://www.cnblogs.com/dolphin0520/archive/2011/08/26/2155202.html 单源最短路径问题,即在图中求出给定顶点到其它任一顶点的最短路 ...
- Dijkstra算法详细(单源最短路径算法)
介绍 对于dijkstra算法,很多人可能感觉熟悉而又陌生,可能大部分人比较了解bfs和dfs,而对dijkstra和floyd算法可能知道大概是图论中的某个算法,但是可能不清楚其中的作用和原理,又或 ...
- Til the Cows Come Home(poj 2387 Dijkstra算法(单源最短路径))
Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 32824 Accepted: 11098 Description Bes ...
- Dijkstra算法解决单源最短路径
单源最短路径问题:给定一个带权有向图 G = (V, E), 其中每条边的权是一个实数.另外,还给定 V 中的一个顶点,称为源.现在要计算从源到其他所有各顶点的最短路径长度.这里的长度是指路上各边权之 ...
- 【算法】Dijkstra算法(单源最短路径问题)(路径还原) 邻接矩阵和邻接表实现
Dijkstra算法可使用的前提:不存在负圈. 负圈:负圈又称负环,就是说一个全部由负权的边组成的环,这样的话不存在最短路,因为每在环中转一圈路径总长就会边小. 算法描述: 1.找到最短距离已确定的顶 ...
- AOJ GRL_1_A: Single Source Shortest Path (Dijktra算法求单源最短路径,邻接表)
题目链接:http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=GRL_1_A Single Source Shortest Path In ...
随机推荐
- JavaScript&Bootstrap
1. JS介绍 JS诞生主要是完成页面的数据验证.因此它运行在客户端,需要浏览器来执行JS代码 JS最早取名LiveScript:为了吸引更多的Java程序员,更名JavaScript JS是弱类型, ...
- EBI、DDD及其演变架构史
一.引子 聊架构总离不开"领域驱动架构",大多能聊到DDD(Domain-Driven Design),实际上早期思想EBI架构 1992年就诞生了.核心价值点在于:关注核心业务领 ...
- iview table json数据里的num排序问题
title: 'Num', key: 'num', sortable: true, sortMethod:function(a,b,type){ //可以用Number()或者parseInt(a)转 ...
- 【题解】CF919D Substring
题面传送门 解决思路: DP 与拓扑结合.\(f_{i,j}\) 表示到 \(i\) 位置 \(j\) 的最大次数. 将 \(a \sim z\) 转成数字 \(0\sim 25\) ,方便存储. 考 ...
- 镜像制作工具diskimage-builder介绍
简介 diskimage-builder(简称dib)是一款用于构建系统镜像的工具,它被设计用于OpenStack的TripleO项目,支持qocw2.vhd.raw等主流镜像格式. 在众多系统镜像构 ...
- 2022-11-08 Acwing每日一题
本系列所有题目均为Acwing课的内容,发表博客既是为了学习总结,加深自己的印象,同时也是为了以后回过头来看时,不会感叹虚度光阴罢了,因此如果出现错误,欢迎大家能够指出错误,我会认真改正的.同时也希望 ...
- ubuntu 下安装串口终端
查看串口设备 # Ubuntu 22.04自动卸载CH341串口 sudo apt remove brltty ls -l /dev/ttyUSB0 # 查看串口设备添加信息 sudo dmesg | ...
- SerialException:Cannot configure port something went wrong
完整报错 SerialException:Cannot configure port something went wrong, Original message: OSError(22, '参数错误 ...
- 关于CSDN发布博客接口的研究
前言 其实我之前就有一个想法,实现用 python 代码来发布博客, 因为我个人做了一个发布到 github 博客软件(其实就是实现 git 命令集成,还有markdown的渲染的软件), 如果我弄明 ...
- 关于mysql命令的学习
前言 这篇文章我不会具体说明哪些操作有哪些命令,我只说明这些命令的记忆方法.其实知道原理后,这些命令尽管多,但都是有据可循的 mysql提示符 可以通过登录时加入 –prompt 提示符内容 参数 登 ...