读书人

调试了一个水桶分水的递归程序//如何递

发布时间: 2013-09-28 10:01:20 作者: rapoo

调试了一个水桶分水的递归程序//怎么递归函数回滚返回,添加的元素一个一个的消失。。。。
递归函数里递归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只是搜索的中间状态。找到答案了当然要存到另一个地方去。单独一个状态是无法同时表示搜索中间状态和最后答案的。

读书人网 >C++

热点推荐