1254 - Number Of Closed Islands
#medium
Given a 2D grid
consists of 0s
(land) and 1s
(water). An island is a maximal 4-directionally connected group of 0s
and a closed island is an island totally (all left, top, right, bottom) surrounded by 1s.
Return the number of closed islands.
Example 1:
Input: 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] ]
Output: 2
Explanation:
Islands in gray are closed because they are completely surrounded by water (group of 1s).
Example 2:
Input: grid = [ [0,0,1,0,0],[0,1,0,1,0],[0,1,1,1,0] ]
Output: 1
class Solution {
public:
bool dfs( vector<vector<int>> & grid, int m, int n, int i, int j ) {
if ( i < 0 || i >=m || j < 0 || j >= n ) return false;
if ( grid[i][j] == 1 ) return true;
grid[i][j] = 1;
bool left = dfs( grid, m, n, i - 1, j );
bool right = dfs( grid, m, n, i + 1, j );
bool up = dfs( grid, m, n, i, j - 1 );
bool down = dfs( grid, m, n, i, j + 1 );
return left && right && up && down;
}
int closedIsland(vector<vector<int>>& grid) {
int result = 0;
int m = grid.size();
int n = grid[0].size();
for ( int i = 0; i < m; i++ ) {
for ( int j = 0; j < n; j++ ) {
if ( grid[i][j] == 0 && dfs( grid, m, n, i, j ) ) result++;
}
}
return result;
}
};