给你一个大小为 n x n 的二元矩阵 grid ,其中 1 表示陆地,0 表示水域。 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 请输出grid中岛屿的数量
时间: 2024-05-15 14:15:06 浏览: 100
思路:遍历整个矩阵,如果当前位置为1,说明找到了一个岛屿,进行深度优先搜索(DFS)或广度优先搜索(BFS),将与当前位置相邻的所有陆地标记为已访问,直到所有与当前位置相邻的陆地都被访问完毕,即当前岛屿已经被完全遍历过了。
DFS解法:
```python
def numIslands(grid):
def dfs(i, j):
if i < 0 or i >= len(grid) or j < 0 or j >= len(grid[0]) or grid[i][j] == '0':
return
grid[i][j] = '0' # 标记当前位置为已访问
dfs(i+1, j)
dfs(i-1, j)
dfs(i, j+1)
dfs(i, j-1)
count = 0
for i in range(len(grid)):
for j in range(len(grid[0])):
if grid[i][j] == '1':
count += 1
dfs(i, j)
return count
```
BFS解法:
```python
def numIslands(grid):
def bfs(i, j):
queue = [(i, j)]
while queue:
x, y = queue.pop(0)
if x < 0 or x >= len(grid) or y < 0 or y >= len(grid[0]) or grid[x][y] == '0':
continue
grid[x][y] = '0' # 标记当前位置为已访问
queue.append((x+1, y))
queue.append((x-1, y))
queue.append((x, y+1))
queue.append((x, y-1))
count = 0
for i in range(len(grid)):
for j in range(len(grid[0])):
if grid[i][j] == '1':
count += 1
bfs(i, j)
return count
```
阅读全文