我需要迭代所有不同的" Connect-Four"游戏可能。
网格有42个单元格,有21个红色和21个黄色单元
生成的每个游戏都必须使用每个部分,并且所有相同颜色的部分都是难以区分的(例如,如果您在解决方案中交换两个红色,它不会被视为另一个解决方案)
由此我可以得出结论
我正在考虑生成包含21 0
和21 1
的二进制字符串,但除了生成每个42字符长的二进制字符串并逐个测试之外,我还没有知道如何做到这一点。那将是42! (1.4050061e + 51)要测试的字符串,因此不能选择。
你将如何制作所有这些可能的游戏?
答案 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行非常简单的代码。