生成所有唯一的Tic Tac Toe板的列表
问题内容:
我想生成一个文本文件,其中包含所有19,683个 Tic-Tac-
Toe电路板布局,结构为0 =空白,1 = X和2 =O。不幸的是,数学不是我的强项,我似乎找不到任何示例在任何地方。
我向你保证,这不是为了功课。我打算通过Minimax计算器运行此数据,以便生成包含RGB值的图像,该值表示基于电路板设置的最佳移动。我正在为不支持功能的平台开发井字游戏(它是事件驱动的),因此我将游戏中的板子转换为数字,然后在图像中查找像素的RGB,以指示最佳效果是。这是一个厚脸皮的解决方法,但是它不需要比145x145像素的图像更多的RAM(145x145
= 21,025,因此每个像素有效地代表了基于电路板的推荐移动)。这也意味着我不必花费CPU时间,这是另一个优点。
问题答案:
由于您需要电路板布局,因此数量很少(19683年)。
您可以通过蛮力生成所有这些。每个盒子只有3种可能性。并且有9个盒子,只需遍历所有盒子。
编辑:
int c = 0;
while (c < 262144){
bool valid = (c & 3) < 3;
valid &= ((c >> 2) & 3) < 3;
valid &= ((c >> 4) & 3) < 3;
valid &= ((c >> 6) & 3) < 3;
valid &= ((c >> 8) & 3) < 3;
valid &= ((c >> 10) & 3) < 3;
valid &= ((c >> 12) & 3) < 3;
valid &= ((c >> 14) & 3) < 3;
valid &= ((c >> 16) & 3) < 3;
if (valid){
int i = c;
int j = 0;
while (j < 9){
cout << (i & 3) << " ";
i >>= 2;
j++;
}
cout << endl;
}
c++;
}
这将打印出所有19,683个电路板布局。我不确定您想要什么格式,但是从输出中提取出来应该很容易。