返回题解分享
讨论 / 题解分享/ 帖子详情

路径(结果填空) - 题解

最短路的模板

import math
import heapq
n = 2021
g = [[0] * (n + 1) for _ in range(n + 1)]

def lcm(x, y):
    return x * y // math.gcd(x, y)

for i in range(1, n + 1): # 初始化
    for j in range(1, n + 1):
        if abs(i - j) <= 21:
            w = lcm(i, j)
            g[i][j] = w
            g[j][i] = w
            
st = [0] * (n + 1)
dist = [math.inf] * (n + 1) # 初始化为inf
heap = []

def dijkstra():
    dist[1] = 0
    heapq.heappush(heap, (0, 1))
    
    while heap:
        (d, v) = heapq.heappop(heap)
        if st[v]:
            continue
        st[v] = 1
        for i in range(1, n + 1):
            if g[v][i]:
                if dist[i] > dist[v] + g[v][i]:
                    dist[i] = dist[v] + g[v][i]
                    heapq.heappush(heap, (dist[i], i))
    print(dist[2021])

dijkstra()
0 回复 0 转发 0 喜欢 1 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!