C ++中的Cracker Barrel Puzzle解算器

时间:2012-01-18 06:26:48

标签: c++ recursion puzzle

我正在实施Cracker Barrel Puzzle的递归解决方案。

我的递归函数返回已解析板的状态的字符串表示以及导致该状态的所有步骤。 在我的递归函数的每个阶段,生成一个有效的游戏板,并在游戏板对象上递归调用该函数。

我的问题是:当当前游戏板对象上没有有效的游戏板移动时,我需要返回什么?目前,这种情况导致该功能崩溃。

5 个答案:

答案 0 :(得分:1)

你有确定基本情况的问题。对于数学递归函数,基本情况很简单,例如F(0)对于 Fibonacci数的情况。

虽然,我不熟悉该游戏或您的确切实现,但如果您在不再出现递归调用时达到状态,请返回Base value。对于数字,它将是strings一个zero长度字符串的基值。对于Gameboard的情况,对每个单元格使用默认状态以指示这是一个基本情况并在返回时适当地处理。

答案 1 :(得分:1)

实现递归函数的方法有很多种。没有任何关于你如何决定去的命中(你暗示你在一个字符串中返回游戏状态...... std :: string?),也许你只需要一个if语句:

std::string recursive_game(std::string &populate)
{
    if (...game is finished...) {
        ...
        return populate;
    } else {
        ...
        return recursive_game(populate);
    } 
}

int main()
{
    std::string completed_game;

    recursive_game(completed_game);

    return 0;
}

答案 2 :(得分:0)

您似乎必须测试返回值并抛出异常,以防您无法返回正确的值。

答案 3 :(得分:0)

您可以尝试添加健全性检查功能

void main ()
{
    bool validMovesAvailable =true;
    string currentMoves;  
    do
    {
        currentMoves = doNextMove (currentMoves); //your current function
        validMovesAvailable = checkAnyMoreMoves (currentMoves); //sanity check function

    }while (validMovesAvailable);


}

答案 4 :(得分:0)

您返回电路板上留下的钉子数量。这是比赛的得分。