【发布时间】:2020-03-01 16:52:32
【问题描述】:
我遇到了一个问题,我在图中寻找一种特殊类型的节点。 该算法的工作原理如下:
bool findSpecial(Node n)
{
if(isSpecial(n))
return true;
bool isSpecial = false;
vector<Node> childs = getChildren(n);
foreach(child, childs)
{
isSpecial |= findSpecial(child);
}
if(isSpecial)
markCurrentNodeSpecial(n);
return isSpecial;
}
上面是算法的模板,假设输入是DAG。 它在图中查找特殊节点,如果其 DFS 树中的任何节点是特殊的,则将当前节点标记为特殊。
该算法基本上是在可以到达的任何地方填充这个特殊属性。
然而,在极少数情况下,它可能会导致 Stack Overflow。
我试图弄清楚是否可以迭代地完成相同的事情。 迭代方法的问题是节点的所有子节点是否都已处理的信息不容易获得。
有什么建议吗?
【问题讨论】:
标签: c++ recursion stack depth-first-search