c++ - 生成 "unique"矩阵

标签 c++ math matrix

这可能更像是一个数学问题,而不是一个编程问题,但由于我专门从事 c++ 工作,我想可能有一个库或我不知道的东西。 不管怎样,我正在开发一个游戏,我生成一些 X × X 的 bool 值数组,并随机将其中的 Y 指定为 true。想想俄罗斯方 block 之类的东西。我需要知道的是是否有一种巧妙的方法来生成“唯一”数组,而无需将数组旋转 4 次并每次都进行比较。再次以俄罗斯方 block 为例。 “L”件无论如何旋转都是“L”件,但“J”件将是不同的独特件。作为一个附带问题,有没有办法确定 X x X 数组的唯一可能配置的最大数量,其中 Y 填充了元素?

最佳答案

您可以对每个 (x,y) 真实网格元素求和 (x-X/2)^2 + (y-X/2)^2。这有效地给出了从网格中心到每个“真实”单元格的平方距离。旋转时相同的两个网格共享这样的属性:它们的“真实”单元距中心的距离都相同,因此这个总和也将是相同的。如果网格都具有唯一的平方和,则它们在旋转下是唯一的。

请注意,虽然唯一总和保证不会出现循环重复,但反之则不然;两个不匹配的网格可以具有相同的平方和。

如果您的网格非常小,并且您正在努力最大限度地增加不同模式的数量,那么您可能想要测试具有相等总和的那些。否则,如果您的生成器生成的网格的平方和与先前创建的网格相匹配,请拒绝它。

关于c++ - 生成 "unique"矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59888660/

相关文章:

c++ - 二进制反序列化 - 如何找到它是什么类型的序列化?

python - 如何标准化矩阵?

r - 查找给定列中最常包含最大值的行

c++ - 在 C++ 中比较字符时是否需要遵循特殊语法?

c++ - 友元和静态成员函数有哪些类型的成员访问权限?

c++ - 如何使用 SSE 优化矩阵 3 乘 3 的点?

R - 合并呈现行元素的公共(public)列位置的矩阵的多行?

regex - 如何在vim中重新编号列表?

java - 需要有关寓教于乐游戏程序的帮助

c# - 如何从矩阵中获取一维数组