【发布时间】:2012-02-19 20:02:16
【问题描述】:
我无法打开此代码:
void dfs(int i = 1) {
static int preorder = 0;
d[i].first = ++preorder;
d[i].second = 1;
for (list<int>::iterator it = tree[i].begin(); it != tree[i].end(); ++it) {
dfs(*it);
d[i].second += d[*it].second;
}
}
进入迭代。如您所见,它找到每个节点的预购编号以及它有多少后代。 我必须这样做,因为内存限制(数据大小最多为 10^6)。
提前致谢。
【问题讨论】:
-
这不是一个很好的使用静态变量...
-
为什么?这个函数只被调用一次。
-
你递归调用它,所以它实际上被调用了很多次。
-
嗯,也许我误解了一些东西,但我认为静态变量只初始化一次,它的行为就像全局变量一样(除了它不在全局命名空间中)那么你到底觉得什么不好?我能看到的唯一问题是下一个非递归调用将不会重置变量预购的值。请澄清:)
-
@rAum:没错。下次您非递归调用该函数时,它将不起作用。如果您在多线程情况下使用该函数,它也将无法正常工作。
标签: c++ tree depth-first-search iteration descendant