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

Pythonの2Dマトリックスで個別の島の数を見つける


バイナリ行列があるとします。その中の島の数を数える必要があります。島とは、水に囲まれ、隣接する土地を水平または垂直につなぐことで形成される場所です。グリッドの4つのエッジすべてがすべて水に囲まれていると想定できます。

グリッドが-

のようであると仮定します
1 1 0 0 0
1 1 0 0 0
0 0 1 0 0
0 0 0 1 1
3つの島があります。

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

  • 2つのメソッドがあります。1つはnumIslands()およびmakeWater()と呼ばれる島の数をカウントするために使用されます。 makeWater()は次のようになります-

  • グリッドの行数が0の場合、0を返します

  • n =行数およびm:=列数、およびans:=0

  • 0からn–1の範囲のiの場合

    • 0からmの範囲のjの場合

      • grid [i、j] =1の場合、ans:=ans + 1

      • makeWater(i、j、n、m、グリッド)

  • makeWater()は、インデックスi、j、行と列のカウントnとm、およびグリッドを取得します

  • i<0またはj<0またはi>=nまたはj>=mの場合、このメソッドから戻る

  • grid [i、j] =0の場合は戻り、それ以外の場合はgrid [i、j]:=0

    を作成します。
  • makeWater(i + 1、j、n、m、grid)を呼び出す

  • 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

  1. リスト内の最小数を見つけるPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −リストが表示されます。リストで利用可能な最小の番号を表示する必要があります ここでは、リストを並べ替えて最小の要素を取得するか、組み込みのmin()関数を使用して最小の要素を取得できます。 次に、以下の実装の概念を観察しましょう- 例 list1 = [101, 120, 104, 145, 99] # sorting using built-in function list1.sort() print("Smallest element is:", list1[0]) 出力 Smal

  2. 行列の転置を見つける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