假设我有一个带有单个源和接收器的有向图,比如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的第一个问题,所以请保持温和!
罗杰
答案 0 :(得分:0)
首先进行深度优先搜索,并记录遇到节点的顺序。
然后,在选择要添加到拓扑顺序的节点时,选择DFS顺序中较早出现的节点。
所以在你的情况下,DFS命令是abcdezfgh,拓扑排序是abcdefghz。