Dijkstra算法详解
1.dijkstra算法简介
Dijkstra算法是由E.W.Dijkstra于1959年提出,又叫迪杰斯特拉算法,它应用了贪心算法模式,是目前公认的最好的求解最短路径的方法。算法解决的是有向图中单个源点到其他顶点的最短路径问题,其主要特点是每次迭代时选择的下一个顶点是标记点之外距离源点最近的顶点。但由于dijkstra算法主要计算从源点到其他所有点的最短路径,所以算法的效率较低。
2.dijkstra算法基本过程
假设路网中每一个节点都有标号 是从出发点s到点t的最短路径长度;
表示从s到t的最短路径中t点的前一个点。求解从出发点s到点t的最短路径算法的基本过程为:
1. 初始化。出发点设置为:
标记起源点s,记k = s,其他所有点设为未标记。
2. 检验从所有已标记的点k到其他直接连接的未标记的点j的距离,并设置:
3. 选取下一个点。从所有未标记的点中选取 最小的点i,点i被选为最短路径中的一点,并设为已标记的。
4. 找到点i的前一点。从已经标记的点集合中找到直接连接到点i的点,并标记为 。
5. 标记点i。如果所有的点已标记,则算法结束。否则,记k = i,转到2继续。
从以上算法的步骤中可以看出 :dijkstra算法的关键部分是从未标记的点中不断地找出距离源点距离最近的点,并把改点加入到标记的点集合中,同时更新未标记的点集合中其余点到起始点的最短估计距离[z1] 。
以一个带有权值的无向图为例,用dijkstra算法分析从源点A到目标点F的最短路径。
1. 用带有权值的一个矩阵w表示含有n各节点的带权无向图, 代表弧段 的权值,如果从节点 到节点 不连通,那么 ,带权值图邻接矩阵如下图所示.设置A为源点,G为目的点, 代表从节点A到有向图中其他节点 的最短路径长度。设置初始值 代表标记的节点集合。
2. 是从A点出发求出的一条最短路径上的终止节点,令
 ;
3.  修改起始节点A到集合之间的最短路径的长度值,如果d(j)+w(j,k) < d(k),那么d(k) = d(j) + w(j,k);
4. 重复步骤2、3的操作N-1次,最终得到从起始节点A到其他节点的最短路径,按照递增的顺序排列路径的长度。
3.dijkstra算法的流程图如下所示:
Dijkstra算法详解的更多相关文章
- 最短路径问题---Dijkstra算法详解
		
侵删https://blog.csdn.net/qq_35644234/article/details/60870719 前言 Nobody can go back and start a new b ...
 - 图的最短路径-----------Dijkstra算法详解(TjuOj2870_The Kth City)
		
做OJ需要用到搜索最短路径的题,于是整理了一下关于图的搜索算法: 图的搜索大致有三种比较常用的算法: 迪杰斯特拉算法(Dijkstra算法) 弗洛伊德算法(Floyd算法) SPFA算法 Dijkst ...
 - HDU 1874 畅通工程续-- Dijkstra算法详解 单源点最短路问题
		
参考 此题Dijkstra算法,一次AC.这个算法时间复杂度O(n2)附上该算法的演示图(来自维基百科): 附上: 迪科斯彻算法分解(优酷) problem link -> HDU 1874 ...
 - 【最短路径Floyd算法详解推导过程】看完这篇,你还能不懂Floyd算法?还不会?
		
简介 Floyd-Warshall算法(Floyd-Warshall algorithm),是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,与Dijkstra算法类似.该算法名称以 ...
 - BM算法  Boyer-Moore高质量实现代码详解与算法详解
		
Boyer-Moore高质量实现代码详解与算法详解 鉴于我见到对算法本身分析非常透彻的文章以及实现的非常精巧的文章,所以就转载了,本文的贡献在于将两者结合起来,方便大家了解代码实现! 算法详解转自:h ...
 - kmp算法详解
		
转自:http://blog.csdn.net/ddupd/article/details/19899263 KMP算法详解 KMP算法简介: KMP算法是一种高效的字符串匹配算法,关于字符串匹配最简 ...
 - 机器学习经典算法详解及Python实现--基于SMO的SVM分类器
		
原文:http://blog.csdn.net/suipingsp/article/details/41645779 支持向量机基本上是最好的有监督学习算法,因其英文名为support vector ...
 - [转] KMP算法详解
		
转载自:http://www.matrix67.com/blog/archives/115 KMP算法详解 如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段. 我们这里说的K ...
 - 【转】AC算法详解
		
原文转自:http://blog.csdn.net/joylnwang/article/details/6793192 AC算法是Alfred V.Aho(<编译原理>(龙书)的作者),和 ...
 
随机推荐
- shell命令基础
			
1.修改密码 使用 passwd 命令修改密码. 该命令如果在 root 用户下执行,则修改的是 root 用户的密码. 2.获取帮助 使用 ls --help 命令获取帮助. [zhanghuiju ...
 - 我的学习笔记之API-Guides翻译------AppComponent_Activites
			
10.26第一天开始:贵在坚持,边看遍整理 一个应用程序通常由多个Activity组成,它们之间是松耦合的关系.特别的,有一个Activity作为app的主Activity,当app首次启动时呈现给用 ...
 - 简述sprintf、fprintf和printf函数的区别
			
都是把格式好的字符串输出,只是输出的目标不一样:1 printf,是把格式字符串输出到标准输出(一般是屏幕,可以重定向).2 sprintf,是把格式字符串输出到指定字符串中,所以参数比printf多 ...
 - iOS 证书那些事
			
关于开发证书配置(Certificates & Identifiers & Provisioning Profiles),相信做iOS开发的同学没少被折腾.对于一个iOS开发小白.半吊 ...
 - Hadoop学习之Mapreduce执行过程详解
			
一.MapReduce执行过程 MapReduce运行时,首先通过Map读取HDFS中的数据,然后经过拆分,将每个文件中的每行数据分拆成键值对,最后输出作为Reduce的输入,大体执行流程如下图所示: ...
 - bzoj 3289: Mato的文件管理  莫队+线段树
			
题目链接 给一些询问,每个询问给出区间[L, R] , 求这段区间的逆序数. 先分块排序, 然后对于每次更改, 如果是更改L, 那么应该查询区间内比他小的数的个数, 如果更改R, 查区间内比他大的数的 ...
 - Naive Bayes Theorem and Application - Theorem
			
Naive Bayes Theorm And Application - Theorem Naive Bayes model: 1. Naive Bayes model 2. model: discr ...
 - 四轴飞行器1.7 NRF24L01P无线通讯和改进型环形缓冲
			
原创文章,欢迎转载,转载请注明出处 这次花了10多天了才再次写blog,一是中秋优点小活动,二是这次完成了不少东西.. 终于接近完成了,这次完成了NRF的通讯,并且用了改进的环形缓冲和简单的通讯协议规 ...
 - font简写语法
			
font简写语法 测试 <p class="p box">这是子元素的字体 默认继承了哪些字体属性 **font-style font-weight font-size ...
 - pyqt开发教程-搭建环境和开发示例
			
搭建环境和开发示例 * 安装 安装包 要对应python的版本 32位安装包(我PC上) http://jaist.dl.sourceforge.net/project/pyqt/PyQt4/PyQt ...