在2D字节数组中查找矩形的数量


12
0000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000
0000001111111111111100000000000000000011111111111111100000000000000000
0000001111111111111100000000000000000011111111111111100000000000000000
0000001111111111111100000000000000000011111111111111100000000000000000
0000001111111111111100000000000000000011111111111111100000000000000000
0000000000000000000000000000000000000011111111111111100000000000000000
0000000000000000000000000000000000000011111111111111100000000000000000
0000000000011111100000000000000000000011111111111111100000000000000000
0000000000011111100000000000000000000011111111111111100000000000000000
0000000000011111100000000000000000000011111111111111100000000000000000
0000000000000000000000000000000000000011111111111111100000000000000000
0000000000000000000000000000000000000011111111111111100000000000000000
0000000000000111111000000000000000000011111111111111100000000000000000
0000000000000100001000000111111000000011111111111111100000000010000000
0000000000000100001000000111111000000000000000000000011000000000000000
0000000000000111111000000111111000000000000000000000011000000000000000
0000000000000000000000000000111111000000000000000000000000000000000000
0000000000000000000000000000111111000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000

您将得到一个二维数组,大小为mx n。确保所有字节均为1或0。找到在2d中查看时由1表示的矩形的数量,如上所示。

仅考虑完全填充的矩形进行计数。
矩形必须用0包围,除非它们在边缘上(尽管1的对角线接触矩形是可以的(请参见示例)。

例如,在上面的数组中有5个有效矩形。

您可以使用任何语言。


1
我认为更好的说法是:矩形必须用0或边缘包围
Cruncher 2014年

做完了 感谢您用更好的英语措辞。
microbian

1100\n1100\n0011\n0011
Cruncher 2014年

1
我认为这就是为什么我写“相邻/重叠”的原因。从我的初衷出发,这是2个有效的矩形。但是“周围”条件现在限制了它们。你有更好的方法来解释它
microbian

1
即使在相邻处,对角线是否也意味着相邻也是不明确的。同样模棱两可与否包围手段,围在角落,或只是双方
排排坐

Answers:


2

GolfScript,107个字符

.n?):L;'1'/{,}%{1$+)}*;][]\{:A{{+}+[1L.~)-1]%&}+1$\,.@^\[[[A]]+{|}*]+}/{.{L%}{%$..&1$,1$,/*$=}:C~\{L/}C&},,

输入必须在STD​​IN上给出。

例子:

11
01
-
0

111
111
-
1

100
001
001
-
2

11100
10101
11100
-
1

101
010
101
-
5

见上述评论-似乎“有效”矩形需要有宽/高都> 1
保罗[R

@PaulR该规则未写在问题中,从所有合理的定义来看,它们都是非常好的矩形-也许以后再添加。
2014年

我同意您的定义-我只是在评论中指出了差异-好像OP需要更新问题以使其更加明确。
Paul R

我澄清了大小为1的矩形是有效的。
microbian

但是您在评论中还说:“为澄清起见,退化的矩形不应该计算在内,对吗?例如,单个1或相邻1的单个子行/子列是否无效?” 这样说:“是的,它们是无效的,不应该被计算在内。”
Paul R
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.