1. leetcode 网络延迟时间
有解时,就是求最短距离的问题,到所有叶子节点的最短距离的最大值。
import collections
class Solution:
def networkDelayTime(self, times: List[List[int]], n: int, k: int) -> int:
dicta = collections.defaultdict(list)
for t in times:
dicta[t[0]].append((t[1],t[2]))
visited = {k:0} # 记录到达各点的总时间
stack = [(k,dicta[k])] # k 为父节点, dicta[k] 存储着 子节点+距离
while stack:
node, childs = stack.pop(0)
for nd, val in childs: # BFS 按层次遍历
dis = visited[node] + val
if nd not in visited or dis < visited[nd]: #(dis < visited[nd])时,进去更新visited[nd] 值,获取最短路径·1
visited[nd] = dis
stack.append((nd, dicta[nd]))
if len(visited) == n: # 如果每个节点都到达了,则长度为n,求出最大值即可
return max(visited.values())
else:
return -1