【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;}
};

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/439306.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转】1.2SharePoint服务器端对象模型 之 对象模型概述(Part 2)

&#xff08;三&#xff09;Url 作为一个B/S体系&#xff0c;在SharePoint的属性、方法参数和返回值中&#xff0c;大量的涉及到了Url&#xff0c;总的来说&#xff0c;涉及到的Url可以分为如下四类&#xff1a; 绝对路径&#xff1a;完整的Url&#xff0c;包含了协议头&…

【转】2.1 SharePoint服务器端对象模型 之 访问网站和列表数据(Part 1)

本节将会介绍SharePoint中最为常用的一些对象模型&#xff0c;以及如何使用这些对象模型来访问和操作网站中的数据。几乎所有的SharePoint服务器端开发都会涉及到这些内容&#xff0c;因此应着重掌握本节中所介绍的基本对象模型的使用方法。由于篇幅所限&#xff0c;在介绍每种…

SharePoint安全 - SharePoint网站常用页面URL索引

一. 主要网站内容 首页 /default.aspx /Pages/default.aspx 网站设置 /_layouts/settings.aspx 所有网站内容 /_layouts/viewlsts.aspx 移动端所有网站内容 /_layouts/mobile/mbllists.aspx 共享文档 /shared documents/forms/allitems.aspx 管理网站内容结构 /_l…

docker安装与学习

安装Docker 系统环境&#xff1a;macOS Catalina 10.15.7 通过brew安装docker brew install --cask --appdir/Applications docker 直接brew install docker装上的好像不是&#xff0c;好像是当成了formula了。如下图 brew cask install docker直接提示命令不对&#xff0c…

集群、分布式、负载均衡区别与联系

