简体   繁体   中英

Topologically sort directed graph into buckets for disjoint sub graphs

I am looking for an algorithm which can take a graph and topologically sort it such that it produces a set of lists, each which contains the topologically sorted vertices of a disjoint subgraph.

The difficult part is merging the lists when a node depends on a node in two different lists.

Here is my incomplete code/pseudocode where graph is a dict {node: [node, node, ...]}

Topologically sort graph into disjoint lists

sorted_subgraphs = []

while graph:
    cyclic = True
    for node, edges in list(graph.items()):
        for edge in edges:
            if edge in graph:
                break
        else:
            del graph[node]
            cyclic = False

            sub_sorted = []
            for edge in edges:
                bucket.extend(...) # Get the list with edge in it, and remove it from sorted_subgraphs
            bucket.append(node)

            sorted_subgraphs.append(bucket)

    if cyclic:
        raise Exception('Cyclic graph')

首先使用泛洪填充算法将其划分为不相交的子图,然后对每个图进行拓扑排序。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM