Algorithm 如何将有向无环图格式化为列表列表

Algorithm 如何将有向无环图格式化为列表列表,algorithm,graph-algorithm,directed-acyclic-graphs,Algorithm,Graph Algorithm,Directed Acyclic Graphs,我有一个连接节点的边列表,需要以如下所示的格式输出。没有周期,也没有节点需要位于两个列表中的情况 我一直在试图找到一种算法,但是我发现的拓扑排序算法只输出节点的顺序,而不是我需要的节点分组 到目前为止,我几乎没有成功,因为很难找到在第一个节点开始时在哪里关闭括号,或者在最后一个节点开始时在哪里打开括号。任何帮助都将不胜感激 编辑: 以下是数据在VB.NET中的存储方式: Public Class Box Public id as Integer End Class Public Cl

我有一个连接节点的边列表,需要以如下所示的格式输出。没有周期,也没有节点需要位于两个列表中的情况

我一直在试图找到一种算法,但是我发现的拓扑排序算法只输出节点的顺序,而不是我需要的节点分组

到目前为止,我几乎没有成功,因为很难找到在第一个节点开始时在哪里关闭括号,或者在最后一个节点开始时在哪里打开括号。任何帮助都将不胜感激

编辑: 以下是数据在VB.NET中的存储方式:

Public Class Box
    Public id as Integer
End Class

Public Class Edge
    Public box1 As Box
    Public box2 As Box
End Class

Public edges As List(Of Edge)
所需的输出是以下格式的文本文件。其思想是将分支包装在“并行”标记中,将连续步骤包装在“串行”标记中。分支的数量是任意的,但不存在节点需要同时位于列表中两个位置的情况(例如,节点3保证不连接到节点6,因为它们位于不同的谱系中)


由于您的编辑,我认为您正在寻找一个串并行图的分解。根据维基百科,这在线性时间内是可能的。有关更多信息,请参阅维基百科:


请注意,串并行图需要特定的结构,例如,它们需要一个源节点(在示例节点1中)和一个汇节点(在示例节点10中)。如果您的图形通常没有这样的结构,请提供有关您的图形和您的问题的更多详细信息。

由于您的编辑,我认为您正在寻找串联-并联图形的分解。根据维基百科,这在线性时间内是可能的。有关更多信息,请参阅维基百科:


请注意,串并行图需要特定的结构,例如,它们需要一个源节点(在示例节点1中)和一个汇节点(在示例节点10中)。如果您的图形通常没有这样的结构,请提供有关您的图形和问题的更多详细信息。

请编辑问题,将所需输出作为代码,而不是图像。这也将有助于解释DAG是如何表示为数据结构的,最好是使用代码。@kaya3感谢反馈,我对请求的编辑进行了修改。希望这将更容易在每个节点上进行,我们可以计算节点向内和向外的度数之间的差异。如果输入输出程度的差异为==0,则该节点将是串联节点,否则将是并联节点。请编辑问题,以将所需输出作为代码而不是图像包含在内。这也将有助于解释DAG是如何表示为数据结构的,最好是使用代码。@kaya3感谢反馈,我对请求的编辑进行了修改。希望这将更容易在每个节点上进行,我们可以计算节点向内和向外的度数之间的差异。如果输入输出度的差值为==0,则该节点将是串联节点,否则将是并联节点。
Series
[
    Node 1
    Parallel
    [
        Series
        [
            Node 2
            Parallel
            [
                Series
                [
                    Node 5
                    Node 8
                ]
                Series
                [
                    Node 6
                ]
            ]
        ]
        Series
        [
            Parallel
            [
                Series
                [
                    Node 3
                ]
                Series
                [
                    Node 4
                ]
            ]
            Node 7
        ]
    ]
    Node 9
    Node 10
]