【LeetCode - 1254】统计封闭岛屿的数目(dfs,连通块)
题目链接: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,连通块)相关推荐
- LeetCode 1254. 统计封闭岛屿的数目(图的BFS DFS)
文章目录 1. 题目 2. 解题 2.1 DFS 2.2 BFS 1. 题目 有一个二维矩阵 grid ,每个位置要么是陆地(记号为 0 )要么是水域(记号为 1 ). 我们从一块陆地出发,每次可以往 ...
- C++算法学习(力扣:1254. 统计封闭岛屿的数目)
有一个二维矩阵 grid ,每个位置要么是陆地(记号为 0 )要么是水域(记号为 1 ). 我们从一块陆地出发,每次可以往上下左右 4 个方向相邻区域走,能走到的所有陆地区域,我们将其称为一座「岛屿」 ...
- leetcode - 统计封闭岛屿的数目
有一个二维矩阵 gridgridgrid ,每个位置要么是陆地(记号为 0 )要么是水域(记号为 1 ). 我们从一块陆地出发,每次可以往上下左右 4 个方向相邻区域走,能走到的所有陆地区域,我们将其 ...
- leetcode1254. 统计封闭岛屿的数目(dfs)
有一个二维矩阵 grid ,每个位置要么是陆地(记号为 0 )要么是水域(记号为 1 ). 我们从一块陆地出发,每次可以往上下左右 4 个方向相邻区域走,能走到的所有陆地区域,我们将其称为一座「岛屿」 ...
- LeetCode 1905. 统计子岛屿
LeetCode 1905. 统计子岛屿 题目 思路 代码 题目 链接: https://leetcode.cn/problems/count-sub-islands/ 给你两个 m x n 的二进制 ...
- C.十面埋伏(DFS连通块)
C.十面埋伏(DFS&连通块) 题目传送门 题意:将"#"图案用星号围一圈并输出图. 思路:显然从外围DFS,判断一下四周有无#即可. AC代码: #include< ...
- 【深度优先搜索】leetcode 1905. 统计子岛屿
1905. 统计子岛屿 文章目录 题目描述 示例1: 示例2: 提示 方法:深度优先搜索 解题思路 代码 复杂度分析 题目描述 给你两个 m x n 的二进制矩阵 grid1 和 grid2 ,它们只 ...
- 剑指 Offer 15. 二进制中1的个数 and leetcode 1905. 统计子岛屿
题目 请实现一个函数,输入一个整数(以二进制串形式),输出该数二进制表示中 1 的个数.例如,把 9 表示成二进制是 1001,有 2 位是 1.因此,如果输入 9,则该函数输出 2. 示例 1: 输 ...
- LeetCode 1905. 统计子岛屿(BFS)
文章目录 1. 题目 2. 解题 1. 题目 给你两个 m x n 的二进制矩阵 grid1 和 grid2 ,它们只包含 0 (表示水域)和 1 (表示陆地). 一个 岛屿 是由 四个方向 (水平或 ...
最新文章
- 鸿蒙os操作系统合作伙伴,华为公布三大鸿蒙OS系统 已有大量合作伙伴进行开发...
- Google发布新的问答语料库,专攻篇章级的NLU问题
- MySQL:创建、修改和删除表
- c++ #define
- DGL教程【四】使用GNN进行链路预测
- Navicat工具里的empty table和truncate table的区别
- python如何调用日期函数_当前时间等于另一个时间时如何使用函数:Python
- java中 001_java实现_001,002.............xxx,的功能
- ThinkPHP3.2.3 的异常和错误屏蔽处理
- oracle查看脚本,oracle 查看表空间的脚本
- GJB用于试验的计算机软件,GJB9001C-2017版标准培训课件.ppt
- 大型网站建设方案(学院网站建设方案)
- Gitlab 登录报422错误,账号密码是对的?
- 资治通鉴-6 听的智慧
- Instant Contiki
- 百度搜索结果的URL参数 搜索框提示词搜索方式(rsv_sug2)
- 从源码分析Android的Glide库的图片加载流程及特点
- 3dMAX足球建模教程
- 高度自律学习者的app
- 如何添加扩展程序(到chrome
热门文章
- 【Demo 0011】多媒体播放器
- EXEJ4 生成的java exe文件更换电脑后出现闪退情况解决办法
- java 并发 主键_高并发数据库自增主键分析
- python微信推送消息_Python编程之微信推送模板消息功能示例
- linux桌面旋转了180度,[多图]回顾每一款默认Ubuntu壁纸
- python每周小测验答案_python第一周小测验答案Centos下更新Python版本
- eclipse发布web显示异常,清除缓存也无效?
- 将解决方案和项目放在同一目录中_借助卡第那思3D电子目录,巴鲁夫使用CAE数据扩展其产品目录...
- pb利用datawindow查询符合条件的数据并且过滤掉其他数据_数据质量监测
- sqlserver 触发器 update_运维日记| SQL server 那点事——DML触发器