📅  最后修改于: 2023-12-03 14:51:14.162000             🧑  作者: Mango
在一个二维网格上,给定了一个包含 0 和 1 的矩阵 grid,其中 0 表示水域,1 表示陆地。我们想要求出矩阵中岛屿的数量,按照岛屿数目从小到大排序。
岛屿是被水域包围并且由一片或多片陆地连接而成的区域。我们定义一个矩阵中的四个相邻方向为上下左右。
输入:
grid = [
[1, 1, 0, 0, 0],
[1, 1, 0, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 0, 1, 1]
]
输出: 3
解释: 矩阵中有三个岛屿,每个岛屿都不同。
本题可以使用深度优先搜索(DFS)算法来解决。
我们遍历整个二维网格,当我们遇到值为1的陆地时,将其周围的所有陆地都标记为已访问,并将其周围的所有陆地添加到一个岛屿中。
最终我们返回岛屿数量。
def numIslands(grid):
"""
:type grid: List[List[str]]
:rtype: int
"""
if not grid:
return 0
rows, cols = len(grid), len(grid[0])
visited = [[False] * cols for _ in range(rows)]
count = 0
def dfs(i, j):
if i < 0 or i >= rows or j < 0 or j >= cols or visited[i][j] or grid[i][j] == '0':
return
visited[i][j] = True
dfs(i - 1, j)
dfs(i + 1, j)
dfs(i, j - 1)
dfs(i, j + 1)
for i in range(rows):
for j in range(cols):
if not visited[i][j] and grid[i][j] == '1':
count += 1
dfs(i, j)
return count
本题使用 DFS 可以很容易地解决。我们需要遍历整个网格并确定每个格子是否应该被包含在岛屿中,最后返回岛屿数量。