地址 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. 品优购(IDEA版)-第一天

    # 品优购(IDEA版)-第一天 品优购IDEA版应该是2019年的新项目.目前只有视频.资料其他都还是旧的. ## 1.学习目标 1:了解电商行业特点以及理解电商的模式 2:了解整体品优购的架构特点 ...

  2. git push 报src refspec xxx does not match any的错误

    今天在向一个新的远程分支上推送项目的时候报错: 远程分支branch_new是其他人建的,我在自己本地修改后把自己分支的修改推送到这个远程分支上. 把修改提到本地仓库: git add ./ git ...

  3. Android自定义控件:图形报表的实现(折线图、曲线图、动态曲线图)(View与SurfaceView分别实现图表控件)

    图形报表很常用,因为展示数据比较直观,常见的形式有很多,如:折线图.柱形图.饼图.雷达图.股票图.还有一些3D效果的图表等. Android中也有不少第三方图表库,但是很难兼容各种各样的需求. 如果第 ...

  4. 在VMware下进行的CentOS7操作系统虚拟机的安装

    一.VMware虚拟机的安装 首先你需要拥有一款软件VMware,这是一款虚拟机安装软件.Vmware比起Vbox收费较贵,占用资源大,但是拥有大量的资源以及拥有克隆技术,适合新手学习使用,较为专业. ...

  5. NOIP模拟13

    上来看了一遍题,发现T2似乎不可做...暴力只给20分怎么玩? T1感觉是要离线处理,但是看了一会发现不会,遂决定先打暴力.然后去把T2 20分拿了,回去看T1,手摸了一下样例,成功推出式子,5分钟码 ...

  6. COO 与 CSR 稀疏矩阵存取格式;

    稀疏矩阵是指矩阵中元素大部分是0的矩阵,事实上,实际问题中大规模矩阵基本上是稀疏矩阵,很多稀疏度在90%甚至99%以上:因此我们需要有高效的稀疏矩阵存储格式. 本文参考了 https://www.cn ...

  7. 爬虫学习--常用的正则表达式 Day3

    在做爬虫经常遇到需要用正则校验数据时候,往往是在网上去找很久,结果找来的还是不很符合要求.所以我最近把开发中常用的一些正则表达式整理了一下,给自己留个底,也给朋友们做个参考. 一.校验数字的表达式 1 ...

  8. m101 真*sb($\huge 全场最瞎$)

    不想说这场考试,T1全场切,但是我: T3全场30,但是: 鬼知道我为什么敲的是p*p啊(而且还炸精了!) kuku----! $\huge 全场最瞎$

  9. GPIO硬件资源的申请,内核空间和用户空间的数据交换,ioctl(.....),设备文件的自动创建

    1.通过GPIO库函数控制LED   open("/dev/myleds",...)       close(fd)   ----------------------------- ...

  10. VUE 表格进入页面加载初始数据及操作后刷新数据

    1.获取列表数据方法 2.打开页面默认加载数据 3.操作后重新获取数据