题目链接:https://leetcode-cn.com/problems/number-of-closed-islands/

有一个二维矩阵 grid ,每个位置要么是陆地(记号为 0 )要么是水域(记号为 1 )。

我们从一块陆地出发,每次可以往上下左右 4 个方向相邻区域走,能走到的所有陆地区域,我们将其称为一座「岛屿」。

如果一座岛屿 完全 由水域包围,即陆地边缘上下左右所有相邻区域都是水域,那么我们将其称为 「封闭岛屿」。

请返回封闭岛屿的数目。

示例 1:

输入:grid = [[1,1,1,1,1,1,1,0],[1,0,0,0,0,1,1,0],[1,0,1,0,1,1,1,0],[1,0,0,0,0,1,0,1],[1,1,1,1,1,1,1,0]]
输出:2
解释:
灰色区域的岛屿是封闭岛屿,因为这座岛屿完全被水域包围(即被 1 区域包围)。
示例 2:

输入:grid = [[0,0,1,0,0],[0,1,0,1,0],[0,1,1,1,0]]
输出:1
示例 3:

输入:grid = [[1,1,1,1,1,1,1],
             [1,0,0,0,0,0,1],
             [1,0,1,1,1,0,1],
             [1,0,1,0,1,0,1],
             [1,0,1,1,1,0,1],
             [1,0,0,0,0,0,1],
             [1,1,1,1,1,1,1]]
输出:2

提示:

1 <= grid.length, grid[0].length <= 100
0 <= grid[i][j] <=1

解题报告:

n*m<1e6就可做。

注意这题每次dfs的过程中,找到该连通块不成立后,不能直接return,还需要把所有该连通块的元素都标记vis=1才行,

AC代码:

class Solution {
public:int n,m;bool vis[333][333];bool outborder(int x, int y) {if(x < 0 || x >= n || y < 0 || y >= m) return 1;else return 0;}bool dfs(int x,int y, vector<vector<int>>& grid) {bool ret = 1;vis[x][y] = 1;int dx[4] = {0,1,0,-1};int dy[4] = {1,0,-1,0};for(int k = 0; k<4; k++) {int tx = x + dx[k];int ty = y + dy[k];if(outborder(tx,ty)) {ret = 0;continue;}if(vis[tx][ty] || grid[tx][ty] == 1) continue;if(dfs(tx,ty, grid) == 0) ret = 0;}return ret;}int closedIsland(vector<vector<int>>& grid) {n = grid.size();m = grid[0].size();int ans = 0;for(int i = 0; i<n; i++) {for(int j = 0; j<m; j++) {if(vis[i][j] || grid[i][j] == 1) continue;ans += dfs(i, j, grid);}}return ans;}
};

