地址 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. json基本内容

    json的基本信息和历史 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于欧洲计算机协会制定的js规范的一个子集,采用完全独立于编程语言的文本格式来 ...

  2. (IDEA) 搭建Maven并使用Maven打包部署

    1.配置Maven的环境变量 a.首先我们去maven官网下载Maven程序,解压到安装目录,如图所示: b.配置M2_HOME的环境变量,然后将该变量添加到Path中 备注:必须要有JAVA_HOM ...

  3. CVE-2019-13272 Linux kernel 权限许可和访问控制问题漏洞

    漏洞简介: Linuxkernel是美国Linux基金会发布的开源操作系统Linux所使用的内核. Linuxkernel5.1.17之前版本中存在安全漏洞,该漏洞源于kernel/ptrace.c文 ...

  4. sqlmap日常使用

    收集的一些技巧资源来之互联网 -u #注入点 -f #指纹判别数据库类型 -b #获取数据库版本信息 -p #指定可测试的参数(?page=1&id=2 -p "page,id&qu ...

  5. 死磕 java线程系列之ForkJoinPool深入解析

    (手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本. 注:本文基于ForkJoinPool分治线程池类. 简介 随着在硬件上多核处理器的发展和广泛使用,并发编程成为 ...

  6. UVA12433 【Rent a Car】

    这题应该算是比较难的一道网络流的题,(但却在我校OJ考试上出现了),但是大家只要能理解此图的建边方式就行. 假设有5天的租车需求,虚拟出2*n+2 即 12个节点,0为源点,12为汇点. 1,源点到1 ...

  7. 学习笔记41_Spring.Net

    Spring.Net:由容器负责创建对象,容器读取配置文件来初始化对象,配置文件须符合 Spring.Net范式: 准备材料: Common.Loggin.dll,Spring.Core.dll 第一 ...

  8. SpringBoot系列:Spring Boot定时任务Spring Schedule

    Spring Schedule是Spring提供的定时任务框架,相较于Quartz,Schedule更加简单易用,在中小型应用中,对于大部分需求,Schedule都可以胜任. 一.Spring Sch ...

  9. NOIP模拟 32

    我在31反思中膜拜过了B哥 没想到这次又... 我给老姚家丢脸了...STO 首先T1暴力就写挂了... 贪图从$n^3$*$2^n$优化成$n^2$*$2^n$然后打错了 哗哗的扔分 而且正解都想不 ...

  10. P2579 [ZJOI2005]沼泽鳄鱼(邻接矩阵,快速幂)

    题目简洁明了(一点都不好伐) 照例,化简题目 给一张图,每一个时间点有一些点不能走,(有周期性),求从起点第k秒恰好在终点的方案数,可重复,不可停留. 额dp实锤 于是就被打脸了.... 有一种东西叫 ...