leetcode 743. 网络延迟时间

有 N 个网络节点,标记为 1 到 N

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

现在,我们向当前的节点 K 发送了一个信号。需要多久才能使所有节点都收到信号?如果不能使所有节点收到信号,返回 -1

注意:

  1. N 的范围在 [1, 100] 之间。
  2. K 的范围在 [1, N] 之间。
  3. times 的长度在 [1, 6000] 之间。
  4. 所有的边 times[i] = (u, v, w) 都有 1 <= u, v <= N 且 1 <= w <= 100

思路

1、用Dijkstra做

code 

class Solution {
public:
    int networkDelayTime(vector<vector<int>>& times, int N, int K) {
        vector<int> dist(N+1,INT_MAX);   //距离数组
        vector<vector<int>> edges(101,vector<int>(101,-1));  //图的保存
        dist[K]=0;  //从k开始,初始化k
        int res=INT_MIN;
        queue<int> q{{K}};
        for(auto edge:times)
            edges[edge[0]][edge[1]]=edge[2];
        
        while(!q.empty()){
            unordered_set<int> visited;
            for (int i = q.size(); i > 0; --i)  //可能q为空,但还有节点未被扫到,所以加循环                                       
            {
                int u = q.front(); q.pop();
                for (int v = 1; v <= 100; ++v)   //i节点与每个v节点的关系
                    if (edges[u][v] != -1 && dist[u] + edges[u][v] < dist[v])
                    {
                        if (!visited.count(v)) {
                            visited.insert(v);
                            q.push(v);
                        }
                        dist[v] = dist[u] + edges[u][v];
                    }
            }

        }
        for (int i = 1; i <= N; ++i)
            res = max(res, dist[i]);
        return res==INT_MAX?-1:res;
    }
};

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值