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
Пример #2
0
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