思路:
在grid2中bfs/dfs寻找岛屿的同时判断这个岛屿对应的位置在grid1中是否全部为1。
实现:
1 class Solution 2 { 3 public: 4 int dx[4] = {0, 1, 0, -1}; 5 int dy[4] = {1, 0, -1, 0}; 6 bool dfs(int x, int y, vector<vector<int>>& g1, vector<vector<int>>& g2, vector<vector<bool>>& vis) 7 { 8 bool res = true; 9 if (g1[x][y] == 0) res = false; 10 vis[x][y] = true; 11 int n = g2.size(), m = g2[0].size(); 12 for (int i = 0; i < 4; i++) 13 { 14 int nx = x + dx[i], ny = y + dy[i]; 15 if (nx >= 0 and nx < n and ny >= 0 and ny < m and g2[nx][ny] == 1 and !vis[nx][ny]) 16 { 17 res &= dfs(nx, ny, g1, g2, vis); 18 } 19 } 20 return res; 21 } 22 int countSubIslands(vector<vector<int>>& grid1, vector<vector<int>>& grid2) 23 { 24 int n = grid1.size(), m = grid1[0].size(); 25 vector<vector<bool>> vis(n, vector<bool>(m, false)); 26 int res = 0; 27 for (int i = 0; i < n; i++) 28 { 29 for (int j = 0; j < m; j++) 30 { 31 if (grid2[i][j] == 1 and !vis[i][j]) 32 { 33 res += dfs(i, j, grid1, grid2, vis); 34 } 35 } 36 } 37 return res; 38 } 39 }