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

各セルがPythonで最も近い0からマンハッタン距離を保持する行列を生成するプログラム


バイナリ行列があるとします。同じ行列を見つける必要がありますが、各セルの値は、最も近い0までのマンハッタン距離になります。行列には少なくとも1つの0が存在すると想定できます。

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

1 0 1
1 0 1
1 1 0

その場合、出力は次のようになります

1 0 1
1 0 1
2 1 0

左下のセルだけが2から最も近い0までの距離を持っているからです。

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

  • m:=行列の行サイズ、n:=行列の列サイズ
  • 0からmの範囲のyについては、
    • 0からnの範囲のxについては、
      • matrix [y、x]がゼロ以外の場合、
        • matrix [y、x]:=無限大
  • 0からmの範囲のyについては、
    • 0からnの範囲のxについては、
      • yがゼロ以外の場合、
        • matrix [y、x] =matrix [y、x]とmatrix [y-1、x]+1の最小値
      • xがゼロ以外の場合、
        • matrix [y、x] =matrix [y、x]とmatrix [y、x --1]+1の最小値
  • m-1から0の範囲のyの場合、1ずつ減らします。
    • 範囲n-1から0のxの場合、1ずつ減らします。
      • y + 1
      • matrix [y、x] =matrix [y、x]とmatrix [y + 1、x]+1の最小値
    • x + 1
    • matrix [y、x] =matrix [y、x]とmatrix [y、x + 1]+1の最小値
  • リターンマトリックス
  • 理解を深めるために、次の実装を見てみましょう-

    import math
    class Solution:
       def solve(self, matrix):
          m, n = len(matrix), len(matrix[0])
          for y in range(m):
             for x in range(n):
                if matrix[y][x]:
                   matrix[y][x] = math.inf
          for y in range(m):
             for x in range(n):
                if y:
                   matrix[y][x] = min(matrix[y][x], matrix[y - 1][x] + 1)
                if x:
                   matrix[y][x] = min(matrix[y][x], matrix[y][x - 1] + 1)
          for y in range(m - 1, -1, -1):
             for x in range(n - 1, -1, -1):
                if y + 1 < m:
                   matrix[y][x] = min(matrix[y][x], matrix[y + 1][x] + 1)
                if x + 1 < n:
                   matrix[y][x] = min(matrix[y][x], matrix[y][x + 1] + 1)
          return matrix
    ob = Solution()
    matrix = [ [1, 0, 1], [1, 0, 1], [1, 1, 0] ]
    print(ob.solve(matrix))
    >

    入力

    [[1, 0, 1],
    [1, 0, 1],
    [1, 1, 0] ]

    出力

    [[1, 0, 1], [1, 0, 1], [2, 1, 0]]

    1. Pythonで次のセルマトリックス状態の次の状態を見つけるプログラム?

      1が生細胞を意味し、0が死細胞を意味する2Dバイナリ行列があるとします。セルの隣接セルは、そのすぐ近くの水平、垂直、および対角線のセルです。これらのルールを使用して、マトリックスの次の状態を見つける必要があります 2つまたは3つの生きている隣人がいる生きている細胞は生きています。 隣接する細胞が3つある死んだ細胞は、生きた細胞になります。 他のすべての細胞は死にます。 したがって、入力が次のような場合 1 1 0 0 0 1 0 0 0 1 0 1 1 1 0 1 その場合、出力は

    2. 指定された文字列からすべての可能な有効なIDアドレスを生成するPythonプログラム

      文字列が与えられます。文字列には数字のみが含まれます。私たちのタスクは、考えられるすべての有効なIPアドレスの組み合わせを確認することです。 ここでは、最初に文字列の長さを確認してから、「。」で分割します。次に、「。」のさまざまな組み合わせを確認します。 例 Input : 255011123222 Its not a valid IP address. Input : 255011345890 Valid IP address is 255.011.123.222 アルゴリズム Step 1: First check the length of the string. Step 2: