1. 程式人生 > 其它 >leetcode1905 統計子島嶼

leetcode1905 統計子島嶼

思路:

在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 }