地址 https://leetcode-cn.com/problems/number-of-enclaves/

给出一个二维数组 A,每个单元格为 0(代表海)或 1(代表陆地)。

移动是指在陆地上从一个地方走到另一个地方(朝四个方向之一)或离开网格的边界。

返回网格中无法在任意次数的移动中离开网格边界的陆地单元格的数量。

示例 :

输入:[[,,,],[,,,],[,,,],[,,,]]
输出:
解释:
有三个 被 包围。一个 没有被包围,因为它在边界上。
示例 : 输入:[[,,,],[,,,],[,,,],[,,,]]
输出:
解释:
所有 都在边界上或可以到达边界。
  提示: <= A.length <=
<= A[i].length <=
<= A[i][j] <=
所有行的大小都相同

这题目和之前的

POJ 2386 Lake Counting

poj 1979 Red and Black

基本一致  可以使用并查集和DFS完成

这里就换个思路 给个BFS版本 不过提交 就tle了 仅仅是提供个答案外的思路

class Solution {
public:
int numEnclaves(vector<vector<int>>& A) {
if (A.empty()) return ;
int n = A.size();
int m = A[].size();
int ret = ; for (int i = ; i < n; i++) {
for (int j = ; j < m; j++) {
if (i == || i == ( n - ) || j == || j == (m - )) {
if(A[i][j] ==)
bfs(A, i, j);
}
}
} for (int i = ; i < n; i++) {
for (int j = ; j < m; j++) {
if (A[i][j] == ) {
ret++;
}
}
} return ret;
} private:
int bfs(vector<vector<int>>& A, int i, int j) {
int cnt = ;
queue<vector<int>> que;
que.push({ i, j });
int di[] = { , , , - };
int dj[] = { , -, , }; while (!que.empty()) {
vector<int> cur(que.front());
que.pop();
cnt++;
A[cur[]][cur[]] = ; for (int k = ; k < ; k++) {
int ni = cur[] + di[k];
int nj = cur[] + dj[k]; if (valid(ni, nj, A.size(), A[].size()) && A[ni][nj] == ) {
que.push({ ni, nj });
}
}
}
return cnt;
} bool valid(int i, int j, int n, int m) {
return (i >= && i < n && j >= && j < m);
}
};

ac code:

 class Solution {
public:
int addx[]; int addy[]; void Dfs(vector<vector<int>>& A,int x ,int y)
{
if( x < || x>= A.size() || y < || y >= A[].size()) return; A[x][y] = ; for(int i = ;i <;i++){
int newx = x + addx[i];
int newy = y + addy[i]; if(newx>= && newx < A.size() && newy >= && newy< A[].size() && A[newx][newy] == )
Dfs(A,newx,newy);
} } int numEnclaves(vector<vector<int>>& A) {
if(A.empty() || A[].empty()) return ;
addx[] = -;addx[] = ; addx[] = ;addx[] = ;
addy[] = ;addy[] = ; addy[] = -;addy[] = ;
for(int i = ;i<A.size();++i){
for(int j = ; j< A[].size();++j){
if(i == || i == A.size()- || j == || j == A[].size()- ){
if(A[i][j] == ){
//边缘的元素 并且== 1
Dfs(A,i,j);
}
}
}
} int count = ;
for(int i = ;i<A.size();++i){
for(int j = ; j< A[].size();++j){
if(A[i][j] == ) count++;
}
} return count;
}
};

