题解 | #岛屿数量#
岛屿数量
https://www.nowcoder.com/practice/0c9664d1554e466aa107d899418e814e?tpId=295&tqId=1024684&ru=/exam/oj&qru=/ta/format-top101/question-ranking&sourceUrl=%2Fexam%2Foj
# # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # 判断岛屿数量 # @param grid char字符型二维数组 # @return int整型 # from queue import Queue class Solution: def solve(self, grid: list[list[str]]) -> int: # write code here """ 从左到右依次遍历矩阵 定义初始状态的矩阵岛屿数量为0 """ # 处理空矩阵 if len(grid) == 0: return 0 count = 0 res = Queue() def bfs(res,i, j): # 定义方向,分别将横坐标和纵坐标与direction中的每个方向键相加进行判断该方向是陆地还是水 directions = [(-1, 0), (1, 0), (0, -1), (0, 1)] while not res.empty(): element = res.get() i, j = element[0], element[1] for x in directions: n = i + x[0] m = j + x[1] # 筛选符合条件的1,加入到res中,等待下一步遍历该方向的四个方向,符合条件满足2点,第一点是横纵坐标得在0和 最大值之间包括0,不包括最大值 if 0 <= n < len(grid) and 0 <= m < len(grid[0]): if grid[n][m] == "1": res.put([n, m]) grid[n][m]=0 # 遍历整个grid,有1就从该入口进入,进行一轮的广度优先遍历,同时岛屿的数量加1 for i in range(len(grid)): for j in range(len(grid[0])): if grid[i][j] == "1": count += 1 grid[i][j] = "0" res.put([i, j]) # 搜索矩阵的四个方向进行广度优先搜索 bfs(res,i, j) return count