def mst_prim(self, r=0): """Returns the set of edges in some minimum spanning tree (MST) of the graph, computed using Prim's algorithm. Keyword arguments: r - vertex id to designate as the root (default is 0). """ parent = [None for x in range(len(self._adj))] Q = PQ() Q.add(r, 0) for u in range(len(self._adj)): if u != r: Q.add(u, math.inf) while not Q.is_empty(): u = Q.extract_min() for v, w in self._adj[u].__iter__(True): if Q.contains(v) and w < Q.get_priority(v): parent[v] = u Q.change_priority(v, w) A = set() for v, u in enumerate(parent): if u != None: A.add((u, v)) # A = A | {(u,v)} return A
def MST_Prim(self, r=0) : parent = [ None for x in range(self.numVertices())] Q = PQ() Q.add(r,0) for u in range(self.numVertices()) : if u!=r : Q.add(u,inf) while not Q.isEmpty() : u = Q.extractMin() for v in self._adj[u] : if Q.contains(v) and self._w[(u,v)] < Q.getPriorityValue(v) : parent[v] = u Q.changePriorityValue(v, self._w[(u,v)]) A = set() for u, v in enumerate(parent) : if v!=None: A.add((u,v)) return A