算法步骤:(设图的储存方式为邻接矩阵)

设置【dist数组】(distance的缩写),dist[x]=y表示从【源点】到【x】的最短距离为y

设置【visited数组】,visited[i]=True表示i更新过,false表示未更新过

(1)将所有的点标记为【未更新】和【距离为正无穷】(去掉图中所有边)

(2)假设起点为k,令dist[k]=0

(3)迭代n次,每次找【距离最小】且未被更新的点t

(4)标记t为已更新

(5)用点t的最小距离更新其它点

 void dijkstra() {// 起始先将所有的点标记为「未更新」和「距离为正无穷」Arrays.fill(vis, false);Arrays.fill(dist, INF);// 只有起点最短距离为 0dist[k] = 0;// 迭代 n 次for (int p = 1; p <= n; p++) {// 每次找到「最短距离最小」且「未被更新」的点 tint t = -1;for (int i = 1; i <= n; i++) {if (!vis[i] && (t == -1 || dist[i] < dist[t])) t = i;}// 标记点 t 为已更新vis[t] = true;// 用点 t 的「最小距离」更新其他点for (int i = 1; i <= n; i++) {dist[i] = Math.min(dist[i], dist[t] + w[t][i]);}}}
}来源:力扣(LeetCode)

leetcode 743 网络延迟时间

思路:从k点出发进行Dijkstra操作,求k点到其它点最短距离的最大值

class Solution {int N = 110, M = 6010;// 邻接矩阵数组:w[a][b] = c 代表从 a 到 b 有权重为 c 的边int[][] w = new int[N][N];// dist[x] = y 代表从「源点/起点」到 x 的最短距离为 yint[] dist = new int[N];// 记录哪些点已经被更新过boolean[] vis = new boolean[N];int INF = 0x3f3f3f3f;int n, k;public int networkDelayTime(int[][] ts, int _n, int _k) {n = _n; k = _k;// 初始化邻接矩阵for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {w[i][j] = w[j][i] = i == j ? 0 : INF;}}// 存图for (int[] t : ts) {int u = t[0], v = t[1], c = t[2];w[u][v] = c;}// 最短路dijkstra();// 遍历答案int ans = 0;for (int i = 1; i <= n; i++) {ans = Math.max(ans, dist[i]);}return ans > INF / 2 ? -1 : ans;}void dijkstra() {// 起始先将所有的点标记为「未更新」和「距离为正无穷」Arrays.fill(vis, false);Arrays.fill(dist, INF);// 只有起点最短距离为 0dist[k] = 0;// 迭代 n 次for (int p = 1; p <= n; p++) {// 每次找到「最短距离最小」且「未被更新」的点 tint t = -1;for (int i = 1; i <= n; i++) {if (!vis[i] && (t == -1 || dist[i] < dist[t])) t = i;}// 标记点 t 为已更新vis[t] = true;// 用点 t 的「最小距离」更新其他点for (int i = 1; i <= n; i++) {dist[i] = Math.min(dist[i], dist[t] + w[t][i]);}}}
}

Dijkstra算法求最短路径(附leetcode 743 网络延迟问题)相关推荐

  1. _DataStructure_C_Impl:Dijkstra算法求最短路径

    // _DataStructure_C_Impl:Dijkstra #include<stdio.h> #include<stdlib.h> #include<strin ...

  2. C++floyd warshall算法求最短路径(附完整源码)

    C++floyd warshall算法求最短路径 floyd warshall算法求最短路径的完整源码(定义,实现,main函数测试) floyd warshall算法求最短路径的完整源码(定义,实现 ...

  3. python基于广度优先(BFS)的迪杰斯特拉(Dijkstra)算法 求最短路径

    python深度优先与广度优先的遍历算法区别 首先要理解搜索步,一个完整的搜索步包括两个处理: a) 获得当前位置上,有几条路可供选择 b) 根据选择策略,选择其中一条路,并走到下个位置 广度优先:就 ...

  4. Dijkstra算法求最短路径

    迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径. 它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止. (嗯,第一段是抄的,由 ...

  5. dijkstra最短路径算法视频_java实现Dijkstra算法求最短路径

    Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止. Dijkstra一般的表述通常有两种方 ...

  6. 【算法学习笔记】 图(四)用优先级队列优化Dijkstra算法求最短路径(邻接矩阵存储)

    优先级队列:priority_queue,经过实验之后发现默认是首先输出最大的元素,现在想让队头为最小的元素,需要进行运算符重载 此算法寻找源点到与它连接的所有顶点的最短路径 运算符重载: struc ...

  7. Dijkstra算法求最短路径(java)

    任务描述:在一个无向图中,获取起始节点到所有其他节点的最短路径描述 Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层 ...

  8. C++Dijkstra算法求最短路径

    前置知识 迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题.迪杰斯特拉 ...

  9. 算法分析与实践-作业2-2使用Dijkstra算法求由顶点a到顶点h的最短路径

    Dijkstra算法求由顶点a到顶点h的最短路径 1.问题 对于下图使用Dijkstra算法求由顶点a到顶点h的最短路径,按实验报告模板编写算法. 2.解析 Dijkstra是一种求单源最短路的算法, ...

最新文章

  1. Django Admin 录入中文错误解决办法
  2. CentOS6中安装、配置、启动GitLab以及遇到的那些坑
  3. PHP开发中csrf攻击的简单演示和防范
  4. python文件编译_将c程序编译为python扩展,生成.whl文件
  5. 深入探究Kubernetes - 初识容器
  6. win10java怎么运行_win10系统电脑怎样才可以运行Java开发
  7. 搭建VS2008+OpenCV2.1开发环境
  8. python的try和except_Python用try except处理程序异常的三种方法总结
  9. 计算机论文的主要研究方法有哪些,9大实用的论文研究方法盘点
  10. sql server 2005 T-SQL ALTER SCHEMA (Transact-SQL)
  11. linux系统FW升降级步骤,一种用于在Linux系统下不重启系统实现LSIRAID卡FW升级的方法与流程...
  12. IT项目管理 第三章
  13. [转]Flixel只能用于Flex吗?
  14. ESAYUI filebox 隐藏
  15. 聚合物-化学键-聚合物PEG-Hyd-PDLLA /PLA-PHis-hyd-PEG/PEG-PUSeSe-PEG
  16. java jmf变成_java JMF 多媒体
  17. 智能马桶盖松下好还是TOTO好?“资深”用户的对比贴来了
  18. STRATASYS 即将收购 ORIGIN,将全新增材制造平台引入聚合物生产领域
  19. 8/11 Perl和Postgresql联合在京交流会 Perl6项目经理远道参加
  20. 大家如何看待网络安全的重要性?

热门文章

  1. Bailian4115 鸣人和佐助【BFS】
  2. UVA1091 WF4786 Barcodes【编码检查】
  3. POJ NOI MATH-7656 李白的酒
  4. CCF201312--模拟练习试题参考答案(Java)
  5. CCF201412试题
  6. Matlab Tricks(二十五)—— plot 属性
  7. 算法(algorithm)、模型(model)与框架(framework)
  8. ExtDeprecationWarning: Importing flask.ext.bootstrap is deprecated, use flask_bootstrap instead.
  9. OpenCV2 图像处理与计算机视觉(一)—— 去除一幅二值化图像中的椒盐噪声
  10. ios旧版本app网站_这两款app已解锁永久订阅版!