【LeetCode】200. 岛屿的个数

题目

给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。
示例 1:输入:

11110
11010
11000
00000

输出: 1

示例 2:输入:

11000
11000
00100
00011

输出: 3

思路

DFS,深度遍历搜索
visited记录遍历过的陆地

代码

class Solution:
    def numIslands(self, grid: List[List[str]]) -> int:
        if len(grid) == 0:
            return 0
        #visited全部初始化为0
        row, col = len(grid), len(grid[0])
        visited = [[0 for x in range(0, col)] for y in range(0, row)]
        
        count=0
        for i in range(0,row):
            for j in range(0,col):
                if visited[i][j]==0 and grid[i][j]=='1':
                    self.dfs(grid,i,j,visited)
                    count += 1
        return count
        
    def dfs(self, grid, i, j, visited):
        if i < 0 or i >= len(grid):
            return
        if j < 0 or j >= len(grid[0]):
            return
        if grid[i][j]=='0' or visited[i][j]==1:
            return
        visited[i][j] = 1 #遍历过的地方置为1
        #上下左右四个方向遍历
        self.dfs(grid, i-1, j, visited)
        self.dfs(grid, i+1, j, visited)
        self.dfs(grid, i, j-1, visited)
        self.dfs(grid, i, j+1, visited)
posted @ 2019-03-17 16:57  wemo  阅读(183)  评论(0)    收藏  举报