leetcode743. 网络延迟时间

  1. 题目链接 https://leetcode-cn.com/problems/network-delay-time/submissions/

  2. 题目描述

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

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

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

    2. 输入:[[2,1,1],[2,3,1],[3,4,1]],4,2 输出:2

  3. 解题思路

    1. 典型的Dijkstra算法
  4. 代码

    1. python
      class Solution:
          def networkDelayTime(self, times, N, K):
              weight = [[float("inf")] * (N) for _ in range(N)]
              
              for u, v, w in times:
                  weight[u-1][v-1] = w
              K -= 1
              distance = [float("inf")] * N
              vis = [0] * N
              distance[K] = 0
              print(distance)
              for _ in range(N):
                  min_index = min([i for i in range(N)], key=lambda a: distance[a] if vis[a] == 0 else float("inf"))
                  vis[min_index] = 1
                  for i in range(N):
                      if vis[i] == 0:
                          distance[i] = min(distance[i], distance[min_index] + weight[min_index][i])
              _max = max(distance)
              return _max if _max != float('inf') else -1

猜你喜欢

转载自blog.csdn.net/qq_38043440/article/details/89081135