一尘不染

生成所有唯一的Tic Tac Toe板的列表

algorithm

我想生成一个文本文件,其中包含所有19,683个 Tic-Tac-
Toe电路板布局,结构为0 =空白,1 = X和2 =O。不幸的是,数学不是我的强项,我似乎找不到任何示例在任何地方。

我向你保证,这不是为了功课。我打算通过Minimax计算器运行此数据,以便生成包含RGB值的图像,该值表示基于电路板设置的最佳移动。我正在为不支持功能的平台开发井字游戏(它是事件驱动的),因此我将游戏中的板子转换为数字,然后在图像中查找像素的RGB,以指示最佳效果是。这是一个厚脸皮的解决方法,但是它不需要比145x145像素的图像更多的RAM(145x145
= 21,025,因此每个像素有效地代表了基于电路板的推荐移动)。这也意味着我不必花费CPU时间,这是另一个优点。


阅读 213

收藏
2020-07-28

共1个答案

一尘不染

由于您需要电路板布局,因此数量很少(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个电路板布局。我不确定您想要什么格式,但是从输出中提取出来应该很容易。

2020-07-28