检查数组是否可以放在另一个数组中

时间:2013-02-20 13:30:01

标签: php arrays algorithm

我正在编写一个PHP脚本来创建一个arduino“俄罗斯方块时钟”。我想生成一系列块俄罗斯方块来显示数字。

我的数字数组(示例为“0”):(格式化显示)

1 1 1 1 1 1
1 1 1 1 1 1
1 1 0 0 1 1
1 1 0 0 1 1
1 1 0 0 1 1
1 1 0 0 1 1
1 1 1 1 1 1
1 1 1 1 1 1

其中:

1 = must be filled
0 = empty
2 = informed (after check if block can be put)

现在我有了tetris块数组,就像那样:

0 0 0 0
0 0 0 0
0 0 0 0
1 1 1 1

OR

1 0 0 0
1 0 0 0
1 0 0 0
1 0 0 0

我想检查一下我是否可以将我的tetris块放入数组

例如。 :放置第一个块后,我会得到以下数组:(它是一个“T”块)

1 1 1 1 1 1
1 1 1 1 1 1
1 1 0 0 1 1
1 1 0 0 1 1
1 1 0 0 1 1
1 1 0 0 1 1
1 2 1 1 1 1
2 2 2 1 1 1

起初我尝试在行和列中切割表格以查看它是否与我的块相对应而且我做了很多更改而没有成功。

您可以看到我的两个测试脚本:http://pastebin.com/znnmvT4ghttp://pastebin.com/D9h51Xw3

如果出现错误或无法解决问题,我会保留历史补充以使用回溯。

因此,我首先检查我的阻挡剂是否可以添加到我的数字阵列中。

感谢您的想法!

1 个答案:

答案 0 :(得分:1)

将您的俄罗斯方块放在一个阵列中,其数量与数字阵列完全相同,并且只用零围绕它来定义它在板上的位置。 (注意我使用的是2而不是1,这将在后面解释)

0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
2 2 2 2 0 0

然后将所有现有数组值添加到另一个数组中的相应值。

1 1 1 1 1 1
1 1 1 1 1 1
1 1 0 0 1 1
1 1 0 0 1 1
1 1 0 0 1 1
1 1 0 0 1 1
1 3 1 1 1 1
5 5 5 3 1 1

检查结果数组是否包含5.如果是,则不能将tetris块放置在该位置,因为那里已存在块。

同时检查是否没有2。如果是这样,则填充不应填充的空间。 (这就是你应该使用2而不是1的原因。)

1 1 1 1 1 1
1 1 1 1 1 1
1 1 0 0 1 1
1 1 0 0 1 1
1 1 0 0 1 1
3 3 2 2 1 1
1 3 1 1 1 1
3 3 3 1 1 1

如果这些都不属实,那么你就有了一个可行的解决方案。

1 1 1 1 1 1
3 3 3 3 1 1
1 1 0 0 1 1
1 1 0 0 1 1
1 1 0 0 1 1
1 1 0 0 1 1
1 3 1 1 1 1
3 3 3 1 1 1

这可能不是唯一的解决方案,所以你必须为数字数组中的tetris块所有可能的位置执行此操作。为了获得最佳位置并创建一个可行的解决方案,您可能需要使用像A *这样的算法。