Python程式:查詢矩陣中最大島嶼的面積


假設我們有一個二進位制矩陣。其中1代表陸地,0代表水,島嶼是由相鄰的1組成的,其周長被水包圍。我們可以假設矩陣的邊緣被水包圍。我們需要找到矩陣中最大島嶼的面積。

因此,如果輸入如下所示:

0011111
0000000
0111100
0011000
0000011
0000010

則輸出將為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
  • 對於範圍為 0 到 r_len - 1 的 r:
    • 對於範圍為 0 到 c_len - 1 的 c:
      • 如果 matrix[r, c] 等於 1,則
        • total := 0
        • dfs(matrix, r, c)
        • max_island := max_island 和 total 之間的最大值
  • 返回 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

更新於:2020年11月19日

339 次瀏覽

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.