如何查找拓扑排序的所有结果

时间:2011-12-29 19:59:21

标签: c++ graph topological-sort

由于拓扑排序的结果不是唯一的,因此还有其他合理的结果。我有一些关系,如a-> b b-> c ...等。这些关系是图的一部分。我需要找到根目的地和目的地之间的所有列表(只有一个目的地)。让root n和目标i。

N-A-B-I

N-A-d-i的

N-C-B-I

N-C-d-i的

我以为我可以使用拓扑排序来达到这些结果,但是如何?提前谢谢。

1 个答案:

答案 0 :(得分:4)

您不应该进行拓扑排序。只需使用广度优先搜索或深度优先搜索,然后存储所有以目的地结尾的路径。

示例伪代码DFS:

paths_to_destination = []

def dfs_store_destination(node, dest, path=None):
    if path is None:
         path = []

    Append node to path

    if node == dest:
        Add path to paths_to_destination
    else:
        for new_node in node.reachable_nodes:
            dfs_store_destination(new_node, dest, path)

    Remove node from path

dfs_store_destination(root, my_dest)