在 Python 中查找所有填充有 0 的矩形
pythonserver side programmingprogramming更新于 2025/10/17 20:28:17
假设我们有一个二进制二维矩阵,现在我们必须找到所有填充有 0 的矩形的起点和终点。我们必须记住,矩形是分开的,不会相互接触,但它们可以接触数组边界。只有一个元素的矩形也是可能的。
因此,如果输入如下 −
| 1 | 0 | 1 | 1 | 1 | 0 | 1 |
| 1 | 1 | 0 | 1 | 1 | 1 | 1 |
| 1 | 0 | 1 | 1 | 0 | 0 | 1 |
| 1 | 0 | 1 | 1 | 0 | 0 | 1 |
| 1 | 0 | 1 | 1 | 0 | 1 | 1 |
| 1 | 0 | 1 | 0 | 0 | 0 | 0 |
| 1 | 1 | 1 | 0 | 0 | 0 | 1 |
| 1 | 0 | 1 | 1 | 1 | 0 | 1 |
则输出将是 [[0, 1, 0, 1], [0, 5, 0, 5], [1, 2, 1, 2], [2, 3, 2, 4], [3, 1, 5, 1], [3, 4, 6, 5], [5, 3, 6, 5], [7, 1, 7, 1], [7, 5, 7, 5]]
为了解决这个问题,我们将遵循以下步骤 −
- 定义一个函数 find_rect() 。这将需要 i、j、a、输出、索引
- x := 行数
- y := 列数
- flag_col := 0
- flag_row := 0
- 对于范围从 i 到 x 的 m,执行
- 如果 a[m, j] 与 1 相同,则
- flag_row := 1
- break
- 如果 a[m, j] 与 5 相同,则
- 不执行任何操作
- 对于范围从 j 到 y 的 n,执行
- 如果 a[m, n] 与 1 相同,则
- flag_col := 1
- break
- a[m, n] := 5
- 如果 a[m, n] 与 1 相同,则
- 如果 flag_row 与 1 相同,则
- 在 output[index] 末尾插入 m-1
- 否则,
- 在 output[index] 末尾插入 m
- 如果 flag_col 与 1 相同,则
- 在 output[index] 末尾插入 n-1
- 否则,
- 在 output[index] 末尾插入 n
- 如果 a[m, j] 与 1 相同,则
- 从 main 方法中,执行以下操作−
- n := a 的大小
- op := 一个新的列表
- idx := -1
- 对于范围在 0 到 n 内的 i,执行
- 对于范围在 0 到 a[0] 的大小内的 j,执行
- 如果 a[i, j] 与 0 相同,则
- 将 [i,j] 插入到 op 中
- idx := idx + 1
- find_rect(i, j, a, op, idx)
- 如果 a[i, j] 与 0 相同,则
- 对于范围在 0 到 a[0] 的大小内的 j,执行
- 显示 op
示例代码
让我们看看下面的实现以便更好地理解 −
def find_rect(i,j,a,output,index): x = len(a) y = len(a[0]) flag_col = 0 flag_row = 0 for m in range(i,x): if a[m][j] == 1: flag_row = 1 break if a[m][j] == 5: pass for n in range(j, y): if a[m][n] == 1: flag_col = 1 break a[m][n] = 5 if flag_row == 1: output[index].append( m-1) else: output[index].append(m) if flag_col == 1: output[index].append(n-1) else: output[index].append(n) def get_coord(a): n = len(a) op = [] idx = -1 for i in range(0,n): for j in range(0, len(a[0])): if a[i][j] == 0: op.append([i, j]) idx = idx + 1 find_rect(i, j, a, op, idx) print (op) tests = [[1, 0, 1, 1, 1, 0, 1], [1, 1, 0, 1, 1, 1, 1], [1, 1, 1, 0, 0, 1, 1], [1, 0, 1, 1, 0, 0, 1], [1, 0, 1, 1, 0, 1, 1], [1, 0, 1, 0, 0, 0, 0], [1, 1, 1, 0, 0, 0, 1], [1, 0, 1, 1, 1, 0, 1]] get_coord(tests)
输入
[[1, 0, 1, 1, 1, 0, 1], [1, 1, 0, 1, 1, 1, 1], [1, 1, 1, 0, 0, 1, 1], [1, 0, 1, 1, 0, 0, 1], [1, 0, 1, 1, 0, 1, 1], [1, 0, 1, 0, 0, 0, 0], [1, 1, 1, 0, 0, 0, 1], [1, 0, 1, 1, 1, 0, 1]]
输出
[[0, 1, 0, 1], [0, 5, 0, 5], [1, 2, 1, 2], [2, 3, 2, 4], [3, 1, 5, 1], [3, 4, 6, 5], [5, 3, 6, 5], [7, 1, 7, 1], [7, 5, 7, 5]]
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

