Ejemplo n.º 1
0
def kruskal(graph):
    """Find the minimum spanning tree of a graph."""
    msf = set()

    forest = DisjointSets()
    for v in graph.keys():
        forest.makeset(v)

    edges = []
    for u, adjlist in graph.items():
        for (v, weight) in adjlist.items():
            edges.append((u, v, weight))
    edges.sort(key=lambda edge: edge[2])

    for u, v, w in edges:
        if forest.find(u) != forest.find(v):
            msf.add((u, v, w))
            forest.union(u, v)
    
    return msf
Ejemplo n.º 2
0
def kruskal(graph):
    """Find the minimum spanning tree of a graph."""
    msf = set()

    forest = DisjointSets()
    for v in graph.keys():
        forest.makeset(v)

    edges = []
    for u, adjlist in graph.items():
        for (v, weight) in adjlist.items():
            edges.append((u, v, weight))
    edges.sort(key=lambda edge: edge[2])

    for u, v, w in edges:
        if forest.find(u) != forest.find(v):
            msf.add((u, v, w))
            forest.union(u, v)

    return msf