📜  在2D矩阵中找到不同岛的数量(1)

📅  最后修改于: 2023-12-03 14:51:14.162000             🧑  作者: Mango

在2D矩阵中找到不同岛的数量

介绍

在一个二维网格上,给定了一个包含 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 可以很容易地解决。我们需要遍历整个网格并确定每个格子是否应该被包含在岛屿中,最后返回岛屿数量。