【发布时间】:2014-06-10 17:59:17
【问题描述】:
我想在一棵树上执行 BFS,找出某一片叶子,但该图本质上是动态的,当我落在一片叶子上并且那片叶子不是我要找的那片叶子时,它的子节点是从叶子计算(叶子不再是叶子它是一个节点)。
我尝试了两种实现,都产生了错误的结果。我认为指针正在失效,或者这是一个不正确的实现。我的代码如下
int y=0;
while(graph.end() - graph.begin() < 262145 and graph.end() - graph.begin() < y){
if(found(graph[y])){
clock2 = graph[y];
break;
}
else{
if(graph[y].b[0] < 4) graph.push_back(move1(graph[y]));
if(graph[y].b[1] < 4) graph.push_back(move2(graph[y]));
}
y++;
}
下一个实现是这样的
for(vector<foo> :: iterator i = graph.begin();i!=graph.end();i++){
if(found(*i)){
clock2 = *i;
break;
}
else{
if(i->b[0] < 4) graph.push_back(move1(*i));//move1 and move2 are
if(i->b[1] < 4) graph.push_back(move2(*i));//functions of return type foo
}
}
这两种情况都会导致程序崩溃。他们有什么问题,如何实施这些?如有其他疑问,请发表评论。
【问题讨论】:
-
你不能使用向量,因为某些插入可能会使迭代器无效,比如当大小超过容量时。
-
在第一个 sn-p 中,这看起来不对:
graph.end() - graph.begin() <= y。 -
这是什么神奇的数字? graph.end() - graph.begin()
-
这是树的最大允许大小...准确地说是 4^9 +1
标签: c++ vector tree iterator breadth-first-search