You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言实现井字棋Minimax算法异常问题求助

问题分析与解决方案

核心问题

你的井字棋Minimax算法出现异常的根本原因有两个:

  • 缺少max和min函数的实现,导致运行时出现未定义行为,得分计算完全错误。
  • Minimax的终止条件逻辑不完整,未覆盖所有玩家获胜的场景。

问题详解

  1. 未定义的max/min函数:C标准库中没有内置的max(int, int)和min(int, int)函数,你的代码直接调用这两个函数但未实现,编译器会默认它们存在,但运行时会返回随机值,导致AI无法正确比较得分,只能选择第一个空位置(从左到右落子)。

  2. 终止条件逻辑缺失:原代码仅在当前玩家是'O'时处理对手获胜的情况,当当前玩家是'X'时,对手获胜的场景未被处理,会导致递归继续执行本应终止的无效状态,进一步加剧得分计算的混乱。

修正步骤

1. 添加max和min函数实现

在代码中添加这两个工具函数,确保得分比较逻辑正确:

int max(int a, int b) {
    return (a > b) ? a : b;
}

int min(int a, int b) {
    return (a < b) ? a : b;
}

2. 修正Minimax终止条件

修改minimax函数中的终止判断逻辑,覆盖所有获胜场景,无需区分当前玩家是'X'还是'O':

int minimax(char(*board)[3], int isMax, char var)
{
    int score;
    char oppVar;
    int maxScore = -1000;
    int minScore = 1000;

    if (var == 'X')
        oppVar = 'O';
    else
        oppVar = 'X';

    // 修正后的终止条件:先检查当前玩家获胜,再检查对手获胜,最后判断平局
    if (checkWnr(board, var))
        return 1;
    if (checkWnr(board, oppVar))
        return -1;
    if (!emptyCells(board))
        return 0;

    if(isMax)
    {
        for (int i = 0; i < 3; i++)
            for (int j = 0; j < 3; j++)
                if (board[i][j] == ' ')
                {
                    board[i][j] = var;
                    score = minimax(board, 0, oppVar);
                    maxScore = max(maxScore, score);
                    board[i][j] = ' ';
                }
        return maxScore;
    }
    else
    {
        for (int i = 0; i < 3; i++)
            for (int j = 0; j < 3; j++)
                if (board[i][j] == ' ')
                {
                    board[i][j] = var;
                    score = minimax(board, 1, oppVar);
                    minScore = min(minScore, score);
                    board[i][j] = ' ';
                }
        return minScore;
    }
}

验证效果

完成上述修改后,无论AI扮演'X'还是'O',都能正确计算最佳走法,不会出现从左到右落子的异常情况。

内容的提问来源于stack exchange,提问作者fl3m

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 17:59:52