743. 网络延迟时间 (最短距离)

题目出处:https://leetcode-cn.com/problems/network-delay-time/

思路:用最短距离算法计算出从节点k到途中其他节点的最短距离。找出其中的最大值即可。

dijstra算法:主要的思路是贪心。将所有的节点分为两类,一类是已确定节点,一类是未确定节点。每次从未确定节点中选取一个与起点距离最短的节点,将他归类为已确定节点,并用它来更新从起点到其他所有未确定节点的距离。直到所有的点都被归类为已确定节点。

typedef pair<int, int> pii;
class Solution {
private:
    int ans = 0;
    vector<unordered_map<int,int>> edge;  
public:
    int networkDelayTime(vector<vector<int>>& times, int n, int k) {
        edge.resize(n);
        for(auto & v : times){
            edge[v[0]-1][v[1]-1] = v[2];
        }

        vector<int> dis(n, INT_MAX);  dis[k-1] = 0;

        priority_queue<pii, vector<pii>, greater<>> q;   //默认按照first元素排序
        q.push({0, k-1});   //{节点到k的距离, 节点}
        while(!q.empty()){
            int dis_q = q.top().first;
            int num_q = q.top().second;   //距离起点最近的点   
            q.pop();
            if(dis_q > dis[num_q]){    //保证是未确定的且离起点距离最短的点
                continue;
            }
            for(auto & v : edge[num_q]){    //用该点更新其他点的距离   
                if(dis[v.first] > dis[num_q] + edge[num_q][v.first]){
                   dis[v.first] = dis[num_q] + edge[num_q][v.first];
                   q.push({dis[v.first], v.first});   
                }
            } 
        }

        ans = *max_element(dis.begin(), dis.end());
        return ans == INT_MAX ? -1 : ans;  
    }
};

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值