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

Pythonを使用してバイナリ行列内の特別な位置の数を見つけるプログラム


次数mxnのバイナリ行列があるとすると、行列内の特別な位置の数を見つける必要があります。位置(i、j)は、mat [i、j] =1で、行iと列jの他のすべての要素が0の場合の特別な位置です。

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

1 0 0 0 0
0 0 1 0 0
0 0 0 1 1
0 1 0 0 0

その場合、出力は3になります。ここで、特別な位置は(0、0)、(1,2)、および(3,1)です。

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

  • 特別:=0

  • 0から行列の行数までの範囲のiについては、次のようにします

    • 行matrix[i]の1の数が1の場合、

      • numOfOne:=0

      • indexOfOne:=行列内の1の位置[i]

      • 0から行列の列サイズまでの範囲のjについては、次のようにします

        • matrix [j、indexOfOne]が1と同じ場合、

          • numOfOne:=numOfOne + 1

        • numOfOne> 1の場合、

          • ループから出てきます

      • numOfOneが1と同じ場合、

        • スペシャル:=スペシャル+ 1

  • スペシャルリターン

例(Python)

理解を深めるために、次の実装を見てみましょう-

def solve(matrix):
   special = 0
   for i in range(len(matrix)):
      if matrix[i].count(1) == 1:
         numOfOne = 0
         indexOfOne = matrix[i].index(1)
         for j in range(len(matrix)):
            if matrix[j][indexOfOne] == 1:
               numOfOne += 1
            if numOfOne > 1:
               break

         if numOfOne == 1:
            special += 1

   return special

matrix = [[1,0,0,0,0],
   [0,0,1,0,0],
   [0,0,0,1,1],
   [0,1,0,0,0]]
print(solve(matrix))

入力

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

出力

3

  1. Pythonを使用してバイナリグリッドを配置するための最小スワップを見つけるプログラム

    nxnのバイナリ行列があるとします。 1つのステップで、隣接する2つの行を選択し、それらを入れ替えるような操作を実行できます。行列の主対角線より上のすべてのノードが0になるように、必要な最小スワップの数をカウントする必要があります。そのような解決策がない場合は、-1を返します。 したがって、入力が次のような場合 0 1 0 0 1 1 1 0 0 -であるため、出力は2になります。 これを解決するには、次の手順に従います。 n:=行列の行数 m:=サイズnの配列を作成し、nで埋めます 0からn-1の範囲のiの

  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