在没有递归的情况下实现Minimax

时间:2011-11-14 07:25:23

标签: c++ c recursion tic-tac-toe minimax

我正在寻找一个Tic Tac Toe解决机器人。为了练习,我使用minimax算法编写了一个Tic Tac Toe游戏,该算法非常有效。当我想将代码移植到控制器时,我发现该控制器的C / C ++编译器都不支持递归函数。因此,我需要帮助将此递归minimax函数转换为使用迭代或内部堆栈的函数:

int miniMax (char board[BOARD_DIM][BOARD_DIM], _Bool minNode, int *xBest, int *yBest)
{
    int possibleMoves[NSQUARES][2];
    int nPossibleMoves = generateMoves(board, possibleMoves);
    char boardChild [BOARD_DIM][BOARD_DIM];
    int ind, x_ind, y_ind;
    int minScore, maxScore;
    if (gameOver(board))
        return evaluateState(board);
    else if (minNode)
    {
        minScore = +INFINITY;
        for (ind = 0 ; ind < nPossibleMoves; ind++) 
        {
            duplicateBoard(board, boardChild);
            x_ind = possibleMoves[ind][0];
            y_ind = possibleMoves[ind][1];
            updateboard(boardChild, x_ind, y_ind, cPlayer);
            int score = miniMax(boardChild,!minNode ,&x_ind ,&y_ind);
            if (minScore > score)
                minScore = score;
        }
        return minScore;
    }
    else if (!minNode)
    {
        maxScore = -INFINITY;
        for (ind = 0 ; ind < nPossibleMoves; ind++) 
        {
            duplicateBoard(board, boardChild);
            x_ind = possibleMoves[ind][0];
            y_ind = possibleMoves[ind][1];
            updateboard(boardChild, x_ind, y_ind, cComputer);
            int score = miniMax(boardChild,!minNode ,&x_ind ,&y_ind);
            if (maxScore < score)
            {
                maxScore = score;
                *xBest = x_ind;
                *yBest = y_ind;
            }
        }
        return maxScore;
    }

我完全迷失了如何做到这一点。 我感谢任何帮助:)

1 个答案:

答案 0 :(得分:6)

如果是嵌入式的,我会

  • 以二进制编码位置(位矩阵而不是2dim字节数组)
  • 编码完整的解决方案图,所以一切都只是查找(线性查找可以很好地处理这种复杂性)

enter image description here