def kruskalMST(self): self.generatePQ() uf = UnionFind() uf.WeightedQuickUnionUF(self.N) self.mst = [None] * self.N index = 0 while len(self.PQ) != 0: edge = heapq.heappop(self.PQ) if (uf.connected(edge.u, edge.v)): continue uf.unify(edge.v, edge.u) self.mstCost += edge.cost self.mst[index] = edge index += 1 if uf.size1(0) == self.N: break mstExists = (uf.size1(0) == self.N) solved = True if solved: return self.mstCost else: return None
def define_shells_structure(me): union_find = UnionFind(len(me.vertices)) [ union_find.unify(v1, v2) for v1, v2 in [(edge.vertices) for edge in me.edges] ] return union_find