#pragma GCC optimize ("Ofast")
#include<bits/stdc++.h>
using namespace std;
#define main dummy_main
int main( ) {
return 0 ;
}
#undef main
int X;
int Y;
int ok;
int mp[ 100 ] [ 100 ] ;
void nul( int i, int j) {
if ( i < 0 || j < 0 || i >= X || j >= Y) {
ok = 0 ;
return ;
}
if ( mp[ i] [ j] == 1 || mp[ i] [ j] == 2 ) {
return ;
}
mp[ i] [ j] = 2 ;
nul( i, j - 1 ) ;
nul( i, j + 1 ) ;
nul( i - 1 , j) ;
nul( i + 1 , j) ;
}
class Solution{
public :
int closedIsland( vector< vector< int >> & grid) {
int i;
int res = 0 ;
X = grid.size ( ) ;
Y = grid[ 0 ] .size ( ) ;
for ( i= ( 0 ) ; i< ( X) ; i++ ) {
int j;
for ( j= ( 0 ) ; j< ( Y) ; j++ ) {
mp[ i] [ j] = grid[ i] [ j] ;
}
}
for ( i= ( 0 ) ; i< ( X) ; i++ ) {
int j;
for ( j= ( 0 ) ; j< ( Y) ; j++ ) {
if ( mp[ i] [ j] == 0 ) {
ok = 1 ;
nul( i,j) ;
res + = ok;
}
}
}
return res;
}
}
;
// cLay varsion 20191108-1
// --- original code ---
// #define main dummy_main
// {}
// #undef main
//
// int X, Y, ok, mp[100][100];
//
// void nul(int i, int j){
// if(i < 0 || j < 0 || i >= X || j >= Y) ok = 0, return;
// if(mp[i][j]==1 || mp[i][j]==2) return;
// mp[i][j] = 2;
// nul(i, j - 1);
// nul(i, j + 1);
// nul(i - 1, j);
// nul(i + 1, j);
// }
//
// class Solution {
// public:
// int closedIsland(vector<vector<int>>& grid) {
// int res = 0;
// X = grid.size();
// Y = grid[0].size();
// rep(i,X) rep(j,Y) mp[i][j] = grid[i][j];
// rep(i,X) rep(j,Y) if(mp[i][j]==0){
// ok = 1;
// nul(i,j);
// res += ok;
// }
// return res;
// }
// };
I3ByYWdtYSBHQ0Mgb3B0aW1pemUgKCJPZmFzdCIpCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbWFpbiBkdW1teV9tYWluCmludCBtYWluKCl7CiAgcmV0dXJuIDA7Cn0KI3VuZGVmIG1haW4KaW50IFg7CmludCBZOwppbnQgb2s7CmludCBtcFsxMDBdWzEwMF07CnZvaWQgbnVsKGludCBpLCBpbnQgail7CiAgaWYoaSA8IDAgfHwgaiA8IDAgfHwgaSA+PSBYIHx8IGogPj0gWSl7CiAgICBvayA9IDA7CiAgICByZXR1cm47CiAgfQogIGlmKG1wW2ldW2pdPT0xIHx8IG1wW2ldW2pdPT0yKXsKICAgIHJldHVybjsKICB9CiAgbXBbaV1bal0gPSAyOwogIG51bChpLCBqIC0gMSk7CiAgbnVsKGksIGogKyAxKTsKICBudWwoaSAtIDEsIGopOwogIG51bChpICsgMSwgaik7Cn0KY2xhc3MgU29sdXRpb257CiAgcHVibGljOgogIGludCBjbG9zZWRJc2xhbmQodmVjdG9yPHZlY3RvcjxpbnQ+PiYgZ3JpZCl7CiAgICBpbnQgaTsKICAgIGludCByZXMgPSAwOwogICAgWCA9IGdyaWQuc2l6ZSgpOwogICAgWSA9IGdyaWRbMF0uc2l6ZSgpOwogICAgZm9yKGk9KDApO2k8KFgpO2krKyl7CiAgICAgIGludCBqOwogICAgICBmb3Ioaj0oMCk7ajwoWSk7aisrKXsKICAgICAgICBtcFtpXVtqXSA9IGdyaWRbaV1bal07CiAgICAgIH0KICAgIH0KICAgIGZvcihpPSgwKTtpPChYKTtpKyspewogICAgICBpbnQgajsKICAgICAgZm9yKGo9KDApO2o8KFkpO2orKyl7CiAgICAgICAgaWYobXBbaV1bal09PTApewogICAgICAgICAgb2sgPSAxOwogICAgICAgICAgbnVsKGksaik7CiAgICAgICAgICByZXMgKz0gb2s7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzOwogIH0KfQo7Ci8vIGNMYXkgdmFyc2lvbiAyMDE5MTEwOC0xCgovLyAtLS0gb3JpZ2luYWwgY29kZSAtLS0KLy8gI2RlZmluZSBtYWluIGR1bW15X21haW4KLy8ge30KLy8gI3VuZGVmIG1haW4KLy8gCi8vIGludCBYLCBZLCBvaywgbXBbMTAwXVsxMDBdOwovLyAKLy8gdm9pZCBudWwoaW50IGksIGludCBqKXsKLy8gICBpZihpIDwgMCB8fCBqIDwgMCB8fCBpID49IFggfHwgaiA+PSBZKSBvayA9IDAsIHJldHVybjsKLy8gICBpZihtcFtpXVtqXT09MSB8fCBtcFtpXVtqXT09MikgcmV0dXJuOwovLyAgIG1wW2ldW2pdID0gMjsKLy8gICBudWwoaSwgaiAtIDEpOwovLyAgIG51bChpLCBqICsgMSk7Ci8vICAgbnVsKGkgLSAxLCBqKTsKLy8gICBudWwoaSArIDEsIGopOwovLyB9Ci8vIAovLyBjbGFzcyBTb2x1dGlvbiB7Ci8vIHB1YmxpYzoKLy8gICBpbnQgY2xvc2VkSXNsYW5kKHZlY3Rvcjx2ZWN0b3I8aW50Pj4mIGdyaWQpIHsKLy8gICAgIGludCByZXMgPSAwOwovLyAgICAgWCA9IGdyaWQuc2l6ZSgpOwovLyAgICAgWSA9IGdyaWRbMF0uc2l6ZSgpOwovLyAgICAgcmVwKGksWCkgcmVwKGosWSkgbXBbaV1bal0gPSBncmlkW2ldW2pdOwovLyAgICAgcmVwKGksWCkgcmVwKGosWSkgaWYobXBbaV1bal09PTApewovLyAgICAgICBvayA9IDE7Ci8vICAgICAgIG51bChpLGopOwovLyAgICAgICByZXMgKz0gb2s7Ci8vICAgICB9Ci8vICAgICByZXR1cm4gcmVzOwovLyAgIH0KLy8gfTsK