【LeetCode - 1254】统计封闭岛屿的数目(dfs,连通块)相关推荐

  1. LeetCode 1254. 统计封闭岛屿的数目(图的BFS DFS)

    文章目录 1. 题目 2. 解题 2.1 DFS 2.2 BFS 1. 题目 有一个二维矩阵 grid ,每个位置要么是陆地(记号为 0 )要么是水域(记号为 1 ). 我们从一块陆地出发,每次可以往 ...

  2. C++算法学习(力扣:1254. 统计封闭岛屿的数目)

    有一个二维矩阵 grid ,每个位置要么是陆地(记号为 0 )要么是水域(记号为 1 ). 我们从一块陆地出发,每次可以往上下左右 4 个方向相邻区域走,能走到的所有陆地区域,我们将其称为一座「岛屿」 ...

  3. leetcode - 统计封闭岛屿的数目

    有一个二维矩阵 gridgridgrid ,每个位置要么是陆地(记号为 0 )要么是水域(记号为 1 ). 我们从一块陆地出发,每次可以往上下左右 4 个方向相邻区域走,能走到的所有陆地区域,我们将其 ...

  4. leetcode1254. 统计封闭岛屿的数目(dfs)

    有一个二维矩阵 grid ,每个位置要么是陆地(记号为 0 )要么是水域(记号为 1 ). 我们从一块陆地出发,每次可以往上下左右 4 个方向相邻区域走,能走到的所有陆地区域,我们将其称为一座「岛屿」 ...

  5. LeetCode 1905. 统计子岛屿

    LeetCode 1905. 统计子岛屿 题目 思路 代码 题目 链接: https://leetcode.cn/problems/count-sub-islands/ 给你两个 m x n 的二进制 ...

  6. C.十面埋伏(DFS连通块)

    C.十面埋伏(DFS&连通块) 题目传送门 题意:将"#"图案用星号围一圈并输出图. 思路:显然从外围DFS,判断一下四周有无#即可. AC代码: #include< ...

  7. 【深度优先搜索】leetcode 1905. 统计子岛屿

    1905. 统计子岛屿 文章目录 题目描述 示例1: 示例2: 提示 方法:深度优先搜索 解题思路 代码 复杂度分析 题目描述 给你两个 m x n 的二进制矩阵 grid1 和 grid2 ,它们只 ...

  8. 剑指 Offer 15. 二进制中1的个数 and leetcode 1905. 统计子岛屿

    题目 请实现一个函数,输入一个整数(以二进制串形式),输出该数二进制表示中 1 的个数.例如,把 9 表示成二进制是 1001,有 2 位是 1.因此,如果输入 9,则该函数输出 2. 示例 1: 输 ...

  9. LeetCode 1905. 统计子岛屿(BFS)

    文章目录 1. 题目 2. 解题 1. 题目 给你两个 m x n 的二进制矩阵 grid1 和 grid2 ,它们只包含 0 (表示水域)和 1 (表示陆地). 一个 岛屿 是由 四个方向 (水平或 ...

最新文章

  1. 鸿蒙os操作系统合作伙伴,华为公布三大鸿蒙OS系统 已有大量合作伙伴进行开发...
  2. Google发布新的问答语料库,专攻篇章级的NLU问题
  3. MySQL:创建、修改和删除表
  4. c++ #define
  5. DGL教程【四】使用GNN进行链路预测
  6. Navicat工具里的empty table和truncate table的区别
  7. python如何调用日期函数_当前时间等于另一个时间时如何使用函数:Python
  8. java中 001_java实现_001,002.............xxx,的功能
  9. ThinkPHP3.2.3 的异常和错误屏蔽处理
  10. oracle查看脚本,oracle 查看表空间的脚本
  11. GJB用于试验的计算机软件,GJB9001C-2017版标准培训课件.ppt
  12. 大型网站建设方案(学院网站建设方案)
  13. Gitlab 登录报422错误,账号密码是对的?
  14. 资治通鉴-6 听的智慧
  15. Instant Contiki
  16. 百度搜索结果的URL参数 搜索框提示词搜索方式(rsv_sug2)
  17. 从源码分析Android的Glide库的图片加载流程及特点
  18. 3dMAX足球建模教程
  19. 高度自律学习者的app
  20. 如何添加扩展程序(到chrome

热门文章

  1. 【Demo 0011】多媒体播放器
  2. EXEJ4 生成的java exe文件更换电脑后出现闪退情况解决办法
  3. java 并发 主键_高并发数据库自增主键分析
  4. python微信推送消息_Python编程之微信推送模板消息功能示例
  5. linux桌面旋转了180度,[多图]回顾每一款默认Ubuntu壁纸
  6. python每周小测验答案_python第一周小测验答案Centos下更新Python版本
  7. eclipse发布web显示异常,清除缓存也无效?
  8. 将解决方案和项目放在同一目录中_借助卡第那思3D电子目录,巴鲁夫使用CAE数据扩展其产品目录...
  9. pb利用datawindow查询符合条件的数据并且过滤掉其他数据_数据质量监测
  10. sqlserver 触发器 update_运维日记| SQL server 那点事——DML触发器