743. 网络延迟时间(dijkstral算法)
2022/5/3 9:14:39
本文主要是介绍743. 网络延迟时间(dijkstral算法),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
743. 网络延迟时间
有 n
个网络节点,标记为 1
到 n
。
给你一个列表 times
,表示信号经过 有向 边的传递时间。 times[i] = (ui, vi, wi)
,其中 ui
是源节点,vi
是目标节点, wi
是一个信号从源节点传递到目标节点的时间。
现在,从某个节点 K
发出一个信号。需要多久才能使所有节点都收到信号?如果不能使所有节点收到信号,返回 -1
。
示例 1:
输入:times = [[2,1,1],[2,3,1],[3,4,1]], n = 4, k = 2 输出:2
示例 2:
输入:times = [[1,2,1]], n = 2, k = 1 输出:1
示例 3:
输入:times = [[1,2,1]], n = 2, k = 2 输出:-1
提示:
1 <= k <= n <= 100
1 <= times.length <= 6000
times[i].length == 3
1 <= ui, vi <= n
ui != vi
0 <= wi <= 100
- 所有
(ui, vi)
对都 互不相同(即,不含重复边)
1 class Solution { 2 public: 3 static constexpr int INF = 0x3F3F3F3F; 4 vector<int> dijkstral(const vector<vector<int>> &graph, int start) { 5 int n = graph.size(); 6 vector<int> dis(n, INF); // 初始化起点到各节点最短距离为无穷大 7 vector<bool> visited(n, false); // 初始化所有节点未被选过 8 dis[start] = 0; // 初始起点到起点距离为0 9 for (int i = 0; i < n - 1; i++) { 10 int minNode = -1; 11 // 选定一个节点: 12 // 1)未被选过; 13 // 2)距离最短; 14 for (int j = 0; j < n; j++) { 15 if (!visited[j] && ((minNode == -1) || (dis[j] < dis[minNode]))) { 16 minNode = j; 17 } 18 } 19 // 对于已选择的节点作为中转站,刷新经过中转站到各节点的最短路径 20 for (int j = 0; j < n; j++) { 21 dis[j] = std::min(dis[j], dis[minNode] + graph[minNode][j]); 22 } 23 visited[minNode] = true; 24 } 25 return dis; 26 } 27 int networkDelayTime(vector<vector<int>>& times, int n, int k) { 28 vector<vector<int>> graph(n, vector<int>(n, INF)); 29 for (auto &vec : times) { 30 graph[vec[0] - 1][vec[1] - 1] = vec[2]; 31 } 32 vector<int> dis(n, INF); 33 vector<bool> visited(n, false); 34 dis[k - 1] = 0; 35 vector<int> ans; 36 ans = dijkstral(graph, k - 1); 37 sort(ans.begin(), ans.end()); 38 int size = ans.size(); 39 return (ans[size - 1] == INF) ? -1 : ans[size - 1]; 40 } 41 };
这篇关于743. 网络延迟时间(dijkstral算法)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-26大厂数据结构与算法教程:入门级详解
- 2024-12-26大厂算法与数据结构教程:新手入门指南
- 2024-12-26Python编程入门指南
- 2024-12-26数据结构高级教程:新手入门及初级提升指南
- 2024-12-26并查集入门教程:从零开始学会并查集
- 2024-12-26大厂数据结构与算法入门指南
- 2024-12-26大厂算法与数据结构入门教程
- 2024-12-26二叉树入门教程:轻松掌握基础概念与操作
- 2024-12-26初学者指南:轻松掌握链表
- 2024-12-26平衡树入门教程:轻松理解与应用