zoukankan      html  css  js  c++  java
  • 200. 岛屿的个数

    问题描述

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

    示例 1:

    输入:
    11110
    11010
    11000
    00000
    
    输出: 1
    

    示例 2:

    输入:
    11000
    11000
    00100
    00011
    
    输出: 3
    

    解决方案

    import collections
    
    
    class Solution(object):
        def is_valid(self, grid, r, c):
            m, n = len(grid), len(grid[0])
            if r < 0 or c < 0 or r >= m or c >= n:
                return False
            return True
    
        def numIsLandsBFS(self, grid):
            if not grid or not grid[0]:
                return 0
            m, n = len(grid), len(grid[0])
            count = 0
            for i in range(m):
                for j in range(n):
                    if grid[i][j] == "1":
                        self.bfs(grid, i, j)
                        count += 1
            return count
    
        def bfs(self, grid, r, c):
            queue = collections.deque()
            queue.append((r, c))
            grid[r][c] = "0"
            while queue:
                directions = [(0, 1), (0, -1), (-1, 0), (1, 0)] # 方向键
                r, c = queue.popleft()
                for d in directions:
                    nr, nc = r + d[0], c + d[1]
                    if self.is_valid(grid, nr, nc) and grid[nr][nc] == '1':
                        queue.append((nr, nc))
                        grid[nr][nc] = '0'
    
    
    if __name__ == "__main__":
        s = Solution()
        my_sea = [["1", "1", "1", "1", "0"], ["1", "1", "1", "1", "0"], ["1", "1", "1", "1", "0"],
                  ["1", "1", "1", "1", "0"]]
        num = s.numIsLandsBFS(my_sea)
        print(num)
    
    
  • 相关阅读:
    操作系统的发展史
    多线程的些许理解(平台x86,具体考虑linux,windows)
    C++ 11 智能指针
    C++虚函数和纯虚函数
    Qt之excel 操作使用说明
    查找之二叉排序树
    图的一些总结
    树的一些总结
    直接插入排序
    冒泡和选择排序
  • 原文地址:https://www.cnblogs.com/huang-yc/p/10703665.html
Copyright © 2011-2022 走看看