选择要在函数中作用的数组,而不必为每个数组的副本指定函数的版本

choose array to act on in function without a version of function for each copy of array

本文关键字:数组 函数 版本 副本 作用 选择 不必      更新时间:2023-10-16

我正试图将极大极小型算法应用于Reversi/Othello类型的游戏-我发现的问题是,每个1/2层将需要它自己的"假"游戏板进行测试。

因此,由于数组不能作为参数传递,因此我要么需要一个具有64个参数的函数和每个1/2层的数组,要么我需要为每个层(即checkMovePly1, checkMovePly2等)手动编写函数和数组的副本,或者在本地创建数组(此时AI采取移动将导致每回合生成和创建64^(2*ply)数组,这似乎可能会运行得有点慢)。

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

任何想法如何绕过多数组问题,这是一个合理的方法吗?

c++提供了各种容器,应该优先于数组。在这种情况下,我建议使用std::array。如果你没有std::array, std::vector也可以工作。

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

该函数将按值复制传入的数组

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

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

第二,标准(或自定义)容器类使用起来更安全,并且在需要时更容易复制。如果没有一些技巧,原生数组很难复制,此时使用容器类应该会使代码更容易阅读。

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