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)
- 範囲0からc_len-1のcの場合、do
- matrix [r、c]が1と同じ場合、
- 合計:=0
- dfs(matrix、r、c)
- max_island:=max_islandの最大値、合計
- matrix [r、c]が1と同じ場合、
理解を深めるために、次の実装を見てみましょう-
例
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
-
行列の転置を見つける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
-
配列内の最大の要素を見つけるPythonプログラム
この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 入力として配列を指定すると、配列内で最大の要素を見つける必要があります。 アプローチ maxを最初の要素として初期化します。 この後、指定された配列を2番目の要素から最後までトラバースします。 トラバースされたすべての要素について、現在のmaxの値と比較します maxより大きい場合、maxが更新されます。 それ以外の場合、ステートメントはを超えます 以下の実装を見てみましょう- 例 def largest(arr,n): #maximal element