1. Dijkstra算法是求图中某一点到其他点的最短距路。即单源最短路径问题,该算法不能处理负权边,该算法求出的是图中某一点src,到其他所有点的最短距离。

2. 该算法的思想是将图中的点分为两类,一类是已经确定最短距离的点S,另一类是还没有确定最短距离点V-S。

我们首先从S中找到距离当前路径最小的点,然后用当前的点去不断更新其他的点到这一点的距离。

之后把当前点加入到S中。直到所有点更新完。

int dijkstra()
{memset(dist, 0x3f, sizeof dist);dist[1] = 0;for (int i = 0; i < n - 1; i ++ ){int t = -1;for (int j = 1; j <= n; j ++ )if (!st[j] && (t == -1 || dist[t] > dist[j]))t = j;for (int j = 1; j <= n; j ++ )dist[j] = min(dist[j], dist[t] + g[t][j]);st[t] = true;}if (dist[n] == 0x3f3f3f3f) return -1;return dist[n];
}

其中有一步操作是从dist取出一个没有使用过最小的,假设这一步我们用堆来优化,用过了以后pop出去,那么可以加速这一过程,但是由于dist中的值是会变的,即我们需要改变堆里面的值,这样直接维护一个最多有n个元素的堆是不可行的。因此我们需要改变策略。

我们首先将原点放进去,然后弹出来,然后对其邻接点作松弛,松弛完了之后把新更新的点全部入堆,如果这个点已经更新过了,就直接跳过,这种优先队列的写法实际是对朴素Dijkstra算法的优化。该算法的时间复杂是mlogm

int dijkstra()
{memset(dist, 0x3f, sizeof dist);dist[1] = 0;priority_queue<PII, vector<PII>, greater<PII>> heap;heap.push({0, 1});while (heap.size()){auto t = heap.top();heap.pop();int ver = t.second, distance = t.first;if (st[ver]) continue;st[ver] = true;for (int i = h[ver]; i != -1; i = ne[i]){int j = e[i];if (dist[j] > dist[ver] + w[i]){dist[j] = dist[ver] + w[i];heap.push({dist[j], j});}}}if (dist[n] == 0x3f3f3f3f) return -1;return dist[n];
}

Dijkstra算法的思想相关推荐

  1. Dijkstra算法的思想和数学归纳法

    ospf协议很多人都知道,很多人也会配置而且很熟练,但是很少有人懂得其背后的思想是什么,Dijkstra算法是求解单源最短路径的绝妙算法之一,我打心眼里头喜欢这个算法,真想把之一去掉.Dijkstra ...

  2. 单源最短路径Dijkstra算法的思想、详细步骤、代码

    目录 一.算法思想 二.算法详细步骤 三.伪代码 + C++代码 四.算法复杂度分析 五.算法改进 六.应用案例 一.算法思想 1.Dijkstra 算法是用来求解单源最短路径问题的经典算法,其本质上 ...

  3. (王道408考研数据结构)第六章图-第四节4:最短路径之迪杰斯特拉算法(思想、代码、演示、答题规范)

    文章目录 一:BFS算法局限性 二:迪杰斯特拉(dijkstra)算法基本思想 三:迪杰斯特拉(dijkstra)算法代码实现 四:迪杰斯特拉(dijkstra)算法代码视频演示 五:迪杰斯特拉(di ...

  4. 图论 —— 最短路 —— Dijkstra 算法

    [概述] Dijkstra 算法是单源最短路径算法,即计算起点只有一个的情况到其他点的最短路径,其无法处理存在负边权的情况. 其时间复杂度是:O(E+VlogV) [算法分析] 将点分为两类,一类是已 ...

  5. 最短路径之Dijkstra算法

    今天看了最短路径之Dijkstra算法,对这算法,写上自己的心得和感悟! 1.Dijkstra算法,(迪杰斯特拉)--单源最短路径 求的是一个源点到其他顶点的最短路径 算法描述 1).算法思想 设G= ...

  6. 【数据结构】图(最短路径Dijkstra算法)的JAVA代码实现

    最短路径的概念 最短路径的问题是比较典型的应用问题.在图中,确定了起始点和终点之后,一般情况下都可以有很多条路径来连接两者.而边或弧的权值最小的那一条路径就称为两点之间的最短路径,路径上的第一个顶点为 ...

  7. JAVA编程求单源最短路径_【算法】单源最短路径——dijkstra算法

    一,概念 单源最短路径 给定一个带权有向图G=(V,E),其中每条边的权是一个实数.另外,还给定V中的一个顶点,称为源.要计算从源到其他所有各顶点的最短路径长度.这里的长度就是指路上各边权之和.这个问 ...

  8. 最短路径问题(Floyd算法、Dijkstra算法、Bellman-Ford算法、SPFA算法)

    导入 最短路径问题是指在一幅带权图中,找出连接两个顶点之间的所有路径中,边权和最短的那一条.如下图就是一幅带权图,边上的数字就代表该边的权值.解决最短路径问题有多种不同的算法,本文将对它们的基本思想与 ...

  9. 图论算法讲解--最短路--Dijkstra算法

    一.绪论 要学习最短路算法我们首先应该知道什么是图以及什么是最短路. 图在离散数学中的定义为:图G=(V,E)是一个二元组(V,E)使得E⊆[V]的平方,所以E的元素是V的2-元子集.为了避免符号上的 ...

最新文章

  1. php 数组去重_数组去重(JavaScript 为例)
  2. jQuery单选按钮监听事件
  3. 百度API地图的标注不居中显示,而显示在左上角
  4. boost::iostreams::gzip用法的测试程序
  5. 分享一批国内常用的tracker地址
  6. iPhone屏幕尺寸/launch尺寸/icon尺寸
  7. C#起步:WinForm当中的字符
  8. 学计算机应用基础学到了什么,2021年学习计算机应用基础心得体会-得范文网
  9. ubuntu ble c语言编程,c – 如何在ubuntu上安装bluez进行开发?
  10. 51nod 1268最大距离
  11. 【Android 教程系列第 1 篇】如何用 Android Studio 查看项目的包名
  12. 【电力电子技术AC-DC】三相桥式晶闸管整流电路(阻性/阻感性负载)simulink仿真
  13. 偏最小二乘回归(PLSR)算法原理
  14. 数据分析师需要学习什么课程?
  15. 用三剑客取ip地址的方法(请忽略脱裤子放屁的~)
  16. MySQL limit 1,1的含义
  17. HTML标签播放MP4视频
  18. 无法连接服务器中的redis
  19. vc830l 说明书_数字万用表vc830l视频教程 视频
  20. vue 条件判断绑定内联样式

热门文章

  1. ElementUI级联框回显问题
  2. 懂车帝新能源汽车销量分析
  3. 人工智能的就业方向有哪些?
  4. 经典不等式链的一些拓展理解
  5. java操作word,自动更新目录/域
  6. Windows10系统安装postgreSQL出错解决方法
  7. 电脑之间利用串口传文件
  8. 【Excle数据透视表】如何快速选定数据透视表的汇总行并添加绿色底纹
  9. 与门,AND Gate
  10. App开发智能车载之SDK篇