在Python中的2D矩阵中找到不同岛的数量

假设我们有一个二进制矩阵。我们必须计算其中的岛屿数量。岛屿是一个被水包围的地方,是通过水平或垂直连接相邻的土地而形成的。我们可以假设网格的所有四个边缘都被水包围。

假设网格就像-

11000
11000
00100
00011

有三个岛屿。

为了解决这个问题,我们将遵循以下步骤-

  • 将有两种方法,一种将用于计算称为numIslands()和的岛的数量makeWater()。该makeWater()会像-

  • 如果网格中的行数为0,则返回0

  • n =行数,m:=列数,ans:= 0

  • 对于i,范围为0至n – 1

    • 如果grid [i,j] = 1,则ans:= ans + 1

    • makeWater(i,j,n,m,grid)

    • 对于0到m范围内的j

    • makeWater()将采取指数I,J,ROW和COL计数n和m和网格

    • 如果i <0或j <0或i> = n或j> = m,则从此方法返回

    • 如果grid [i,j] = 0,则返回,否则返回grid [i,j]:= 0

    • 调用makeWater(i + 1,j,n,m,grid)

    • 调用makeWater(i,j + 1,n,m,grid)

    示例

    让我们看下面的实现以更好地理解-

    class Solution(object):
       def numIslands(self, grid):
          """
          :type grid: List[List[str]]
          :rtype: int
          """
          if len(grid) == 0:
             return 0
          n= len(grid)
          m = len(grid[0])
          ans = 0
          for i in range(n):
             for j in range(m):
                if grid[i][j] == "1":
                   ans+=1
                self.make_water(i,j,n,m,grid)
             return ans
       def make_water(self,i,j,n,m,grid):
          if i<0 or j<0 or i>=n or j>=m:
             return
          if grid[i][j] == "0":
             return
          else:
             grid[i][j]="0"
          self.make_water(i+1,j,n,m,grid)
          self.make_water(i,j+1,n,m,grid)
          self.make_water(i-1,j,n,m,grid)
          self.make_water(i,j-1,n,m,grid)

    输入值

    [["1","1","0","0","0"],
    ["1","1","0","0","0"],
    ["0","0","1","0","0"],
    ["0","0","0","1","1"]]

    输出结果

    3
    猜你喜欢