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

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

查找岛屿数量的Python程序 | 使用 DFS

这是一个Python程序,用于查找给定的地图中有多少个岛屿。该程序使用深度优先搜索(DFS)算法实现。在这个算法中,程序从一个起始点开始遍历整个地图,将所有相邻的陆地标记为已访问,并将它们添加到一个以访问点为元素的列表中。当所有与起始点相邻的陆地都被访问后,程序会从列表中取出下一个未访问的点,继续遍历。当列表为空时,程序就停止了。当一个岛屿全部被访问完成后,程序将计数器加1,继续查找下一个岛屿。

以下是程序的代码片段:

def num_islands(grid):
    def dfs(grid, r, c):
        if 0 <= r < len(grid) and 0 <= c < len(grid[0]) and grid[r][c] == '1':
            grid[r][c] = '0'
            dfs(grid, r - 1, c)
            dfs(grid, r + 1, c)
            dfs(grid, r, c - 1)
            dfs(grid, r, c + 1)

    if not grid:
        return 0

    num_islands = 0
    for i in range(len(grid)):
        for j in range(len(grid[0])):
            if grid[i][j] == '1':
                num_islands += 1
                dfs(grid, i, j)

    return num_islands

上面的代码定义了一个函数 num_islands,其参数为一个二维字符数组 grid。函数中定义了一个辅助函数 dfs,用于实现深度优先搜索算法。在主函数中,程序首先检查 grid 是否为空,如果为空则直接返回 0。接下来,程序初始化计数器 num_islands 为 0。然后,程序遍历整个地图,对于每个岛屿,递归调用 dfs 函数,将所有与该岛屿相邻的陆地标记为已访问。当岛屿全部被访问完成后,程序将计数器加1,并继续查找下一个岛屿。最终,程序返回岛屿的数量。

注意,上面的程序假设 grid 是一个合法的二维字符数组,其中只包含字符 '0' 和 '1'。如果输入的地图不符合要求,则程序可能会抛出异常,或者返回错误的结果。为了避免这种情况,程序员应该先对输入数据进行验证,确保它们符合规范。