W
e
l
c
o
m
e
: )

leecode 200岛屿数量 深度搜索

题目

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

示例 1:

输入:
11110
11010
11000
00000

输出: 1
示例 2:

输入:
11000
11000
00100
00011

输出: 3

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/number-of-islands

思路

深搜

先设出一个标记数组mark,遍历原数组,如果该位置原数组为1标记数组为0,则次位置还没有被搜索过。传入DFS数组,开始上下左右的搜索。每搜索到一个1就标记mark数组。每次遍历一次原数组,就出一个岛屿。

广搜

代码

class Solution:
    def numIslands(self, grid: List[List[str]]) -> int:
        if len(grid)==0:
            return 0
        m,n=len(grid),len(grid[0])
        count=0
        #mark=[(i,j) for i in range(m) for j in range(n) if grid[i][j]==0]
        mark=[['0']*n for i in range(m)]
        for i in range(m):
            for j in range(n):
                if mark[i][j]=='0' and grid[i][j]=='1':
                    count += 1
                    self.DFS(mark,grid,i,j)
        return count
    def DFS(self,mark,grid,x,y):
        mark[x][y]=1
        dpx=[-1,1,0,0]
        dpy = [0, 0, 1, -1]
        for i in range(4):
            newx=x+dpx[i]
            newy=y+dpy[i]
            if newx<0 or newx>=len(mark) or newy<0 or newy>=len(mark[0]):
                continue
            if mark[newx][newy]=='0' and grid[newx][newy]=='1':
                self.DFS(mark, grid, newx, newy)
posted @ 2020-04-15 16:15  rmxob  阅读(123)  评论(0)    收藏  举报