0

我正在尝试将 minimax 类型算法应用于 Reversi/Othello 类型的游戏 - 我发现的问题是每个 1/2 层都需要自己的“假”游戏板进行测试。

因此看起来,由于数组不能作为参数传递,我要么需要一个具有 64 个参数的函数和每个 1/2 层的数组,要么我需要为每个层手动复制函数和数组的代码(即 checkMovePly1, checkMovePly2 等),或在本地创建数组(此时 AI 采取行动将导致每回合生成和创建 64^(2*ply) 个数组,这看起来可能运行得有些慢)。

如果我能解决数组问题,这似乎应该适用于几层,因为它只会是 O(64^(2*ply)) 的时间复杂度,尽管取决于可能是 64^(2 *ply) 数组的创建和销毁。

知道如何解决多阵列问题,这是一种合理的方法吗?

4

2 回答 2

0

C++ 提供了比数组更受欢迎的各种容器。在这种情况下,我建议使用std::array. 如果你没有std::array, anstd::vector也可以。

void foobar(std::array<int, 64> board);

此函数将复制按值传入的数组。

于 2013-03-29T20:49:05.080 回答
0

第一个数组可以作为参数传递,但调用的函数将直接在原始数组上操作,而不是它自己的副本(注意)。

void foo(int[8][8] board);

其次,标准(或自定义,如果需要)容器类使用起来更安全,并且在需要时更容易复制。如果没有一些小技巧,本机数组不会轻易复制,此时使用容器类应该会使您的代码更易于阅读。

第三,这个问题看起来像是递归算法的经典主题,它可以允许所有工作在同一个数组(或容器类)实例上完成,从而保持您的资源需求 O(1):固定游戏板大小和已知最大递归深度。

于 2013-03-29T21:43:56.843 回答