200. 岛屿数量
- 题号:力扣200
- 知识点:DFS
- 目标完成度:28/150
- 总结
题干:
思路:
- 1.将二维网格看成一个无向图,竖直或水平相邻的 1 之间有边相连
- 2.为了求出岛屿的数量,首先使用两层循环遍历矩阵元素,当矩阵元素为1时,以该元素位置为起点进行深度优先搜索,将所有与该元素相连(上下左右)的元素为1的都置为0。
- 3.因此,在我们的两层循环遍历中,每次遍历到为1的元素就是一个岛屿(也是深度优先搜索的起点)。
class Solution:
def dfs(self, grid, r, c):
nr = len(grid)
nc = len(grid[0])
grid[r][c] = 0
if r-1>=0 and grid[r-1][c] == '1': self.dfs(grid, r-1, c)
if r+1<nr and grid[r+1][c] == '1': self.dfs(grid, r+1, c)
if c-1>=0 and grid[r][c-1] == '1': self.dfs(grid, r, c-1)
if c+1<nc and grid[r][c+1] == '1': self.dfs(grid, r, c+1)
def numIslands(self, grid: List[List[str]]) -> int:
num = 0
if not len(grid):
return 0
for i in range(len(grid)):
for j in range(len(grid[0])):
if grid[i][j] == '1':
num += 1
self.dfs(grid, i, j)
return num