Prim 从 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])
全部评论