用于查找岛屿数量的程序,在 Python 中我们不能离开的地方

假设我们有一个二元矩阵。这里1代表陆地,0代表水。我们可以从任何陆地向上、向下、向左或向右移动,但不能对角移动到另一个陆地单元格或离开矩阵。我们必须找到我们不能离开矩阵的土地单元的数量。

所以,如果输入是这样的

0001
0110
0110
0001

那么输出将是 4,因为中间有 4 个陆地方块,我们不能从中走出矩阵。

示例

让我们看看以下实现以获得更好的理解 -

def solve(matrix):
   q = [(i, j) for i in range(len(matrix)) for j in range(len(matrix[i])) if matrix[i][j] and (i == 0 or i == len(matrix) - 1 or j == 0 or j == len(matrix[i]) - 1)]
   idx = 0
   for x, y in q:
      matrix[x][y] = 0
   while idx < len(q):
      x, y = q[idx]
      for dx, dy in [(-1, 0), (0, -1), (0, 1), (1, 0)]:
         nx, ny = x + dx, y + dy
         if 0 <= nx < len(matrix) and 0 <= ny < len(matrix[nx]) and matrix[nx][ny]:
            matrix[nx][ny] = 0
            q.append((nx, ny))
      idx += 1
   return sum(sum(row) for row in matrix)

matrix = [
[0, 0, 0, 1],
[0, 1, 1, 0],
[0, 1, 1, 0],
[0, 0, 0, 1]
]
print(solve(matrix))

输入

[
[0, 0, 0, 1],
[0, 1, 1, 0],
[0, 1, 1, 0],
[0, 0, 0, 1]
]
输出结果
4

猜你喜欢