class Solution {
boolean[][] visit;
public int countSubIslands(int[][] grid1, int[][] grid2) {
int m = grid2.length;
int n = grid2[0].length;
visit = new boolean[m][n];
int ans = 0;
for(int i=0;i < m;i++){
for(int j = 0;j < n;j++){
if(visit[i][j] == false && grid2[i][j] == 1)
{
//System.out.println(i+","+j);
boolean flag = dfs(grid1,grid2,i,j);
if(flag == true)
ans += 1;
}
}
}
return ans;
}
public boolean dfs(int[][] grid1,int[][] grid2,int i,int j){
visit[i][j] = true;
int m = grid2.length;
int n = grid2[0].length;
boolean flag1 = true;
boolean flag2 = true;
boolean flag3 = true;
boolean flag4 = true;
boolean flag5 = true;
if(grid1[i][j] == 0)
flag1 = false;
if(i+1 < m && visit[i+1][j] == false && grid2[i+1][j] ==1){
flag2 = dfs(grid1,grid2,i+1,j);
}
if(i-1 >=0 && visit[i-1][j] == false && grid2[i-1][j] ==1){
flag3 = dfs(grid1,grid2,i-1,j);
}
if(j-1 >= 0 && visit[i][j-1] == false && grid2[i][j-1] ==1){
flag4 = dfs(grid1,grid2,i,j-1);
}
if(j+1 < n && visit[i][j+1] == false && grid2[i][j+1] ==1){
flag5 = dfs(grid1,grid2,i,j+1);
}
if(flag1 == true && flag2 == true && flag3 == true && flag4 == true && flag5 == true)
return true;
else
return false;
}
}