给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。
岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。
此外,你可以假设该网格的四条边均被水包围。
示例 1:
输入:
[
['1','1','1','1','0'],
['1','1','0','1','0'],
['1','1','0','0','0'],
['0','0','0','0','0']
]
输出: 1
示例 2:
输入:
[
['1','1','0','0','0'],
['1','1','0','0','0'],
['0','0','1','0','0'],
['0','0','0','1','1']
]
输出: 3
解释: 每座岛屿只能由水平和/或竖直方向上相邻的陆地连接而成。
思路:bfs,遍历二维网格,如果当前值为"1",岛屿数量加1,并且则将其置为0,并且进行广度优先遍历,使其上,下,左,右为"1"的都置为0,因为和它相邻的都属于同一个岛屿,置为0,也即设置为已访问,减少遍历次数,好了,上代码.
class Solution:
def numIslands(self, grid: List[List[str]]) -> int:
rows = len(grid)
if rows == 0:
return 0
cols = len(grid[0])
res = 0
for row in range(rows):
for col in range(cols):
if grid[row][col] == '1':
res += 1
self.bfs(grid, row, col)
return res
def bfs(self, grid, row, col):
grid[row][col] = '0'
for x, y in [(row - 1, col), (row, col - 1), (row + 1, col), (row, col + 1)]:
if x >= 0 and x < len(grid) and y >= 0 and y < len(grid[0]) and grid[x][y] == '1':
self.bfs(grid, x, y)