""" 岛屿数量 给定一个由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] ]))
评论前必须登录!
注册