forked from neetcode-gh/leetcode
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path1905-count-sub-islands.go
39 lines (35 loc) · 939 Bytes
/
1905-count-sub-islands.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
func countSubIslands(grid1 [][]int, grid2 [][]int) int {
ROWS, COLS := len(grid1), len(grid1[0])
visit := make(map[int]bool)
var dfs func(int, int) bool
dfs = func(r, c int) bool {
if (
r < 0 ||
c < 0 ||
r == ROWS ||
c == COLS ||
grid2[r][c] == 0 ||
visit[r*COLS + c]) {
return true
}
visit[r*COLS + c] = true
res := true
if grid1[r][c] == 0 {
res = false
}
res = dfs(r - 1, c) && res
res = dfs(r + 1, c) && res
res = dfs(r, c - 1) && res
res = dfs(r, c + 1) && res
return res
}
count := 0
for r := 0; r < ROWS; r++ {
for c := 0; c < COLS; c++ {
if grid2[r][c] != 0 && !visit[r*COLS + c] && dfs(r, c) {
count += 1
}
}
}
return count
}