在网格中随机播放多边形

时间:2014-08-30 01:10:02

标签: algorithm matrix multidimensional-array shuffle

我有一个2d数组,其中包含长度为1到4的多项式,我想要改变它们的位置和旋转。

例如:

[0,0,1,0,0,0,0,0,0,0]
[0,0,1,0,0,0,0,0,0,0]
[0,0,1,1,0,0,0,0,0,0]
[0,0,0,0,0,0,0,0,0,0]
[0,0,X,0,0,0,0,3,0,0]
[0,0,0,0,0,0,0,0,0,0]
[0,0,0,2,2,0,0,0,0,0]
[0,0,0,2,0,0,0,X,0,0]
[0,0,0,0,0,0,0,0,0,0]
[0,0,0,0,0,0,0,0,0,0]

首先,0是空格,数字是多元数。其中有四个:一个由1s制成的tetromino“L”,一个由2s制成的tromino“L”和一个由3制成的monomino。我想要改变它们的位置,改变它们的位置和旋转而不会失去它们的结构。 / p>

其次,尽管0是可用空格,但X不是并且不能被洗牌。

如果有人可以帮助我解决问题的第一部分,我会很高兴,但是如果有任何聪明(或无聊)足以解决第二部分的问题,我会非常感激,因为这些东西已经过去了我的脑袋。

编辑:

问题还可以看作将N个多面体放在固定大小的2d网格中。

1 个答案:

答案 0 :(得分:0)

我认为你应该按照你拥有它的方式存放一块板,而不是存储一块板块,以及它们在板上的旋转和位置。你现在存储它的方式,操作起来要困难得多,因为你已经基本上将数据最终确定为单个数据集。

如果您愿意,可以在电路板上存放一组布线(只是为了占用更少的内存空间),其中真正与您的" X"错误与未利用的空间相关。

然后我会在放置之前为每件作品随机选择一个旋转。

在您知道最终的随机旋转后,您可以浏览片段列表,生成所有放置位置的列表,并随机选择其中一个位置。您必须为每件作品单独生成此潜在展示位置列表,因为一旦放置一件,您将无法在其上放置另一件!

这里的诀窍是将您的纸板数据与您的碎片数据分开,以便您可以更轻松地操作碎片。