我手头有问题,可以说明如下。
有两组节点(在二分有向图中),type1和type2。
对于type1图形中的每个节点,我必须找到以这种方式构造的集合:
让node1成为type1的第一个节点。
在集合中添加node1。 对于node1,找出通过边缘连接的type2的节点列表,其源是node1。 对于上面获得的列表中的每个成员,找到通过边缘连接的类型1的节点(不在集合中),其目标是类型2的节点。在集合中添加这些节点。 重新运行,直到集合中没有任何内容添加。
迭代type1的所有节点。
我的直觉是递归实现,但我无法弄清楚哪些参数(困惑)。
有什么建议吗?
答案 0 :(得分:1)
这听起来像你可以修改breadth first search算法(你可以使用队列实现)。
答案 1 :(得分:1)
由于它是定向的,所以节点有一个总顺序。
您可以使用深度优先搜索结构。
def visit( some_node, type_1_set ):
assert node.type == 1
type_1_set.add( some_node )
for child in some_node.children:
if child.type == 2:
for grand_child in child.children:
if grant_child.type == 1:
visit( grand_child, type_1_set )
听起来像是那样。