200. Number of Islands
2018-08-25 本文已影响0人
小歪与大白兔
题目大意:
给定一个由字符‘1’(陆地)和‘0’(水域)组成的二维网格地图,计算岛屿的个数。岛屿被水域环绕,由竖直或者水平方向邻接的陆地构成。你可以假设网格地图的四条边都被水域包围。
测试样例见题目描述。
题目思路:
做法是,我们对每个有“1”的位置进行dfs,把它和它四联通的位置全部变成“0”,这样就能把一个点推广到一个岛。
所以,我们总的进行了dfs的次数,就是总过有多少个岛的数目。
class Solution(object):
def numIslands(self, grid):
"""
:type grid: List[List[str]]
:rtype: int
"""
res = 0
for row in range(len(grid)):
for col in range(len(grid[0])):
if grid[row][col] == '1':
res = res + 1
self.bfs(grid,row,col)
return res
def bfs(self,grid,row,col):
#direction表示的是四个方向
direction = [(-1,0),(1,0),(0,-1),(0,1)]
grid[row][col] = '0'
for d in direction:
new_row = row + d[0]
new_col = col + d[1]
if 0<= new_row < len(grid) and 0<= new_col < len(grid[0]):
if grid[new_row][new_col] == '1':
self.bfs(grid,new_row,new_col)
image.png