修剪有向图的叶子组成部分

时间:2012-10-07 15:18:43

标签: java graph graph-algorithm directed-graph

给定有向图及其某些节点,如何修剪无法到达任何给定节点的节点。 (我称之为叶子组件,我不确定这是一个正确的术语)

是否有任何已知的算法有效地解决了这个问题?

如果您能为它指出一些Java开源代码,那将是完美的。

感谢。

2 个答案:

答案 0 :(得分:2)

从您给定的节点集开始广度优先搜索或深度优先搜索,并标记搜索遍历的所有节点。之后,无法从给定的节点集中访问所有未标记的节点,并且可以对其进行修剪。如果 n 是顶点数, m 是边数,这将解决 O(n + m)中的问题。

我个人更喜欢Tinkerpop Blueprints作为JVM / Java / Scala中图形处理的主库。

答案 1 :(得分:0)

如果我说得对,你需要找到Strongly Connected Components,这可以通过2次深度优先搜索在O(n + m)时间内找到。