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

pythonserver side programmingprogramming更新于 2025/10/15 18:52:17

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

假设网格就像 −

11000
11000
00100
00011

有三个岛屿。

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

  • 将有两种方法,一种方法用于计算岛屿数量,称为 numIslands() 和 makeWater()。makeWater() 将类似于 −

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

  • n = 行数和 m := 列数,并且 ans := 0

  • 对于 i 在 0 到 n 范围内 – 1

    • 对于 j,范围为 0 到 m

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

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

  • makeWater() 将采用索引 i、j、行数和列数 n 和 m 以及 grid

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

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

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

  • call 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

相关文章


有用资源