在拓扑排序中维护序列

时间:2014-05-04 15:58:12

标签: algorithm sorting graph

假设我有一个带有单个源和接收器的有向图,比如a和z。假设该图是a-> b-> c-> d-> e-> z,a-> f-> g-> h-> z。

我想要做的是在拓扑排序的结果中保持'子组'的身份b-> c-> d-> e和f-> g-> h。 / p>

我的想法是首先扫描图形,查找多个链接顶点的组,所有这些组都有一个入口点和一个出口点,用标记为“A”的“超级顶点”替换它们,然后“B” '等等。

因此,我得到a-> A-> B-> z或a-> B-> A-> z的结果。要么是可以接受的。

当我找到所有超顶点时,我会进行拓扑排序,然后用原始排序顶点替换超顶点。

因此,我的最终结果将是a-> b-> c-> d-> e> f-> g-> h-> z,或a-> f-> G-> H-> B-> C-> D-> E->ž

我需要一个算法 - 伪代码很好 - 这样做。如果可以的话,我将在perl中实现。

图表以点文件形式存在,如果有帮助的话。

非常感谢 - 这是我关于SO的第一个问题,所以请保持温和!

罗杰

1 个答案:

答案 0 :(得分:0)

首先进行深度优先搜索,并记录遇到节点的顺序。

然后,在选择要添加到拓扑顺序的节点时,选择DFS顺序中较早出现的节点。

所以在你的情况下,DFS命令是abcdezfgh,拓扑排序是abcdefghz。