用 Python 编写程序来计算两张地图中重叠岛屿的数量
pythonserver side programmingprogramming更新于 2026/1/20 5:32:17
假设我们有两个二进制矩阵 mat1 和 mat2。这里 1 代表陆地,0 代表水,如果有一组 1(陆地)被水包围,则称为岛屿。我们必须找出 mat1 和 mat2 中完全相同坐标处存在的岛屿数量。
因此,如果输入如下 mat1 =
| 1 | 0 | 1 |
| 1 | 0 | 0 |
| 1 | 0 | 1 | 0 |
并且 mat2 =
| 1 | 0 | 1 |
| 1 | 0 | 0 |
| 1 | 0 | 1 |
则输出将为 2,因为重叠的岛屿是,
| 1 | 0 | 1 |
| 1 | 0 | 0 |
| 1 | 0 | 1 |
因此有两个重叠的岛屿。
为了解决这个问题,我们将遵循以下步骤 −
- r := mat1 的行数
- c := mat1 的列数
- last_row := r - 1
- last_col := c - 1
- 定义一个函数 mark() 。这将需要 i, j
- mat1[i, j] := 0
- mat2[i, j] := 0
- 如果 i 非零且 (mat1[i - 1, j] 或 mat2[i - 1, j] 中任何一个非零),则
- mark(i - 1, j)
- 如果 j 非零且 (mat1[i, j - 1] 或 mat2[i, j - 1] 中任何一个非零),则
- mark(i, j - 1)
- 如果 j < last_col 和 (mat1[i, j + 1] 或 mat2[i, j + 1] 中任何一个非零),则
- mark(i, j + 1)
- 如果 i < last_row 和 (mat1[i + 1, j] 或 mat2[i + 1, j] 中任何一个非零),则
- mark(i + 1, j)
- 从主方法,执行以下操作 −
- 对于范围为 0 到 r - 1 的 i,执行
- 对于范围为 0 到 c - 1 的 j,执行
- 如果 mat1[i, j] 与 mat2[i, j] 不同,则
- mark(i, j)
- 如果 mat1[i, j] 与 mat2[i, j] 不同,则
- 对于范围为 0 到 c - 1 的 j,执行
- islands := 0
- 对于范围为 0 到 r - 1 的 i,执行
- 对于范围为 0 到c - 1,执行
- 如果 mat1[i, j] 非零,则
- islands := islands + 1
- mark(i, j)
- 如果 mat1[i, j] 非零,则
- 对于范围为 0 到c - 1,执行
- 返回 islands
示例
让我们看看下面的实现以便更好地理解 −
def solve(mat1, mat2): r = len(mat1) c = len(mat1[0]) last_row = r - 1 last_col = c - 1 def mark(i, j): mat1[i][j] = mat2[i][j] = 0 if i and (mat1[i - 1][j] or mat2[i - 1][j]): mark(i - 1, j) if j and (mat1[i][j - 1] or mat2[i][j - 1]): mark(i, j - 1) if j < last_col and (mat1[i][j + 1] or mat2[i][j + 1]): mark(i, j + 1) if i < last_row and (mat1[i + 1][j] or mat2[i + 1][j]): mark(i + 1, j) for i in range(r): for j in range(c): if mat1[i][j] != mat2[i][j]: mark(i, j) islands = 0 for i in range(r): for j in range(c): if mat1[i][j]: islands += 1 mark(i, j) return islands mat1 = [ [1, 0, 1], [1, 0, 0], [1, 0, 1] ] mat2 = [ [1, 0, 1], [1, 0, 0], [1, 0, 0] ] print(solve(mat1, mat2))
输入
[ [1, 0, 1], [1, 0, 0], [1, 0, 1] ] [ [1, 0, 1], [1, 0, 0], [1, 0, 0] ]
输出
2
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

