더북(TheBook)

코드 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)

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.