题解 | #【模板】单源最短路1#

【模板】单源最短路1

https://www.nowcoder.com/practice/f24504c9ff544f7c808f76693cc34af8

from collections import defaultdict
import heapq

def dijkstra(e, s):
    """
    输入:
    e:邻接表
    s:起点
    返回:
    dis:从s到每个顶点的最短路长度
    """
    dis = defaultdict(lambda: float("inf"))
    dis[s] = 0
    q = [(0, s)]
    vis = set()
    while q:
        _, u = heapq.heappop(q)
        if u in vis:
            continue
        vis.add(u)
        for v, w in e[u]:
            if dis[v] > dis[u] + w:
                dis[v] = dis[u] + w
                heapq.heappush(q, (dis[v], v))
    return dis


s = 1
# n个结点,m条边
n,m = map(int, input().split())
# 构建邻接表,其元素为{u:[(v1,w1),(v2,w2)]}
neighbors = defaultdict(list)
for _ in range(m):
    u,v = map(int, input().split())
    w = 1
    neighbors[u].append((v,w))
    neighbors[v].append((u,w))
    
dis = dijkstra(neighbors, s)[n]
print((lambda x: -1 if x == float('inf') else x)(dis))

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-24 18:34
点赞 评论 收藏
分享
07-29 14:37
门头沟学院 Java
点赞 评论 收藏
分享
酷酷我灵儿帅:这去不去和线不线下面说实话没啥关系
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务