文章目录

  • 1. 题目
  • 2. 解题

1. 题目

给你两个 m x n 的二进制矩阵 grid1 和 grid2 ,它们只包含 0 (表示水域)和 1 (表示陆地)。
一个 岛屿 是由 四个方向 (水平或者竖直)上相邻的 1 组成的区域。
任何矩阵以外的区域都视为水域。

如果 grid2 的一个岛屿,被 grid1 的一个岛屿 完全 包含,也就是说 grid2 中该岛屿的每一个格子都被 grid1 中同一个岛屿完全包含,那么我们称 grid2 中的这个岛屿为 子岛屿

请你返回 grid2 中 子岛屿 的 数目 。

示例 1:

输入:grid1 = [[1,1,1,0,0],[0,1,1,1,1],[0,0,0,0,0],[1,0,0,0,0],[1,1,0,1,1]],
grid2 = [[1,1,1,0,0],[0,0,1,1,1],[0,1,0,0,0],[1,0,1,1,0],[0,1,0,1,0]]
输出:3
解释:如上图所示,左边为 grid1 ,右边为 grid2 。
grid2 中标红的 1 区域是子岛屿,总共有 3 个子岛屿。

示例 2:

输入:grid1 = [[1,0,1,0,1],[1,1,1,1,1],[0,0,0,0,0],[1,1,1,1,1],[1,0,1,0,1]],grid2 = [[0,0,0,0,0],[1,1,1,1,1],[0,1,0,1,0],[0,1,0,1,0],[1,0,0,0,1]]
输出:2
解释:如上图所示,左边为 grid1 ,右边为 grid2 。
grid2 中标红的 1 区域是子岛屿,总共有 2 个子岛屿。提示:
m == grid1.length == grid2.length
n == grid1[i].length == grid2[i].length
1 <= m, n <= 500
grid1[i][j] 和 grid2[i][j] 都要么是 0 要么是 1 。

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

2. 解题

  • 遍历地图2,进行 BFS,同时检查地图1,要求不能包含水
class Solution {int m, n, ans = 0;int color = 2;vector<vector<int>> dir = {{1,0},{0,1},{-1,0},{0,-1}};vector<vector<int>> grid1_copy;typedef pair<int,int> pii;
public:int countSubIslands(vector<vector<int>>& grid1, vector<vector<int>>& grid2) {m = grid1.size(), n = grid1[0].size();grid1_copy = grid1;for(int i = 0; i < m; ++i){for(int j = 0; j < n; ++j){if(grid2[i][j] != 1) continue;bfs(grid2, i, j);}}return ans;}void bfs(vector<vector<int>>& g, int i, int j){queue<pii> q;q.push({i, j});color++;g[i][j] = color;bool water = false;//遇到水while(!q.empty()){int x = q.front().first;int y = q.front().second;q.pop();if(grid1_copy[x][y] == 0)water = true;for(int k = 0; k < 4; ++k){int nx = x + dir[k][0];int ny = y + dir[k][1];if(nx>=0 && nx<m && ny>=0 && ny<n && g[nx][ny]==1){q.push({nx, ny});g[nx][ny] = color;}}}ans += !water;}
};

568 ms 218.7 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 1905. 统计子岛屿(BFS)相关推荐

  1. LeetCode 1905. 统计子岛屿

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

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

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

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

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

  4. leetcode 1905. 统计子岛屿(C++、java、python)

    给你两个 m x n 的二进制矩阵 grid1 和 grid2 ,它们只包含 0 (表示水域)和 1 (表示陆地).一个 岛屿 是由 四个方向 (水平或者竖直)上相邻的 1 组成的区域.任何矩阵以外的 ...

  5. 1905. 统计子岛屿-深度优先遍历图

    1905. 统计子岛屿-深度优先遍历图 给你两个 m x n 的二进制矩阵 grid1 和 grid2 ,它们只包含 0 (表示水域)和 1 (表示陆地).一个 岛屿 是由 四个方向 (水平或者竖直) ...

  6. leetcode day 2 【1905. 统计子岛屿】 BFS/DFS

    解题思路 BFS 找到grid2中的每一座岛屿[暴力搜索整个grid矩阵],对每座岛屿BFS,过程中check岛屿格子是否在grid1中为岛屿. class Solution:def countSub ...

  7. 1905 统计子岛屿

    题目描述: 给你两个 m x n 的二进制矩阵 grid1 和 grid2 ,它们只包含 0 (表示水域)和 1 (表示陆地).一个 岛屿 是由 四个方向 (水平或者竖直)上相邻的 1 组成的区域.任 ...

  8. 【广度优先搜索-中等】1905. 统计子岛屿

    [题目] [代码] [方法1]深度优先 class Solution:def countSubIslands(self, grid1: List[List[int]], grid2: List[Lis ...

  9. 1905. 统计子岛屿

    我的做法是先在grid2上面搜索,每遇到一个连通图就遍历这个图,每个被遍历的节点都找一个grid1是否存在,不存在就return false. class Solution { public:int ...

最新文章

  1. 拼多多就知乎不当评论致歉!相关部门已展开调查
  2. IOS文本框readonly时焦点事件
  3. HDU - 6899 Xor(数位dp)
  4. python 发送邮件connect none_Python发送邮件功能示例【使用QQ邮箱】
  5. 我计划搞直播了,欢迎来一起聊一聊
  6. 专属微信二维码python制作_如何利用Python制作简单的公众号二维码关注图
  7. 怎样在PropertySheet中添加按钮
  8. OpenCV_01 简介+无版权安装+模块分析
  9. 怎样配置mysql数据源_mysql怎样配置ODBC数据源
  10. live-server 箭头函数
  11. 明晚直播丨一次特殊的 Oralce 硬解析性能问题的技术分享
  12. arm交叉编译jsoncpp
  13. Java编程思想 (1~10)
  14. Git详解(2)——Git基础
  15. Java经典编程题50道之三十一
  16. java ascii加密_Java 字符加密
  17. 爬虫之字体反爬(仅供学习参考)
  18. [程序人生] [随笔感悟] -- 2018,我的博客年
  19. 交房后如何在手机上办理产权证,线上办理总耗时约6天拿到证书
  20. 360加速插件谷歌字体服务停止运行

热门文章

  1. Python 之数据类型
  2. python中的装饰器和抽象类
  3. mysql关系模式怎么画_关系数据库与mysql
  4. 勾股定理python思路_趣叮咚编程数学揭秘:为什么勾股定理a+b=c?
  5. 引用js_js值和引用
  6. platform驱动开发套路、DM9000的一些分析
  7. x210开发板的三种启动方式(三星推荐的,分散加载,uboot采用的)
  8. pandas用众数填充缺失值_python数据分析包|Pandas-02之缺失值(NA)处理
  9. CUDA线程、线程块、线程束、流多处理器、流处理器、网格概念的深入理解
  10. hihoCoder #1758 加减