给你一个大小为 n x n 的二元矩阵 grid ,其中 1 表示陆地,0 表示水域。 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 请输出grid中岛屿的数量
时间: 2024-06-12 19:03:42 浏览: 122
可以使用深度优先搜索(DFS)或广度优先搜索(BFS)来解决该问题。
以下是使用DFS的实现方法:
1. 从左上角的格子开始遍历整个矩阵,对于每个格子,如果它是陆地(即grid[i][j] == 1),就将岛屿数量加一,并开始DFS搜索与它相邻的所有陆地格子。
2. 对于每个相邻的陆地格子,如果它还没有被访问过(即visited[i][j] == False),就继续递归搜索与它相邻的所有陆地格子。
3. 在DFS搜索时,需要注意边界情况和防止重复访问已经访问过的格子。
以下是Python代码实现:
```
def numIslands(grid):
if not grid:
return 0
n = len(grid)
m = len(grid[0])
visited = [[False for j in range(m)] for i in range(n)]
def dfs(i, j):
if i < 0 or i >= n or j < 0 or j >= m or grid[i][j] == 0 or visited[i][j]:
return
visited[i][j] = True
dfs(i+1, j)
dfs(i-1, j)
dfs(i, j+1)
dfs(i, j-1)
count = 0
for i in range(n):
for j in range(m):
if grid[i][j] == 1 and not visited[i][j]:
count += 1
dfs(i, j)
return count
```
时间复杂度:O(n^2),需要遍历整个矩阵。
阅读全文