Leetcode:743. 网络延迟时间k(dijkstra)

tech2026-08-05  2

网络延迟时间 有 N 个网络节点,标记为 1 到 N。

给定一个列表 times,表示信号经过有向边的传递时间。 times[i] = (u, v, w),其中 u 是源节点,v 是目标节点, w 是一个信号从源节点传递到目标节点的时间。

现在,我们从某个节点 K 发出一个信号。需要多久才能使所有节点都收到信号?如果不能使所有节点收到信号,返回 -1。

示例:

输入:times = [[2,1,1],[2,3,1],[3,4,1]], N = 4, K = 2 输出:2

这道题呢,理解题目后自然是能明白应该要找的是起始点到其他点的最长距离,把这个距离输出即可,那么就用dijkstra算法,找到起始点到其他点的最短距离,在最短距离中,找到最长的距离就OK了,这里用*max_element还很方便

class Solution { const int inf=1e9; public: int networkDelayTime(vector<vector<int>>& times, int N, int K) { vector<vector<int>>g(N+1,vector<int>(N+1,inf)); for(auto &t:times) g[t[0]][t[1]]=t[2]; vector<bool>vis(N+1,false); vector<int>dis(N+1,inf); dis[K]=0; for(int i=0;i<N-1;i++){ int in=-1; for(int j=1;j<=N;j++){ if(!vis[j]&&(in==-1||dis[j]<dis[in])) in=j; } vis[in]=true; for(int v=1;v<=N;v++){ dis[v]=min(dis[v],dis[in]+g[in][v]); } } int ans=*max_element(dis.begin()+1,dis.end()); return ans==inf?-1:ans; } };
最新回复(0)