코드 13-7
def MST_kruskal(self):
mst = Graph(self.vertex_num) ➊
ds = DisjointSet(self.vertex_num) ➋
self.edge_list.sort(key=lambda e: e.w) ➌
mst_edge_num = 0 ➍
edge_idx = 0 ➎
while mst_edge_num < self.vertex_num-1: ➏
edge = self.edge_list[edge_idx] ➐
if ds.collapsing_find(edge.u) != ds.collapsing_find(edge.v): ➑
mst.add_edge(edge.u, edge.v, edge.w) ➒
ds.weighted_union(ds.collapsing_find(edge.u),
ds.collapsing_find(edge.v))➓
mst_edge_num += 1
edge_idx += 1
return mst
➊ 최종적으로 만들 MST
➋ 분리 집합: 사이클 형성 검사를 할 정점 집합
➌ 가중치에 따라 에지 정렬
➍ mst에 속하는 에지 개수
➎ 정렬된 에지 리스트에서 인덱스
➏ |TE| = |TV|-1이면 종료
➐ 가중치가 작은 순서대로 에지를 가져옵니다.
➑ FIND(u)! = FIND(v)면 사이클을 형성하지 않습니다.
➒ TE = TE U {(u, v)}
➓ UNION(u, v)