用 Python 编写程序,查找矩阵中最大岛屿的面积

pythonserver side programmingprogramming

假设我们有一个二进制矩阵。这里 1 代表陆地,0 代表水,岛屿是一组相邻的 1,其周边被水包围。我们可以假设矩阵的边缘被水包围。我们必须找到矩阵中最大岛屿的面积。

因此,如果输入如下

001111
0000000
011100
0011000
000001
0000001

则输出为 6。

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

  • 定义一个函数 dfs() 。这将获取矩阵、r、c
  • total := total + 1
  • matrix[r, c] := 0
  • 如果 r - 1 >= 0 且 matrix[r - 1, c] 与 1 相同,则
    • dfs(matrix, r - 1, c)
  • 如果 c - 1 >= 0 且 matrix[r, c - 1] 与 1 相同,则
    • dfs(matrix, r, c - 1)
  • 如果 r + 1 < r_len 且 matrix[r + 1, c] 等于 1,则
    • dfs(matrix, r + 1, c)
  • 如果 c + 1 < c_len 和 matrix[r, c + 1] 等于 1,则
    • dfs(matrix, r, c + 1)
  • 从主方法中,执行以下操作 −
  • r_len := 矩阵的行数
  • c_len := 矩阵的列数
  • max_island := 0
  • 对于 r 在 0 到 r_len - 1 范围内,执行
    • 对于 c 在 0 到 c_len - 1 范围内,执行
      • 如果 matrix[r, c] 等于 1,则
        • total := 0
        • dfs(matrix, r, c)
        • max_island := max_island 的最大值,总计
  • 返回 max_island

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

示例

class Solution:
   def solve(self, matrix):
      self.r_len = len(matrix)
      self.c_len = len(matrix[0])
      max_island = 0
      for r in range(self.r_len):
         for c in range(self.c_len):
            if matrix[r][c] == 1:
               self.total = 0
               self.dfs(matrix, r, c)
               max_island = max(max_island, self.total)
      return max_island
   def dfs(self, matrix, r, c):
      self.total += 1
      matrix[r][c] = 0
      if r - 1 >= 0 and matrix[r - 1][c] == 1:
         self.dfs(matrix, r - 1, c)
      if c - 1 >= 0 and matrix[r][c - 1] == 1:
         self.dfs(matrix, r, c - 1)
      if r + 1 < self.r_len and matrix[r + 1][c] == 1:
         self.dfs(matrix, r + 1, c)
      if c + 1 < self.c_len and matrix[r][c + 1] == 1:
         self.dfs(matrix, r, c + 1)
ob = Solution()
matrix = [ [0, 0, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 1, 0, 0], [0, 0, 1, 1, 0, 0, 0], [0, 0, 0, 0, 0, 1, 1], [0, 0, 0, 0, 0, 1, 0] ]
print(ob.solve(matrix))

输入

matrix = [
[0, 0, 1, 1, 1, 1, 1],
[0, 0, 0, 0, 0, 0, 0],
[0, 1, 1, 1, 1, 0, 0],
[0, 0, 1, 1, 0, 0, 0],
[0, 0, 0, 0, 0, 1, 1],
[0, 0, 0, 0, 0, 1, 0] ]

输出

6

相关文章


有用资源