ボードがPythonで有効なNクイーンソリューションであるかどうかを確認するプログラム
チェス盤を表すnxn行列があるとします。 1と0がいくつかあります。ここで、1はクイーンを表し、0は空のセルを表します。ボードがN-Queenパズルの有効な解決策であるかどうかを確認する必要があります。私たちが知っているように、ボードは、2人のクイーンが互いに攻撃していない有効な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)を挿入します
- matrix [i、j]が1の場合、
- 0からnの範囲の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
-
Pythonで二分木が完成しているかどうかをチェックするプログラム
二分木があるとしましょう。これが完全な二分木であるかどうかを確認する必要があります。完全な二分木でわかっているように、レベルはノードで埋められますが、最後のレベルのノードと最後のレベルのすべてのノードが可能な限り左にある可能性があります。 したがって、入力が次のような場合 その場合、出力はTrueになります これを解決するために、次の手順に従います- q:=両端キュー qの最後にルートを挿入 フラグ:=False qが空でない間、実行します temp:=qの左側から削除した後の要素 tempがnullの場合、 フラグ:=True
-
与えられたグラフが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()を定義します。これはソースを取ります