题解 | #岛屿数量#

岛屿数量

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

全部评论

相关推荐

点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务