DAG中两个节点之间的路径数

时间:2011-03-02 07:43:23

标签: algorithm graph-theory

我想找到DAG中两个节点之间的路径数。 O(V ^ 2)和O(V + E)是可以接受的。

O(V + E)提醒我以某种方式使用BFS或DFS,但我不知道如何。 有人可以帮忙吗?

2 个答案:

答案 0 :(得分:20)

对拓扑进行拓扑排序,然后将目标顶点向后扫描到源。对于每个顶点v,保留从v到目标的路径数的计数。当您到达源时,该计数的值就是答案。那是O(V+E)

答案 1 :(得分:6)

从节点u到v的不同路径的数量是从节点x到v的不同路径的总和,其中x是u的直接后代。

为每个节点存储目标节点v的路径数(临时设置为0),使用相反方向从v(此处值为1)转发并为每个节点重新计算此值(总和所有后代的值)直到你到达你。

如果按拓扑顺序处理节点(方向相反),则可以保证在访问给定节点时已经计算了所有直接后代。

希望它有所帮助。