```python
class Solution:
def numIslands(self, grid: List[List[str]]) -> int:
m, n = len(grid), len(grid[0])
# visited = [[False] * n for _ in range(m)] # 如果不能修改用标记grid
# 深搜当前陆地部分
def dfs(x, y): # x表示行,y表示列
grid[x][y] = "0" # 遍历到的节点就置为0以防重复,用visited则删除此句
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 grid[nx][ny] == "1":
# if 0 <= nx < m and 0 <= ny < n and grid[nx][ny] == "1" and not visited[nx][ny]:
# visited[nx][ny] = True
dfs(nx,ny)
# 依次遍历每个节点搜索大陆
res = 0
for i in range(m):
for j in range(n):
if grid[i][j] == "1":
# if not visited[i][j] and grid[i][j] == '1':
# visited[i][j] = True
res += 1 # 遇到没访问过的陆地,+1
dfs(i, j)
# 返回总陆地数
return res
```
BFS
复制代码
```python
class Solution:
def numIslands(self, grid: List[List[str]]) -> int:
m, n = len(grid), len(grid[0])
# visited = [[False] * n for _ in range(m)] # 如果不能修改用visited标记grid中已访问节点
# 广搜当前陆地部分
def bfs(x, y): # x表示行,y表示列
q = deque()
q.append((x,y))
grid[x][y] = "0" # 遍历到的节点就置为0以防重复,用visited则删除此句
# visited[x][y] = True # 用visited
while q:
x0, y0 = q.popleft() # 当前遍历节点加入队列
for nx, ny in [(x0-1,y0), (x0+1,y0), (x0,y0-1), (x0,y0+1)]:
if 0 <= nx < m and 0 <= ny < n and grid[nx][ny] == "1": # 用visited则删除此句
# if 0 <= nx < m and 0 <= ny < n and grid[nx][ny] == "1" and not visited[nx][ny]:
q.append((nx, ny))
grid[nx][ny] = "0" # 加入列表就标记为访问过,用visited则删除此句
# visited[nx][ny] = True # 用visited
# 依次遍历每个节点搜索大陆
res = 0
for i in range(m):
for j in range(n):
if grid[i][j] == "1":
# if not visited[i][j] and grid[i][j] == '1':
res += 1 # 遇到没访问过的陆地,+1
bfs(i, j)
# 返回总陆地数
return res
```