zoukankan      html  css  js  c++  java
  • Leetcode练习(Python):深度优先搜索类:第200题:岛屿数量:给你一个由'1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。 岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。 此外,你可以假设该网格的四条边均被水包围。

    题目:

    岛屿数量:给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。  岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。  此外,你可以假设该网格的四条边均被水包围。  

    示例 1:

    输入:
    11110
    11010
    11000
    00000
    输出: 1
    示例 2:

    输入:
    11000
    11000
    00100
    00011
    输出: 3
    解释: 每座岛屿只能由水平和/或竖直方向上相邻的陆地连接而成。

    思路:

    类似机器人走迷宫。本题使用的沉岛的思想。

    程序:

    class Solution:
        def numIslands(self, grid: List[List[str]]) -> int:
            if not grid:
                return 0
            result = 0
            for index1 in range(len(grid)):
                for index2 in range(len(grid[0])):
                    if grid[index1][index2] == '1':
                        self.auxiliary(grid, index1, index2)
                        result += 1
            return result 
        def auxiliary(self, grid: List[List[str]], index1: int, index2: int):
            if index1 < 0 or index2 < 0 or index1 >= len(grid) or index2 >= len(grid[0]) or grid[index1][index2] != '1':
                return 
            grid[index1][index2] = '0'
            self.auxiliary(grid, index1 - 1, index2)
            self.auxiliary(grid, index1 + 1, index2)
            self.auxiliary(grid, index1, index2 - 1)
            self.auxiliary(grid, index1, index2 + 1)
    

      

  • 相关阅读:
    P3180 [HAOI2016]地图
    P2787 语文1(chin1)- 理理思维
    P2221 [HAOI2012]高速公路
    P4137 Rmq Problem / mex
    P3746 [六省联考2017]组合数问题
    P2461 [SDOI2008]递归数列
    P3715 [BJOI2017]魔法咒语
    P3195 [HNOI2008]玩具装箱TOY
    Linux下的strerror是否线程安全?
    bash/shell的字符串trim实现
  • 原文地址:https://www.cnblogs.com/zhuozige/p/12963983.html
Copyright © 2011-2022 走看看