有一个二维矩阵 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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/number-of-closed-islands
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

很明显,深度优先遍历,具体思路,用DBS,到海边return,还有是1的时候return,因为是DBS,肯定可以把一个个小范围的陆地遍历完,遍历完在主函数+1。我来试试:

class Solution {private:
int val =0;
public:int closedIsland(vector<vector<int>>& grid) {int count = 0;for(int i=0;i<grid.size();i++)for(int j=0;j<grid[0].size();j++)if(grid[i][j] == 0){val = 0;count+=dfs(grid,i,j)+val;}return count;}int dfs(vector<vector<int>>& grid,int i,int j){//如果在海边就让总数据减一if(i < 0 || i == grid.size() || j < 0|| j == grid[0].size()){   val = -1;return 0;}if(grid[i][j]!=0) return 0;grid[i][j] = 1;dfs(grid,i,j+1);dfs(grid,i,j-1);dfs(grid,i+1,j);dfs(grid,i-1,j);return 1;      }
};

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

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

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

  2. 【LeetCode - 1254】统计封闭岛屿的数目(dfs,连通块)

    题目链接:https://leetcode-cn.com/problems/number-of-closed-islands/ 有一个二维矩阵 grid ,每个位置要么是陆地(记号为 0 )要么是水域 ...

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

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

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

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

  5. C++算法学习(力扣:328. 奇偶链表)

    给定一个单链表,把所有的奇数节点和偶数节点分别排在一起.请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性. 请尝试使用原地算法完成.你的算法的空间复杂度应为 O(1),时 ...

  6. C++算法学习(力扣:1091. 二进制矩阵中的最短路径)

    在一个 N × N 的方形网格中,每个单元格有两种状态:空(0)或者阻塞(1). 一条从左上角到右下角.长度为 k 的畅通路径,由满足下述条件的单元格 C_1, C_2, -, C_k 组成: 相邻单 ...

  7. C++算法学习(力扣:面试题 16.04. 井字游戏)

    设计一个算法,判断玩家是否赢了井字游戏.输入是一个 N x N 的数组棋盘,由字符" ","X"和"O"组成,其中字符" &quo ...

  8. C++算法学习(力扣:201. 数字范围按位与)

    给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点). 示例 1: 输入: [5,7] 输出: 4 ...

  9. C++算法学习(力扣:134. 加油站)

    在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升. 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升.你从其中的一个加 ...

最新文章

  1. 属于python文件的操作有_Python的文件操作
  2. Android存储之SQLiteDatbase
  3. 自制清理电脑里的垃圾软件
  4. java中关于try、catch、finally中的细节分析
  5. 解决setInterval计时器不准的问题
  6. 如何使用PHP开发高效的WEB系统
  7. 虚拟环境mkvirtualenv
  8. nginx 子进程 woker process 启动失败的问题
  9. 宠物商城后台管理系统(springMVC+Mybatis+数据库)
  10. 谷歌五笔输入法电脑版_不背字根,如何三天学会五笔输入法
  11. 怎么把外部参照合并到图纸_CAD外部参照如何绑定?
  12. 超级计算机运存多少,6GB内存到底能开多少个APP?实测告诉你最终答案
  13. java提现功能开发_如何利用java实现提现金额到支付宝账户的功能
  14. 学大伟业 Day 5 培训总结
  15. Scenario 3 – HP C7000 Virtual Connect FlexFabric SUS with Active/Active
  16. 把手机当作电脑显示器指导参考
  17. 岁月不饶人,09年是第一拨90后奔二的一年
  18. 什么是“Ground truth”
  19. 使用keras绘制实时的loss与acc曲线
  20. Cisco 自反ACL真机配置实例

热门文章

  1. Centos 下Nginx 自启动脚本
  2. 在Java中获取系统属性
  3. 关于VM虚拟机与主机不能互PING的一种可能的原因
  4. 浅谈计算机是如何工作的及Linux下的简单反汇编操作
  5. 【pytest】命令行选项
  6. sqlserver事务怎么开启 怎么提交 怎么回滚
  7. 迭代器、生成器、函数递归与二分法
  8. 多线程中的静态代理模式
  9. 当前脚本文件中调用另外一个脚本
  10. C# 中将所有引用的DLL 和exe文件打成一个exe文件(转)