封闭岛屿数量 -- 二维矩阵的dfs算法

1254. 统计封闭岛屿的数目

这道题和 岛屿数量 -- 二维矩阵的dfs算法 类似,区别在于不算边缘部分的岛屿,那其实很简单,把上⼀题中那些靠边的岛屿排除掉,剩下的就是「封闭岛屿」了。

关于岛屿的相似题目:

  1. 岛屿数量 -- 二维矩阵的dfs算法
  2. 封闭岛屿数量 -- 二维矩阵的dfs算法
  3. 统计封闭岛屿的数目
  4. 统计子岛屿
  5. 不同岛屿的数量
python 复制代码
class closedIsland:
    """
    floodFill 算法
    1254. 统计封闭岛屿的数目
    https://leetcode.cn/problems/number-of-closed-islands/
    """
    def solution(self, grid: List[List[str]]) -> int:
        res = 0
        m, n = len(grid), len(grid[0])
        for j in range(n):
            # 先把靠上边的岛屿淹掉
            self.dfs_matrix(grid, 0, j)
            # 先把靠下边的岛屿淹掉
            self.dfs_matrix(grid, m-1, j)

        for i in range(m):
            # 先把靠左边的岛屿淹掉
            self.dfs_matrix(grid, i, 0)
            # 先把靠右边的岛屿淹掉
            self.dfs_matrix(grid, i, n-1)

        # 遍历grid,就是所有的封闭岛屿
        for i in range(m):
            for j in range(n):
                if grid[i][j] == 0:
                    res += 1
                    self.dfs_matrix(grid, i, j)

        return res

    def dfs_matrix(self, grid, i, j):
        m, n = len(grid), len(grid[0])

        # 跳出递归条件
        if i < 0 or i >= m or j < 0 or j >= n:
            return

        if grid[i][j] == 1:
            return

        grid[i][j] = 1
        self.dfs_matrix(grid, i - 1, j)  # 上
        self.dfs_matrix(grid, i + 1, j)  # 下
        self.dfs_matrix(grid, i, j - 1)  # 左
        self.dfs_matrix(grid, i, j + 1)  # 右
相关推荐
利刃大大6 天前
【二叉树深搜】二叉搜索树中第K小的元素 && 二叉树的所有路径
c++·算法·二叉树·深度优先·dfs
lisanndesu9 天前
专题三_穷举vs暴搜vs深搜vs回溯vs剪枝_全排列
dfs·回溯
利刃大大9 天前
【二叉树的深搜】二叉树剪枝
c++·算法·dfs·剪枝
谦川16 天前
洛谷 P2036 [COCI2008-2009 #2] PERKET 刷题笔记
笔记·dfs·搜索
谦川17 天前
洛谷 P2392 kkksc03考前临时抱佛脚 刷题笔记 dfs
笔记·dfs·搜索
xchenhao24 天前
Linux 环境(Ubuntu)部署 Hadoop 环境
大数据·linux·hadoop·ubuntu·hdfs·环境·dfs
程序猿零零漆1 个月前
《从入门到精通:蓝桥杯编程大赛知识点全攻略》(一)-递归实现指数型枚举、递归实现排列型枚举
蓝桥杯·深度优先·dfs
robin_suli1 个月前
穷举vs暴搜vs深搜vs回溯vs剪枝专题一>全排列II
算法·dfs·剪枝·回溯
礁之1 个月前
Fastdfs V6.12.1集群部署(arm/x86均可用)
docker·云原生·dfs
robin_suli2 个月前
穷举vs暴搜vs深搜vs回溯vs剪枝专题一>子集
算法·dfs·剪枝·回溯