[宽度优先搜索] leetcode 743 Network Delay Time

problem:https://leetcode.com/problems/network-delay-time

        相当于求单源带权最短路径。然后取所有最短路径中最大的那个。

class Solution {
public:
    vector<unordered_map<int, int>> graph;
    int networkDelayTime(vector<vector<int>>& times, int N, int K) {
        graph.resize(N + 1);
        for (auto& time : times)
        {
            graph[time[0]][time[1]] = time[2];
        }

        vector<int> dist(N + 1, INT_MAX);
        priority_queue<pair<int,int>, vector<pair<int, int>>,greater<pair<int,int>>> pq;
        pq.push({ 0, K });
        dist[K] = 0;
        vector<bool> visit(N + 1, false);
        
        while (!pq.empty())
        {
            int cur = pq.top().second;        
            pq.pop();
            visit[cur] = true;
            for (auto& neighbor : graph[cur])
            {
                int next = neighbor.first;
                int weight = neighbor.second;
                dist[next] = min(dist[next], dist[cur] + weight);
                if (!visit[next])
                {
                    pq.push({ weight, next });
                }
            }
        }
        int res = *max_element(dist.begin() + 1, dist.end());
        return res == INT_MAX ? -1 : res;
    }
};

 

转载于:https://www.cnblogs.com/fish1996/p/11339315.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值