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

  1. 网络延迟时间
    有 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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值