调试了一个水桶分水的递归程序//怎么递归函数回滚返回,添加的元素一个一个的消失。。。。
递归函数里递归10次 双端队列对象states.push_back(next);添加十次元素,等递归函数结束,回滚返回10 9 8 7次的递归调用时,添加的元素就消失了??????
void SearchStateOnAction(deque<BucketState>& states, BucketState& current, int from, int to)
{
if(IsCurrentActionValid(current, from, to))
{
BucketState next;
bool bDump = current.DumpWater(from, to, next);
if(bDump && !IsProcessedState(states, next))
{
states.push_back(next);
SearchState(states);
states.pop_back();
int j =0;
}
}
}
void SearchState(deque<BucketState>& states)
{
BucketState current = states.back();
if(current.IsFinalState())
{
PrintResult(states);
return;
}
for(int j = 0; j < buckets_count; ++j)
{
for(int i = 0; i < buckets_count; ++i)
{
SearchStateOnAction(states, current, i, j);
}
}
}
[解决办法]
每次递归后面跟一个 pop,元素数目当然要依次减少了。
[解决办法]
search state只是搜索的中间状态。找到答案了当然要存到另一个地方去。单独一个状态是无法同时表示搜索中间状态和最后答案的。