class Solution {
public:
int N,M;
int dfs(vector<vector<int>>& grid,int x,int y,vector<vector<int>>& color){
const int dirx[] = {-1,0,1,0};
const int diry[] = {0,1,0,-1};
color[x][y] = 1;
int sum = 0;
for(int i=0;i<4;i++){
int xx = x + dirx[i];
int yy = y + diry[i];
if(xx >= 0 && xx < N && yy >= 0 && yy < M && grid[xx][yy] ){
if(color[xx][yy] == 0){
sum += dfs(grid,xx,yy,color);
}
}else{
sum ++;
}
}
return sum;
}
int islandPerimeter(vector<vector<int>>& grid) {
N = grid.size();
M = grid[0].size();
vector<vector<int>> color(N,vector<int>(M,0));
for(int i=0;i<N;i++){
for(int j=0;j<M;j++){
if(grid[i][j]){
return dfs(grid,i,j,color);
}
}
}
return 0;
}
};