关于递归算法的思考

时间:2010-07-27 01:22:15

标签: algorithm recursion

我手头有问题,可以说明如下。

有两组节点(在二分有向图中),type1和type2。

对于type1图形中的每个节点,我必须找到以这种方式构造的集合:

让node1成为type1的第一个节点。

在集合中添加node1。 对于node1,找出通过边缘连接的type2的节点列表,其源是node1。 对于上面获得的列表中的每个成员,找到通过边缘连接的类型1的节点(不在集合中),其目标是类型2的节点。在集合中添加这些节点。 重新运行,直到集合中没有任何内容添加。

迭代type1的所有节点。

我的直觉是递归实现,但我无法弄清楚哪些参数(困惑)。

有什么建议吗?

2 个答案:

答案 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 )

听起来像是那样。