选择要在函数中作用的数组,而不必为每个数组的副本指定函数的版本
choose array to act on in function without a version of function for each copy of array
我正试图将极大极小型算法应用于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):固定的游戏板大小和已知的最大回归深度。
相关文章:
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- 打印 2D 动态数组 c++ 函数
- C++数组函数
- 在数组函数指针中调用void
- 数组函数似乎没有找到最大值
- 使用数组函数和循环求解伪元编码|C
- 在头文件中的函数原型中获取指针数组:函数声明为 void
- 数组函数错误输出
- 读取文件,然后创建数组函数C++
- 指针数组函数参数-奇怪的行为
- 二维数组 - 函数
- "return"没有从数组函数返回正确的值
- 数组函数问题
- 数组函数的大小返回 int 的大小而不是数组
- 从数组函数中删除元素
- 如何从C++中最好地调用具有C99风格数组函数签名的函数
- 追加/打印/插入数组c++函数问题
- 如何将数组函数转换为指针函数
- 多维数组函数输出垃圾
- C++:数组函数的递归最大值