【发布时间】:2011-09-01 20:18:29
【问题描述】:
我有一个依赖图,我表示为 Map<Node, Collection<Node>>(在 Java 中,或 f(Node n) -> Collection[Node] 作为函数;这是从给定节点 n 到依赖于的节点集合的映射n)。该图可能是循环的*。
给定一个节点列表badlist,我想解决一个reachability problem:即生成一个Map<Node, Set<Node>> badmap,它表示从列表badlist中的每个节点N到包括N的一组节点的映射或其他传递依赖它的节点。
例子:
(x -> y means node y depends on node x)
n1 -> n2
n2 -> n3
n3 -> n1
n3 -> n5
n4 -> n2
n4 -> n5
n6 -> n1
n7 -> n1
这可以表示为邻接图{n1: [n2], n2: [n3], n3: [n1, n5], n4: [n2, n5], n6: [n1], n7: [n1]}。
如果badlist = [n4, n5, n1],那么我希望得到badmap = {n4: [n4, n2, n3, n1, n5], n5: [n5], n1: [n1, n2, n3, n5]}。
我在网上寻找图形算法参考资料时苦苦挣扎,所以如果有人能指出一个有效的算法描述以实现可访问性,我将不胜感激。 (对我没有有帮助的一个例子是http://www.cs.fit.edu/~wds/classes/cse5081/reach/reach.html,因为该算法是确定特定节点A是否可以从特定节点B到达。)
*cyclic: 如果你很好奇,那是因为它代表 C/C++ 类型,并且结构可以具有指向相关结构的指针的成员。
【问题讨论】: