def detectCycleUnDgraphDisjointSets(g): edges = [] sets = disjointSet(range(len(g.adjLst))) for u,edgeLst in enumerate(g.adjLst): #assuming vertex numbers start from zero for v in edgeLst: if (v,u) not in edges: edges.append((u,v)) if sets.find(u) != sets.find(v): #union two sets sets.union(u,v) else: return True return False
def kruskalsMST(g,start=None): N = len(g.adjLst) Edges = [[u,v,w]for u, wvList in enumerate(g.adjLst) for w,v in wvList] Edges.sort(cmp = cmpr) TV = disjointSet(range(N)) TE = [] cost, numEdges, i = 0,0,0 while numEdges < N and i < len(Edges): u,v,wt = Edges[i] if TV.find(u) != TV.find(v): TV.union(u,v) TE.append([u,v]) cost = cost + wt numEdges = numEdges + 1 i = i+1 return cost,TE