Python矩阵中被包围岛屿数量计数程序
假设我们有一个二进制矩阵。其中1代表陆地,0代表水。众所周知,岛屿是由一群聚集在一起的1组成的,其周长被水包围。我们必须找到完全被包围的岛屿的数量。
所以,如果输入是这样的:
那么输出将是2,因为共有三个岛屿,但其中两个完全被包围。
为了解决这个问题,我们将遵循以下步骤:
- 定义一个函数dfs()。这将接收i,j
- 如果i和j不在矩阵范围内,则
- 返回False
- 如果matrix[i, j]等于0,则
- 返回True
- matrix[i, j] := 0
- a := dfs(i + 1, j)
- b := dfs(i - 1, j)
- c := dfs(i, j + 1)
- d := dfs(i, j - 1)
- 返回a and b and c and d
- 在主方法中执行以下操作:
- R := 矩阵的行数,C := 矩阵的列数
- ans := 0
- 对于i在0到R范围内:
- 对于j在0到C范围内:
- 如果matrix[i, j]等于1,则
- 如果dfs(i, j)为真,则
- ans := ans + 1
- 如果dfs(i, j)为真,则
- 如果matrix[i, j]等于1,则
- 对于j在0到C范围内:
- 返回ans
让我们看看下面的实现以更好地理解:
示例
class Solution: def solve(self, matrix): def dfs(i, j): if i < 0 or j < 0 or i >= R or j >= C: return False if matrix[i][j] == 0: return True matrix[i][j] = 0 a = dfs(i + 1, j) b = dfs(i - 1, j) c = dfs(i, j + 1) d = dfs(i, j - 1) return a and b and c and d R, C = len(matrix), len(matrix[0]) ans = 0 for i in range(R): for j in range(C): if matrix[i][j] == 1: if dfs(i, j): ans += 1 return ans ob = Solution() matrix = [ [1, 0, 0, 0, 0], [0, 0, 0, 1, 0], [0, 1, 0, 0, 0], [0, 1, 0, 0, 0], [0, 1, 1, 1, 0], [0, 0, 0, 0, 0] ] print(ob.solve(matrix))
输入
matrix = [ [1, 0, 0, 0, 0], [0, 0, 0, 1, 0], [0, 1, 0, 0, 0], [0, 1, 0, 0, 0], [0, 1, 1, 1, 0], [0, 0, 0, 0, 0] ]
输出
2
广告