C++算法学习(力扣:1254. 统计封闭岛屿的数目)
有一个二维矩阵 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. 统计封闭岛屿的数目)相关推荐
- LeetCode 1254. 统计封闭岛屿的数目(图的BFS DFS)
文章目录 1. 题目 2. 解题 2.1 DFS 2.2 BFS 1. 题目 有一个二维矩阵 grid ,每个位置要么是陆地(记号为 0 )要么是水域(记号为 1 ). 我们从一块陆地出发,每次可以往 ...
- 【LeetCode - 1254】统计封闭岛屿的数目(dfs,连通块)
题目链接:https://leetcode-cn.com/problems/number-of-closed-islands/ 有一个二维矩阵 grid ,每个位置要么是陆地(记号为 0 )要么是水域 ...
- leetcode - 统计封闭岛屿的数目
有一个二维矩阵 gridgridgrid ,每个位置要么是陆地(记号为 0 )要么是水域(记号为 1 ). 我们从一块陆地出发,每次可以往上下左右 4 个方向相邻区域走,能走到的所有陆地区域,我们将其 ...
- leetcode1254. 统计封闭岛屿的数目(dfs)
有一个二维矩阵 grid ,每个位置要么是陆地(记号为 0 )要么是水域(记号为 1 ). 我们从一块陆地出发,每次可以往上下左右 4 个方向相邻区域走,能走到的所有陆地区域,我们将其称为一座「岛屿」 ...
- C++算法学习(力扣:328. 奇偶链表)
给定一个单链表,把所有的奇数节点和偶数节点分别排在一起.请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性. 请尝试使用原地算法完成.你的算法的空间复杂度应为 O(1),时 ...
- C++算法学习(力扣:1091. 二进制矩阵中的最短路径)
在一个 N × N 的方形网格中,每个单元格有两种状态:空(0)或者阻塞(1). 一条从左上角到右下角.长度为 k 的畅通路径,由满足下述条件的单元格 C_1, C_2, -, C_k 组成: 相邻单 ...
- C++算法学习(力扣:面试题 16.04. 井字游戏)
设计一个算法,判断玩家是否赢了井字游戏.输入是一个 N x N 的数组棋盘,由字符" ","X"和"O"组成,其中字符" &quo ...
- C++算法学习(力扣:201. 数字范围按位与)
给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点). 示例 1: 输入: [5,7] 输出: 4 ...
- C++算法学习(力扣:134. 加油站)
在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升. 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升.你从其中的一个加 ...
最新文章
- 属于python文件的操作有_Python的文件操作
- Android存储之SQLiteDatbase
- 自制清理电脑里的垃圾软件
- java中关于try、catch、finally中的细节分析
- 解决setInterval计时器不准的问题
- 如何使用PHP开发高效的WEB系统
- 虚拟环境mkvirtualenv
- nginx 子进程 woker process 启动失败的问题
- 宠物商城后台管理系统(springMVC+Mybatis+数据库)
- 谷歌五笔输入法电脑版_不背字根,如何三天学会五笔输入法
- 怎么把外部参照合并到图纸_CAD外部参照如何绑定?
- 超级计算机运存多少,6GB内存到底能开多少个APP?实测告诉你最终答案
- java提现功能开发_如何利用java实现提现金额到支付宝账户的功能
- 学大伟业 Day 5 培训总结
- Scenario 3 – HP C7000 Virtual Connect FlexFabric SUS with Active/Active
- 把手机当作电脑显示器指导参考
- 岁月不饶人,09年是第一拨90后奔二的一年
- 什么是“Ground truth”
- 使用keras绘制实时的loss与acc曲线
- Cisco 自反ACL真机配置实例