zoukankan      html  css  js  c++  java
  • Dijkstra(迪杰斯特拉求最短路径)-02-有向图-网络延迟时间

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

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

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

    注意:

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

     1 class Solution {
     2 public:
     3     int networkDelayTime(vector<vector<int>>& times, int N, int K) {
     4         vector<vector<int>>G(N,vector<int>(N,1000));
     5         vector<int>dist(N,1000);
     6         for(int i = 0;i<times.size();i++){
     7             G[times[i][0]-1][times[i][1]-1] = times[i][2];
     8         }
     9         //////////////////////////////////////////////////////////////
    10         for(int i = 0;i<N;i++){
    11             dist[i] = G[K-1][i];
    12         }
    13         //////////////////////////////////////////////////////////////
    14         vector<int>s(N,0); 
    15         s[K - 1] = 1;
    16         dist[K - 1] = 0; 
    17         int num = 1;
    18         int max = 0;
    19         while(num < N){
    20             int min = 1000;
    21             int next = -1;
    22             for(int i = 0;i<N;i++){
    23                 if(s[i] == 0&&dist[i] < min){
    24                     min = dist[i];
    25                     next = i;
    26                 }
    27             }
    28             if(min == 1000)
    29                 return -1;
    30             s[next] = 1;
    31             num++;
    32             for(int i = 0;i<N;i++){
    33                 if(dist[i] > dist[next]+G[next][i]&&G[next][i] != 1000){ 
    34                     dist[i] = dist[next] +G[next][i]; 
    35                 }
    36             }
    37         }
    38         for(int i = 0;i < N;i++){
    39             if(max < dist[i])
    40                 max = dist[i];
    41         }
    42         return max;
    43     }
    44 };
  • 相关阅读:
    java——多线程回调函数
    JAVA四种引用
    史上最简单的 SpringCloud 教程
    javaWeb防止恶意登陆或防盗链的使用
    Spring缓存注解@Cacheable,@CacheEvict,@CachePut的使用
    SpringBoot RedisCacheConfig自定义设置
    Java性能分析神器-JProfiler详解(转)
    SpringBoot自动配置的实现原理
    python 处理Excel 常见问题-读取Excel中时间,封装函数
    Excel文件转换为txt文本第一次更新
  • 原文地址:https://www.cnblogs.com/qinqin-me/p/12044461.html
Copyright © 2011-2022 走看看