2
public int countSubIslands(int[][] grid1, int[][] grid2) {4
int n = grid1[0].length;5
boolean[][] vis = new boolean[m][n];7
int[] dir = {1, 0, -1, 0, 1};9
for (int i = 0; i < m; ++i) {10
for (int j = 0; j < n; ++j) {11
if (grid2[i][j] == 0 || vis[i][j]) continue;13
Queue<int[]> queue = new LinkedList<>();17
queue.add(new int[] {i, j});19
while (!queue.isEmpty()) {20
int[] vtx = queue.remove();22
if (grid1[vtx[0]][vtx[1]] == 0) flag = false;24
for (int k = 0; k < 4; ++k) {25
int x = vtx[0] + dir[k];26
int y = vtx[1] + dir[k + 1];28
if (x >= 0 && x < m && y >= 0 && y < n && grid2[x][y] == 1 && !vis[x][y]) {31
queue.add(new int[] {x, y});