【发布时间】:2023-02-24 03:14:40
【问题描述】:
我有一个仅包含 0 和 1 的方阵。例如,
1 0 1 1 1
1 1 0 0 1
1 0 1 1 0
0 1 1 1 1
1 0 1 1 1
我想计算顶点为 1 且边与矩阵的行和列平行的矩形的数量。矩形的边缘允许有 0。这是一个这样的矩形的例子(它的顶点在方括号中)
[1] 0 1 1 [1]
1 1 0 0 1
1 0 1 1 0
0 1 1 1 1
[1] 0 1 1 [1]
【问题讨论】:
-
你计算包含在更大矩形内的矩形吗?重叠的矩形怎么样?
-
@ravenspoint 是的,所有这些都很重要。如果一个矩形包含在一个更大的矩形中,则两者都被计算在内。如果两个矩形重叠,则两者都被计算在内。
-
由于复杂性至少与输出的长度一样高,所以您不妨暴力破解它。
for left in range(width): for top in range(height): if matrix[top, left] == 1: for right in range(left+1, width): if matrix[top, right] == 1: for bottom in range(top+1, height): if matrix[bottom, left] == matrix[bottom, right] == 1: yield (left, top, right, bottom)
标签: algorithm graph combinatorics rectangles discrete-mathematics