如何生成/迭代所有" Connect-Four"游戏?

时间:2017-02-07 18:28:15

标签: algorithm permutation

我需要迭代所有不同的" Connect-Four"游戏可能。
网格有42个单元格,有21个红色和21个黄色单元 生成的每个游戏都必须使用每个部分,并且所有相同颜色的部分都是难以区分的(例如,如果您在解决方案中交换两个红色,它不会被视为另一个解决方案)

由此我可以得出结论

42!/21!*21! = 538257874440 possible games

我正在考虑生成包含21 0和21 1的二进制字符串,但除了生成每个42字符长的二进制字符串并逐个测试之外,我还没有知道如何做到这一点。那将是42! (1.4050061e + 51)要测试的字符串,因此不能选择。

你将如何制作所有这些可能的游戏?

1 个答案:

答案 0 :(得分:0)

似乎你并不关心其中一些游戏会提前结束。要简单地生成所有可能的组合,您应该将板视为矩阵,其中1代表黑色,0代表红色。 现在,如果我们为完整的电路板矢量化值矩阵,那么我们将得到像

这样的东西
[0,1,1,0,...] 

其中确切的顺序取决于排列。既然我们每种颜色都有21种,这意味着你基本上要求所有可能的矢量排列

[ones(1,21),zeros(1,21)]

(用Matlab和Python表示法)。在Matlab中,您将使用函数

生成所有排列的列表
perms([ones(1,21),zeros(1,21)])

我不确定你想要什么,因为很明显在实践中列举所有这些是不可行的。如果您只是对如何操作感兴趣,我建议您查看Matlab实现。它看起来像10行非常简单的代码。