给定有向图及其某些节点,如何修剪无法到达任何给定节点的节点。 (我称之为叶子组件,我不确定这是一个正确的术语)
是否有任何已知的算法有效地解决了这个问题?
如果您能为它指出一些Java开源代码,那将是完美的。
感谢。
答案 0 :(得分:2)
从您给定的节点集开始广度优先搜索或深度优先搜索,并标记搜索遍历的所有节点。之后,无法从给定的节点集中访问所有未标记的节点,并且可以对其进行修剪。如果 n 是顶点数, m 是边数,这将解决 O(n + m)中的问题。
我个人更喜欢Tinkerpop Blueprints作为JVM / Java / Scala中图形处理的主库。
答案 1 :(得分:0)
如果我说得对,你需要找到Strongly Connected Components,这可以通过2次深度优先搜索在O(n + m)时间内找到。