1、Linux集群主要分成三大类( 高可用集群&#xff0c; 负载均衡集群&#xff0c;科学计算集群) 集群是一个统称&#xff0c;他分为好几种&#xff0c;如&#xff1a;高性能科学群集、负载均衡群集、高可用性群集等。 科学群集 、高性能集群&#xff08;High performance clus…

Mac下使用brew的常用步骤

以docker为例&#xff1a; 第一步&#xff1a; 先 brew search 软件名 然后发现在Formulae和Casks中都有docker包。 第二步&#xff1a; 分别查看info brew info dockerbrew info homebrew/cask/docker 从详情中可以看出&#xff0c;cask下的才是Docker Desktop for Mac&a…

【机器学习】 - keras中的模型可视化plot_model模块(含依赖包pydot和graphviz的详细安装过程与注意事项)

运行环境&#xff1a; win10 anaconda3-spyder python3.7.4 tensorflow2.0.0 首先需要安装两个包pydot和graphviz&#xff0c;不然会报错&#xff1a; Failed to import pydot. You must install pydot and graphviz for pydotprint to work. 然后去anaconda prompt 里去…

【git学习】统计git项目某user的代码量

查看自己的代码量&#xff1a;&#xff08;直接awk编程&#xff09; git log --author"username" --prettytformat: --numstat | awk { add $1; subs $2; loc $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, …

一步步编写操作系统 79 在c代码中内联汇编

基本内联汇编是最简单的内联形式&#xff0c;其格式为&#xff1a; asm [volatile] (“assembly code”) 各关键字之间可以用空格或制表符分隔也可以紧凑挨在一起不分隔&#xff0c;各部分意义如下&#xff1a; 关键字asm用于声明内联汇编表达式&#xff0c;这是内联汇编固定…

LeetCode 237. 删除链表中的节点(思维)

请编写一个函数&#xff0c;用于 删除单链表中某个特定节点 。在设计函数时需要注意&#xff0c;你无法访问链表的头节点 head &#xff0c;只能直接访问 要被删除的节点 。 题目数据保证需要删除的节点 不是末尾节点 。 https://leetcode-cn.com/problems/delete-node-in-a-…

LeetCode 397. 整数替换

题目大意&#xff1a; 给定一个正整数 n &#xff0c;你可以做如下操作&#xff1a; 如果 n 是偶数&#xff0c;则用 n / 2替换 n 。 如果 n 是奇数&#xff0c;则可以用 n 1或n - 1替换 n 。 n 变为 1 所需的最小替换次数是多少&#xff1f; 链接&#xff1a;https://leet…

LeetCode 375. 猜数字大小 II

题目大意&#xff1a; https://leetcode-cn.com/problems/guess-number-higher-or-lower-ii 我们正在玩一个猜数游戏&#xff0c;游戏规则如下&#xff1a; 我从 1 到 n 之间选择一个数字。 你来猜我选了哪个数字。 如果你猜到正确的数字&#xff0c;就会 赢得游戏 。 如果你…

【转】2.3SharePoint服务器端对象模型 之 访问网站和列表数据(Part 3)

&#xff08;三&#xff09;视图 与传统意义上的数据视图类似&#xff0c;SharePoint中的列表视图指定了列表中数据的筛选条件、排序条件、分组条件、显示栏/字段、显示条目数、显示样式等内容。在SharePoint中&#xff0c;使用SPView表示列表视图&#xff0c;使用SPViewColle…

【转】2.4SharePoint服务器端对象模型 之 访问网站和列表数据(Part 4)

&#xff08;四&#xff09;栏/字段 SharePoint中的字段&#xff08;中文版中叫做“栏”&#xff09;与传统的数据栏类似&#xff0c;也有不同类型的区别&#xff0c;不过SharePoint中内置的栏类型除了按照数据类型&#xff08;如数字、日期和时间等&#xff09;进行区分之外&…

【转】2.5SharePoint服务器端对象模型 之 访问网站和列表数据(Part 5)

&#xff08;五&#xff09;列表条目&#xff08;SPListItem&#xff09; SharePoint中数据的存储基本上都是通过列表条目来完成&#xff08;文档库中的文档也是一种特殊的列表条目&#xff09;&#xff0c;因此在SharePoint应用开发中&#xff0c;最终是要和列表条目打交道的…

【转】3.3SharePoint服务器端对象模型 之 访问文件和文件夹(Part 3)

&#xff08;三&#xff09;遍历 文件系统的遍历是指按照文件夹的层级结构遍历文档库、列表的文件夹和列表条目。遍历主要有三种方式&#xff1a;&#xff08;1&#xff09;直接使用文件系统对象模型进行遍历&#xff1b;&#xff08;2&#xff09;使用SPDocumentLibrary进行遍…

【LeetCode240、剑指offer04】二维数组中的查找(线性做法)

在一个 n * m 的二维数组中&#xff0c;每一行都按照从左到右递增的顺序排序&#xff0c;每一列都按照从上到下递增的顺序排序。请完成一个高效的函数&#xff0c;输入这样的一个二维数组和一个整数&#xff0c;判断数组中是否含有该整数。 示例: 现有矩阵 matrix 如下&#x…

【转】4.2SharePoint服务器端对象模型 之 使用CAML进行数据查询(Part 2)

&#xff08;三&#xff09;使用SPQuery进行列表查询 1、概述 列表查询主要是指在一个指定的列表&#xff08;或文档库&#xff09;中按照某些筛选、排序条件进行查询。列表查询主要使用SPQuery对象&#xff0c;以及SPList的GetItems方法&#xff0c;将SPQuery作为参数传递&a…

【转】理解SQL Server的安全对象和权限

理解安全对象(Securable) 安全对象&#xff0c;是SQL Server 数据库引擎授权系统控制对其进行访问的资源。通俗点说&#xff0c;就是在SQL Server权限体系下控制的对象&#xff0c;因为所有的对象(从服务器&#xff0c;到表&#xff0c;到视图触发器等)都在SQL Server的权限体系…

【NC14 按之字形顺序打印二叉树】

描述 给定一个二叉树&#xff0c;返回该二叉树的之字形层序遍历&#xff0c;&#xff08;第一层从左向右&#xff0c;下一层从右向左&#xff0c;一直这样交替&#xff09; 数据范围&#xff1a;0 \le n \le 15000≤n≤1500,树上每个节点的val满足 |val| < 100∣val∣<1…