c - 在 Nim 游戏中 build 树

标签 c tree artificial-intelligence minimax

我想创建一款像 Nim 这样的游戏。

玩家可以拿走 1 或 M 个(定义的)立方体,获胜者是拿走最后一个立方体的玩家。我还将创建一个 minimax 函数,以便 MAX 玩家(总是先玩)做出最好的举动。我开始编写程序,但在创建树游戏时遇到困难。这是我的代码:

#define M 30
#define K 4

char player[3] = "MAX";
int cubesCounter = M;

struct Node {
    int value;
    int numCubes;
    struct Node *left;
    struct Node *right;
};

char switchPlayer() {
    if (strcmp(player, "MAX") == 0) {
        strcpy(player, "MIN");
    } else {
        strcpy(player, "MAX");
    }
}

struct Node buildGameTree() {
    struct Node *cube;
    cube->numCubes = M;

    cube->left = NULL;
    cube->right = NULL;

    if (cube->numCubes >= 1) {
        cube->numCubes = cube->numCubes - 1;
        cube->left = buildGameTree();
    }

    if (cube->numCubes >= M) {
        cube->numCubes = cube->numCubes - M;
        cube->right = buildGameTree();
    }
}

我在这些行中遇到错误,但我不知道出了什么问题:

cube->left = buildGameTree();
cube->right = buildGameTree();

谁能帮我实现这个功能吗?

最佳答案

您的buildGameTree应该是:

struct Node *buildGameTree(){
    struct Node *cube= calloc(1,sizeof(struct Node));
    cube->numCubes = M;

    cube->left = NULL;
    cube->right = NULL;

    if (cube->numCubes >= 1){
        cube->numCubes = cube->numCubes - 1;
        cube->left = buildGameTree();
    }
    if (cube->numCubes >= M){
        cube->numCubes = cube->numCubes - M;
        cube->right = buildGameTree();
    }
    return (cube);
}

即:

  • 为多维数据集分配内存;
  • 在函数结束时返回分配的多维数据集。

关于这个函数要做什么仍然存在一些问题,因为它不接收任何参数。自 cube->numCubes总是Mif (cube->numCubes >= 1)上将会有无限递归.

关于c - 在 Nim 游戏中 build 树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30305890/

相关文章:

c - %typemap 指令未在 SWIG 中编译

algorithm - 机器学习/人工智能 - 根据值/模式对列进行分类

javascript - reast ai sap 对话的回发

c++ - 如何从根文件夹及其所有子文件夹生成目录树?

python - 是否可以在 transform.compose 中使用非 pytorch 增强

c - 数组搜索 C 中的段错误

指针类型的正确术语

c - 预测C代码的输出

algorithm - 验证无向树中最长路径的不同方法

javascript - 复杂的层次树布局