📜  查找岛屿数量 |设置 1(使用 DFS)(1)

📅  最后修改于: 2023-12-03 15:40:23.820000             🧑  作者: Mango

查找岛屿数量 | 使用 DFS

简介

在计算机领域中,一个岛屿可以被定义为由相邻陆地组成的区域。给定一个由0和1组成的二维地图,在地图中1表示陆地,0表示水;连通的陆地区域可以形成一个岛屿。求岛屿的数量。

本文将介绍如何使用深度优先搜索(DFS)算法来解决该问题。DFS是一种用来遍历或搜索树或图的算法,其基本思路是从根节点开始,尽可能深地遍历每个节点的分支,直到到达不能遍历的最深层,然后返回回溯到该节点的上一个节点,继续遍历其他节点。

实现步骤
  1. 定义一个函数来执行DFS算法,该函数将以当前位置作为参数,并在该位置处标记为访问(1)。
  2. 扫描从该位置开始的所有相邻位置,如果该位置为陆地(1)且未被访问过,就递归地调用该函数,以此遍历相邻的岛屿。
  3. 遍历完所有相邻的岛屿后,返回到上一级调用,继续遍历未访问的陆地,直到所有的陆地都被遍历完为止。
代码实现

以下是使用DFS算法来查找岛屿数量的示例代码:

def dfs(grid, i, j):
    row, col = len(grid), len(grid[0])
    if i < 0 or i >= row or j < 0 or j >= col or grid[i][j] == "0":
        return
    grid[i][j] = "0"
    dfs(grid, i+1, j)
    dfs(grid, i-1, j)
    dfs(grid, i, j+1)
    dfs(grid, i, j-1)

def numIslands(grid):
    if not grid:
        return 0
    row, col = len(grid), len(grid[0])
    count = 0
    for i in range(row):
        for j in range(col):
            if grid[i][j] == "1":
                count += 1
                dfs(grid, i, j)
    return count
性能复杂度

时间复杂度:O(MN),其中M和N分别为地图的行数和列数。最坏情况下,需要遍历整个地图。

空间复杂度:O(MN),最坏情况下,深度优先搜索将访问整个地图。