欢迎光临
我们一直在努力

岛屿数量

"""
岛屿数量
给定一个由1(陆地)和0(水)组成的的二维网格,计算网格中岛屿的数量。
岛屿总是被水包围,并且每座岛屿只能由水平方向和竖直方向上相邻的陆地连接形成。
另外,网格的四条边均被水包围。
"""

def dfs(grid, i, j):
    """
    深度优先搜索(DFS)函数,用于标记与当前位置相连的所有陆地(1)为已访问(0)。

    :param grid: 二维列表,表示岛屿地图
    :param i: 当前位置的行索引
    :param j: 当前位置的列索引
    """
    # 将当前位置标记为已访问
    grid[i][j] = 0
    # 获取地图的行数和列数
    x_length, y_length = len(grid), len(grid[0])
    # 遍历当前位置的上、下、左、右四个方向
    for x, y in [(i - 1, j), (i + 1, j), (i, j - 1), (i, j + 1)]:
        # 如果新位置在地图范围内且为陆地(1)
        if 0 <= x < x_length and 0 <= y < y_length and grid[x][y] == 1:
            # 递归访问该位置
            dfs(grid, x, y)

def islands_count(grid):
    """
    计算地图中岛屿的数量。

    :param grid: 二维列表,表示岛屿地图
    :return: 岛屿的数量
    """
    # 获取地图的行数
    row = len(grid)
    # 如果地图为空,则返回岛屿数量为0
    if row == 0:
        return 0
    # 获取地图的列数
    col = len(grid[0])
    # 初始化岛屿数量为0
    num_islands = 0
    # 遍历地图的每个位置
    for i in range(row):
        for j in range(col):
            # 如果当前位置为陆地(1)
            if grid[i][j] == 1:
                # 岛屿数量加1
                num_islands += 1
                # 对当前位置及相连的陆地进行深度优先搜索,标记为已访问
                dfs(grid, i, j)
    # 返回岛屿数量
    return num_islands

# 调用函数并打印结果
print(islands_count([
    [1, 1, 0, 0, 0],
    [1, 1, 0, 0, 0],
    [0, 0, 0, 1, 0],
    [0, 0, 0, 1, 1]
]))

赞(0) 打赏
未经允许不得转载:创想未来 » 岛屿数量

评论 抢沙发

评论前必须登录!

 

更好的Python学习

支持快讯、专题、百度收录推送、人机验证、多级分类筛选器,适用于垂直站点、科技博客、个人站,扁平化设计、简洁白色、超多功能配置、会员中心、直达链接、文章图片弹窗、自动缩略图等...

联系我们联系我们

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册