【题目】
【代码】
【方法1】深度优先
class Solution:
def countSubIslands(self, grid1: List[List[int]], grid2: List[List[int]]) -> int:
cnt=0
def dfs(x,y):
if x>=0 and x<len(grid2) and y>=0 and y<len(grid2[0]) and grid2[x][y]==1:
grid2[x][y]=0
return grid1[x][y] & dfs(x-1,y) & dfs(x+1,y) & dfs(x,y-1) & dfs(x,y+1)
return True
for i in range(len(grid2)):
for j in range(len(grid2[0])):
if grid2[i][j]==1:
cnt+=dfs(i,j)
return cnt
【方法2】广度优先
class Solution:
def countSubIslands(self, grid1: List[List[int]], grid2: List[List[int]]) -> int:
m, n = len(grid1), len(grid1[0])
def bfs(sx: int, sy: int) -> int:
q = deque([(sx, sy)])
grid2[sx][sy] = 0
# 判断岛屿包含的每一个格子是否都在 grid1 中出现了
check = (grid1[sx][sy] == 1)
while q:
x, y = q.popleft()
for nx, ny in ((x - 1, y), (x + 1, y), (x, y - 1), (x, y + 1)):
if 0 <= nx < m and 0 <= ny < n and grid2[nx][ny] == 1:
q.append((nx, ny))
grid2[nx][ny] = 0
if grid1[nx][ny] != 1:
check = False
return int(check)
ans = 0
for i in range(m):
for j in range(n):
if grid2[i][j] == 1:
ans += bfs(i, j)
return ans