Dijkstra算法求最短路径(附leetcode 743 网络延迟问题)
算法步骤:(设图的储存方式为邻接矩阵)
设置【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 网络延迟问题)相关推荐
- _DataStructure_C_Impl:Dijkstra算法求最短路径
// _DataStructure_C_Impl:Dijkstra #include<stdio.h> #include<stdlib.h> #include<strin ...
- C++floyd warshall算法求最短路径(附完整源码)
C++floyd warshall算法求最短路径 floyd warshall算法求最短路径的完整源码(定义,实现,main函数测试) floyd warshall算法求最短路径的完整源码(定义,实现 ...
- python基于广度优先(BFS)的迪杰斯特拉(Dijkstra)算法 求最短路径
python深度优先与广度优先的遍历算法区别 首先要理解搜索步,一个完整的搜索步包括两个处理: a) 获得当前位置上,有几条路可供选择 b) 根据选择策略,选择其中一条路,并走到下个位置 广度优先:就 ...
- Dijkstra算法求最短路径
迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径. 它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止. (嗯,第一段是抄的,由 ...
- dijkstra最短路径算法视频_java实现Dijkstra算法求最短路径
Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止. Dijkstra一般的表述通常有两种方 ...
- 【算法学习笔记】 图(四)用优先级队列优化Dijkstra算法求最短路径(邻接矩阵存储)
优先级队列:priority_queue,经过实验之后发现默认是首先输出最大的元素,现在想让队头为最小的元素,需要进行运算符重载 此算法寻找源点到与它连接的所有顶点的最短路径 运算符重载: struc ...
- Dijkstra算法求最短路径(java)
任务描述:在一个无向图中,获取起始节点到所有其他节点的最短路径描述 Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层 ...
- C++Dijkstra算法求最短路径
前置知识 迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题.迪杰斯特拉 ...
- 算法分析与实践-作业2-2使用Dijkstra算法求由顶点a到顶点h的最短路径
Dijkstra算法求由顶点a到顶点h的最短路径 1.问题 对于下图使用Dijkstra算法求由顶点a到顶点h的最短路径,按实验报告模板编写算法. 2.解析 Dijkstra是一种求单源最短路的算法, ...
最新文章
- Django Admin 录入中文错误解决办法
- CentOS6中安装、配置、启动GitLab以及遇到的那些坑
- PHP开发中csrf攻击的简单演示和防范
- python文件编译_将c程序编译为python扩展,生成.whl文件
- 深入探究Kubernetes - 初识容器
- win10java怎么运行_win10系统电脑怎样才可以运行Java开发
- 搭建VS2008+OpenCV2.1开发环境
- python的try和except_Python用try except处理程序异常的三种方法总结
- 计算机论文的主要研究方法有哪些,9大实用的论文研究方法盘点
- sql server 2005 T-SQL ALTER SCHEMA (Transact-SQL)
- linux系统FW升降级步骤,一种用于在Linux系统下不重启系统实现LSIRAID卡FW升级的方法与流程...
- IT项目管理 第三章
- [转]Flixel只能用于Flex吗?
- ESAYUI filebox 隐藏
- 聚合物-化学键-聚合物PEG-Hyd-PDLLA /PLA-PHis-hyd-PEG/PEG-PUSeSe-PEG
- java jmf变成_java JMF 多媒体
- 智能马桶盖松下好还是TOTO好?“资深”用户的对比贴来了
- STRATASYS 即将收购 ORIGIN,将全新增材制造平台引入聚合物生产领域
- 8/11 Perl和Postgresql联合在京交流会 Perl6项目经理远道参加
- 大家如何看待网络安全的重要性?
热门文章
- Bailian4115 鸣人和佐助【BFS】
- UVA1091 WF4786 Barcodes【编码检查】
- POJ NOI MATH-7656 李白的酒
- CCF201312--模拟练习试题参考答案(Java)
- CCF201412试题
- Matlab Tricks(二十五)—— plot 属性
- 算法(algorithm)、模型(model)与框架(framework)
- ExtDeprecationWarning: Importing flask.ext.bootstrap is deprecated, use flask_bootstrap instead.
- OpenCV2 图像处理与计算机视觉(一)—— 去除一幅二值化图像中的椒盐噪声
- ios旧版本app网站_这两款app已解锁永久订阅版!