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