Hay una cuadrícula de matriz bidimensional, y cada ubicación es tierra (marcada como 0) o área de agua (marcada como 1).
Partimos de un pedazo de tierra y podemos ir a áreas adyacentes en cuatro direcciones, arriba, abajo, izquierda y derecha Todas las áreas terrestres por las que podemos caminar se llaman "isla".
Si una isla está completamente rodeada de agua, es decir, todas las áreas adyacentes arriba, abajo, izquierda y derecha en el borde de la tierra son aguas, entonces la llamamos "isla cerrada".
Devuelva el número de islas cerradas.
Ejemplo 1:
Entrada: cuadrícula = [[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]]
Resultado: 2
Explicación:
La isla en el área gris es una isla cerrada porque la isla está completamente rodeada de agua (es decir, rodeada por el área 1).
Ejemplo 2:
输入:grid = [[0,0,1,0,0],[0,1,0,1,0],[0,1,1,1,0]]
输出:1
Ejemplo 3:
Entrada: cuadrícula = [[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]]
salida: 2
提示:
1 <= grid.length, grid[0].length <= 100
0 <= grid[i][j] <=1
Fuente: LeetCode
Enlace: https://leetcode-cn.com/problems/number-of-closed-islands Los
derechos de autor son propiedad de LeetCode . Para reimpresiones comerciales, comuníquese con la autorización oficial. Para reimpresiones no comerciales, indique la fuente.
Obviamente, el primer recorrido en profundidad, la idea específica, usa DBS, regresa a la playa y regresa cuando es 1, porque es DBS, definitivamente puede atravesar un pequeño rango de tierra, y el recorrido se completa en la función principal. +1. Lo intentaré:
class Solution {
private:
int val =0;
public:
int closedIsland(vector<vector<int>>& grid) {
int count = 0;
for(int i=0;i<grid.size();i++)
for(int j=0;j<grid[0].size();j++)
if(grid[i][j] == 0){
val = 0;
count+=dfs(grid,i,j)+val;
}
return count;
}
int dfs(vector<vector<int>>& grid,int i,int j){
//如果在海边就让总数据减一
if(i < 0 || i == grid.size() || j < 0|| j == grid[0].size())
{
val = -1;
return 0;
}
if(grid[i][j]!=0) return 0;
grid[i][j] = 1;
dfs(grid,i,j+1);
dfs(grid,i,j-1);
dfs(grid,i+1,j);
dfs(grid,i-1,j);
return 1;
}
};