クラスカル法
問題
頂点数が $\small N$、辺の数が $\small M$ のグラフでそれぞれの辺の重みが $\small W $ であるとき、最小全域木を求める。
アルゴリズム
- グラフ $ G = (V, E) $ の辺 $ e_i $ を重みの昇順に整列する。
- 最小全域木の辺の集合を $K$ とし、それを空に初期化する。
- $ i=1, 2, …, |E| $ の順番に $ |K| $ が $ |V|-1 $ になるまで $ K \cup \{e_i\} $ が閉路にならないような $ e_i $ を $ K $ に追加する。
コード例(Python)
def kruskal(n, edgeList):
uft = UnionFind(n)
MST = []
edgeList.sort()
for edge in edgeList:
x, y, w = edge
if not uft.issame(x, y):
uft.unite(x, y)
MST.append(edge)
return MST
ディスカッション
コメント一覧
まだ、コメントがありません