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

ボードがPythonで有効なNクイーンソリューションであるかどうかを確認するプログラム


チェス盤を表すnxn行列があるとします。 1と0がいくつかあります。ここで、1はクイーンを表し、0は空のセルを表します。ボードがN-Queenパズルの有効な解決策であるかどうかを確認する必要があります。私たちが知っているように、ボードは、2人のクイーンが互いに攻撃していない有効なNクイーンソリューションのソリューションです。

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

ボードがPythonで有効なNクイーンソリューションであるかどうかを確認するプログラム

その場合、出力はTrueになります

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

  • n:=行列の行数
  • rows:=新しいセット、cols:=新しいセット、diags:=新しいセット、rev_diags:=新しいセット
  • 0からnの範囲のiについては、
    • 0からnの範囲のjについては、
      • matrix [i、j]が1の場合、
        • 行にiを挿入
        • jを列に挿入
        • diagsに(i --j)を挿入します
        • rev_diagsに(i + j)を挿入します
  • 行のサイズ、列のサイズ、診断のサイズ、rev_diagsのサイズがnと同じ場合はtrueを返し、それ以外の場合はfalseを返します

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

class Solution:
   def solve(self, matrix):
      n = len(matrix)

      rows = set()
      cols = set()
      diags = set()
      rev_diags = set()

      for i in range(n):
         for j in range(n):
            if matrix[i][j]:
               rows.add(i)
               cols.add(j)
               diags.add(i - j)
               rev_diags.add(i + j)

      return len(rows) == len(cols) == len(diags) == len(rev_diags) == n

ob = Solution()
matrix = [
   [0, 0, 0, 1, 0],
   [0, 1, 0, 0, 0],
   [0, 0, 0, 0, 1],
   [0, 0, 1, 0, 0],
   [1, 0, 0, 0, 0]
]
print(ob.solve(matrix))

入力

matrix = [    
   [0, 0, 0, 1, 0],    
   [0, 1, 0, 0, 0],    
   [0, 0, 0, 0, 1],    
   [0, 0, 1, 0, 0],    
   [1, 0, 0, 0, 0]
]

出力

True

  1. Pythonで二分木が完成しているかどうかをチェックするプログラム

    二分木があるとしましょう。これが完全な二分木であるかどうかを確認する必要があります。完全な二分木でわかっているように、レベルはノードで埋められますが、最後のレベルのノードと最後のレベルのすべてのノードが可能な限り左にある可能性があります。 したがって、入力が次のような場合 その場合、出力はTrueになります これを解決するために、次の手順に従います- q:=両端キュー qの最後にルートを挿入 フラグ:=False qが空でない間、実行します temp:=qの左側から削除した後の要素 tempがnullの場合、 フラグ:=True

  2. 与えられたグラフがPythonで2部グラフであるかどうかをチェックするプログラム

    無向グラフが1つあるとすると、グラフが2部グラフであるかどうかを確認する必要があります。グラフのすべてのエッジ{u、v}がAに1つのノードuを持ち、Bに別のノードvを持つように、グラフのノードを2つのセットAとBに分割できる場合、グラフは2部グラフであることがわかります。 したがって、入力が次のような場合 次に、出力はTrueになり、[0,4]はセットAにあり、[1,2,3]はセットBにあり、すべてのエッジはAからAまたはBからBではなく、AからBまたはBからAになります。 。 これを解決するために、次の手順に従います- 関数dfs()を定義します。これはソースを取ります