Leetcode 1020 飞地的数量的更多相关文章

  1. Leetcode之深度优先搜索(DFS)专题-1020. 飞地的数量(Number of Enclaves)

    Leetcode之深度优先搜索(DFS)专题-1020. 飞地的数量(Number of Enclaves) 深度优先搜索的解题详细介绍,点击 给出一个二维数组 A,每个单元格为 0(代表海)或 1( ...

  2. Leetcode 200.岛屿的数量 - DFS、BFS

    Leetcode 200 岛屿的数量: DFS利用函数调用栈保证了检索顺序, BFS则需要自己建立队列,把待检索对象按规则入队. class Solution { // DFS解法,8ms/10.7M ...

  3. [Swift]LeetCode1020. 飞地的数量 | Number of Enclaves

    Given a 2D array A, each cell is 0 (representing sea) or 1 (representing land) A move consists of wa ...

  4. LeetCode 200:岛屿数量 Number of Islands

    题目: 给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量.一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的.你可以假设网格的四个边均被水包围. Given ...

  5. Leetcode 1020. 将数组分成和相等的三个部分

    1020. 将数组分成和相等的三个部分  显示英文描述 我的提交返回竞赛   用户通过次数321 用户尝试次数401 通过次数324 提交次数883 题目难度Easy 给定一个整数数组 A,只有我们可 ...

  6. Leetcode 452.用最少数量的箭引爆气球

    用最少数量的箭引爆气球 在二维空间中有许多球形的气球.对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标.由于它是水平的,所以y坐标并不重要,因此只要知道开始和结束的x坐标就足够了.开始坐 ...

  7. Leetcode 447.回旋镖的数量

    回旋镖的数量 给定平面上 n 对不同的点,"回旋镖" 是由点表示的元组 (i, j, k) ,其中 i 和 j 之间的距离和 i 和 k 之间的距离相等(需要考虑元组的顺序). 找 ...

  8. Leetcode题目200.岛屿数量(BFS+DFS+并查集-中等)

    题目描述: 给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量.一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的.你可以假设网格的四个边均被水包围. 示例 ...

  9. Java实现 LeetCode 726 原子的数量(递归+HashMap处理)

    726. 原子的数量 给定一个化学式formula(作为字符串),返回每种原子的数量. 原子总是以一个大写字母开始,接着跟随0个或任意个小写字母,表示原子的名字. 如果数量大于 1,原子后会跟着数字表 ...

随机推荐

  1. java架构之路-(MQ专题)RocketMQ从入坑到集群详解

    这次我们来说说我们的RocketMQ的安装和参数配置,先来看一下我们RocketMQ的提出和应用场景吧. 早在2009年,阿里巴巴的淘宝第一次提出了双11购物狂欢节,但是在2009年,服务器无法承受到 ...

  2. c# 保留两位小数点

    保留两位小数点 由于简单的原因大家直接看代码块. using System; namespace HelloWorld { class Program { static void Main(strin ...

  3. 关于一道你们眼中的水题 Windy数 的乱写(数位dp)

    啊一道水题有什么好说的 上课听不懂,下课泪两行. 有的人什么套路都会,我.. 只能可怜巴巴的抄代码,然后自己总结,顺(zhu)便(yao)颓博客 1.递推dp的思路做到一半死了,怎么也想不出来如何处理 ...

  4. CPU负载和CPU使用率

    参考CSDN博客:https://blog.csdn.net/ffzhihua/article/details/87257607 一.概念(本人理解) CPU负载:平均负载(load average) ...

  5. Asp.net Core 系列之--2.ORM初探:Dapper实现MySql数据库各类操作

    ChuanGoing 2019-09-10 距离上一篇近一个月时间,断断续续才把本篇码完,后面将加快进度,争取年度内把本系列基本介绍完成,同时督促本人持续学习. 本篇学习曲线: 1.初识Dapper ...

  6. echarts动态刷新数据

    在这次的项目中图表显示的部分比较多,这边给分享下用到的图表的数据刷新 饼图最后的效果 先看下 前端部分 <div div style="height: 40%; width: 17.5 ...

  7. Python-webbrowser实现自动打开关、定时打开关闭网页/刷新网页

    webbrowser- 方便的Web浏览器控制器,是Python一个模块,可实现自动打开关.定时打开关闭网页/刷新网页,在Unix下,图形浏览器在X11下更受欢迎,但如果图形浏览器不可用或X11显示器 ...

  8. PyCharm使用正则替换python中的静态资源

    python每次开发前台页面时,最无法避免的就是前台静态资源地址的替换了,手动替换成{% static 'web/.......' %}可想而知的痛苦,把正则替换的方式分享给朋友们,希望可以帮助到需要 ...

  9. swoole不断的切换前端链接方法 防止攻击

    php不断的切换前端链接方法 防止攻击 swoole写法 每分钟生成一次url后缀 返回到客户端让他们更新 //定时器要写在WorkerStart这个里面哦$ws->on('WorkerStar ...

  10. Vue基础系列(四)——Vue中的指令(上)

    写在前面的话: 文章是个人学习过程中的总结,为方便以后回头在学习. 文章中会参考官方文档和其他的一些文章,示例均为亲自编写和实践,若有写的不对的地方欢迎大家和我一起交流. VUE基础系列目录 < ...