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