【力扣】200:岛屿数量 | BFS 广度优先搜索

题目描述

给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。

岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。

此外,你可以假设该网格的四条边均被水包围。

算法思路

审题,岛屿就是上下左右不与土地相连。

标准的BFS,直接遍历数组,当元素为1时开始上下左右扩散,遇到1就加入扩散列表,并将值修改为0,直到扩散列表为空。

这样整个遍历数组的过程中,所遇到的1的数量就是岛屿的数量。(因为以上下左右的扩散方式的,陆地是没办法扩散到其他岛屿上的)

class Solution:
    def numIslands(self, grid) -> int:
        if not grid:return 0
        tp=[]
        diretion=[(0,1),(0,-1),(1,0),(-1,0)]
        res=0
        m,n=len(grid),len(grid[0])
        for i in range(m):
            for j in range(n):
                if grid[i][j]=='1':
                    res+=1
                    grid[i][j]='0'
                    tp.append((i,j))
                    while tp:
                        for _ in range(len(tp)):
                            x,y=tp.pop(0)
                            for k in diretion:
                                x_n,y_n=x+k[0],y+k[1]
                                if 0<=x_n<m and 0<=y_n<n and grid[x_n][y_n]=='1':
                                    grid[x_n][y_n]='0'
                                    tp.append((x_n,y_n))

        return res

执行用时 :84 ms, 在所有 Python3 提交中击败了72.64%的用户
内存消耗 :14.2 MB, 在所有 Python3 提交中击败了6.67%的用户

你可能感兴趣的:(力扣日记)