Prim 从 0 出发的总长

👁️ 0 人浏览 💬 0 人评论 ❤️ 添加收藏

同一组边,这次用 Prim,从 0 号点开始长。运行下面这段程序:

import heapq

def prim(edges, verts, s):
    ad = {u: [] for u in verts}
    for a, b, w in edges:
        ad[a].append((w, b))
        ad[b].append((w, a))
    seen = {s}
    pq = [(w, s, v) for w, v in ad[s]]
    heapq.heapify(pq)
    total = 0
    picked = []
    while pq and len(seen) < len(verts):
        w, u, v = heapq.heappop(pq)
        if v in seen:
            continue
        seen.add(v)
        total += w
        picked.append((u, v))
        for w2, x in ad[v]:
            if x not in seen:
                heapq.heappush(pq, (w2, v, x))
    return total, picked

print(prim([(0, 1, 2), (0, 2, 1), (1, 3, 3), (2, 4, 9), (3, 4, 1)], [0, 1, 2, 3, 4], 0)[0])
提交你的答案
请登录后提交答案。
去登录
代码编辑器
Ctrl + Enter 运行
本次输入:
输出:

                        
👩‍🏫
AI
💬 题目评论

全部评论