Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonの行列で最大の島の領域を見つけるプログラム


バイナリ行列があるとします。ここで、1は土地を表し、0は水を表します。また、島は、周囲が水に囲まれている隣接する1のグループです。マトリックスのエッジは水に囲まれていると想定できます。マトリックス内で最大の島の面積を見つける必要があります。

したがって、入力が次のような場合

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になります。

これを解決するには、次の手順に従います-

  • 関数dfs()を定義します。これは行列、r、cを取ります
  • 合計:=合計+ 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
  • dfs(matrix、r + 1、c)
  • c + 1
  • dfs(matrix、r、c + 1)
  • メインの方法から、次の手順を実行します-
  • r_len:=行列の行数
  • c_len:=行列の列数
  • max_island:=0
  • 0からr_len-1の範囲のrの場合、do
    • 範囲0からc_len-1のcの場合、do
      • matrix [r、c]が1と同じ場合、
        • 合計:=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

    1. 行列の転置を見つけるPythonプログラム

      この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 行列が与えられた場合、転置を同じ行列に格納して表示する必要があります。 行列の転置は、行を列に、列を行に変更することで得られます。つまり、A行列の転置はA[i][j]をA[j][i]に変更することで得られます。 以下に示す実装を見てみましょう- 例 N = 4 def transpose(A):    for i in range(N):       for j in range(i+1, N):     &nbs

    2. 配列内の最大の要素を見つけるPythonプログラム

      この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 入力として配列を指定すると、配列内で最大の要素を見つける必要があります。 アプローチ maxを最初の要素として初期化します。 この後、指定された配列を2番目の要素から最後までトラバースします。 トラバースされたすべての要素について、現在のmaxの値と比較します maxより大きい場合、maxが更新されます。 それ以外の場合、ステートメントはを超えます 以下の実装を見てみましょう- 例 def largest(arr,n):    #maximal element