在拓扑上将有向图排序到不相交子图的桶中

时间:2017-02-02 20:15:22

标签: python algorithm graph

我正在寻找一种算法,该算法可以采用图形并在拓扑上对其进行排序,使其生成一组列表,每个列表包含不相交子图的拓扑排序顶点。

当节点依赖于两个不同列表中的节点时,困难的部分是合并列表。

这是我的不完整代码/伪代码,其中graph是dict {node: [node, node, ...]}

拓扑将图表排序为不相交的列表

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')

1 个答案:

答案 0 :(得分:0)

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