C++ 如何使用带有alpha-beta修剪的minimax获得AI最佳移动

C++ 如何使用带有alpha-beta修剪的minimax获得AI最佳移动,c++,artificial-intelligence,tic-tac-toe,minimax,alpha-beta-pruning,C++,Artificial Intelligence,Tic Tac Toe,Minimax,Alpha Beta Pruning,我正在实现一个简单的Tictatcoe游戏,只是为了尝试使用Alpha-Beta修剪算法的Minimax,我被绊倒了。。。 我面临的问题是:人工智能没有正确响应玩家的最后一步,我也不知道我的错误在哪里。 以下是minimax代码: int minimax( int depth, int alpha, int beta, bool maximizer ) { std::vector<point> moves; getPossibleMoves( moves );

我正在实现一个简单的Tictatcoe游戏,只是为了尝试使用Alpha-Beta修剪算法的Minimax,我被绊倒了。。。 我面临的问题是:人工智能没有正确响应玩家的最后一步,我也不知道我的错误在哪里。 以下是minimax代码:

int minimax( int depth, int alpha, int beta, bool maximizer ) {
    std::vector<point> moves;
    getPossibleMoves( moves );  
    if( depth == 0 || moves.size() == 0 ) {
        return evaluateBoard();
    }
    if( maximizer ) {
        for( std::vector<point>::iterator i = moves.begin(); i != moves.end(); i++ ) {
            board[( *i ).x][( *i ).y] = COMPUTER;
            int score = minimax( depth - 1, alpha, beta, false );
            if( score > alpha ) {
                alpha = score;
                bestMove = ( *i );
            }
            board[(*i).x][(*i).y] = EMPTY;
            if( alpha >= beta ) break;
        }
    } else {
        for( std::vector<point>::iterator i = moves.begin(); i != moves.end(); i++ ) {
            board[( *i ).x][( *i ).y] = HUMAN;
            int score = minimax( depth - 1, alpha, beta, true );
            if( score < beta ) {
                beta = score;
                bestMove = ( *i );
            }
            board[( *i ).x][( *i ).y] = EMPTY;
            if( alpha >= beta ) break;
        }
    }
    return maximizer ? alpha : beta;
}

我非常感谢您的帮助。

您实际选择移动的方法可能有错误,您使用了计算出的bm值(请也发布代码)
int bm = minimax( 4, -0xffffff, 0xffffff, true );