【问题标题】:Topologically sort directed graph into buckets for disjoint sub graphs拓扑排序有向图到不相交子图的桶中
【发布时间】:2017-02-03 05:12:39
【问题描述】:

我正在寻找一种算法,它可以获取一个图并对其进行拓扑排序,从而生成一组列表,每个列表都包含不相交子图的拓扑排序顶点。

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

这是我不完整的代码/伪代码,其中 graph 是一个字典 {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')

【问题讨论】:

    标签: python algorithm graph


    【解决方案1】:

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

    【讨论】:

    • 洪水填充算法如何识别有向图的整个子图。根据您从哪个节点开始,算法可能不会到达更上游的节点,如果图是非循环的,则绝对不会。
    • @shane 从有向图构造一个无向图,对其进行泛洪填充,现在它已分区,您可以返回原始图并对每个不相交的子图进行拓扑排序。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-29
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    相关资源
    最近更新 更多