前往題目
思路
有兩種主要做法:
Prim’s(使用PQ)
- 循環直到全部的點都走過
- 在循環裡,每次都從
pq
取出並查看是否已經走過,否則加入走過的點並把當前weight
加入結果
- 每次都把該點所有的邊(與尚未走過的點)都加入
pq
因為一開始起始點是0
,保證最小值,接下來加入pq
時會自動由小到大排序,所以保證永遠都取到最小的邊
Kruskal’s(使用Union-Find)
- 初始化每個點的爸爸都是自己
- 運用
pq
把每條邊都加入(pq
放入距離,起始點與終點)
- 循環直到取了
n-1
條邊
- 每次循環都判斷兩點是否已經連通,沒有的話連上並且加入結果
Code
Prim’s
Kruskal’s