N-Queensの問題は、プログラミングインタビューや学術環境でよく遭遇する古典的な課題です。課題は、2人の女王が互いに脅迫しないように、n×nチェスボードにn女王を置くことです。これは、同じ行、列、または対角線を共有できる2人の女王がいないことを意味します。
整数nを与えられた場合、n-queensパズルのすべての明確なソリューションを返します。任意の順序で回答を返すことができます。
各ソリューションには、n-queensの配置の明確なボード構成が含まれています。ここで、「q」は女王と「」を示します。空のスペースを示します。
n = 4の場合、可能な解決策は次のとおりです。
[
[".Q..", // Solution 1
"...Q",
"Q...",
"..Q."],
["..Q.", // Solution 2
"Q...",
"...Q",
".Q.."]
]
n-queensの問題を解決するための最も一般的なアプローチは、バックトラッキングを使用することです。バックトラッキングアルゴリズムは、候補者をソリューションに徐々に構築し、候補者が有効なソリューションにつながる可能性があると判断するとすぐに候補者を放棄します。
ステップ:
Initialize the Board :空のn×nボードから始めます。Place the Queen :女王を最初の列に置いて、その後の女王を置いてください。Check Validity :各女王の配置について、すでに配置されているクイーンと競合するかどうかを確認してください。Backtrack if Necessary :女王を配置すると解決策がない場合は、女王(バックトラック)を取り外して、次の位置を試してください。Store the Solution :有効な構成が見つかった場合(n Queensが配置)、ボード構成を保存します。Repeatが、すべての可能な構成が試されるまでこのプロセスを続けます。ボードは、各セルが「Q」または「」のいずれかである2Dリストを使用して表現できます。
競合を効率的にチェックすることが重要です。
Row Check :他の女王が同じ行にないことを保証します。Column Check :他の女王が同じ列にないことを確認します。Diagonal Check :他の女王が同じ対角線上にないことを保証します。セットを使用して占有された柱と対角線を追跡すると、競合チェックプロセスをスピードアップできます。
より大きなnの問題を最適化するために、ソリューションはStreadPoolexecutorと同時性を活用します。
このソリューションは、無料の金曜日の課題の1つであり、ダウンタイム中にソリューションを作成するためのランダムなインタビューの課題を選択しました。
pip install wolfsoftware.NQueens
usage: nqueens [-h] [-v] [-V] [board_size]
See solutions to the NQueens problem.
positional arguments:
board_size Size of the board (default is 8 for the Eight Queens puzzle) (default: 8)
flags:
-h, --help Show this help message and exit
-v, --verbose Enable verbose output - show the actual boards (default: False)
-V, --version Show program's version number and exit.
The N Queens puzzle is the problem of placing N chess queens on an N×N chessboard so that no two queens threaten each other.
N-Queensの問題は、再帰、バックトラッキング、および最適化技術を深く理解する必要がある魅力的で複雑な課題です。マルチスレッドを活用することにより、この実装は、特定のボードサイズのすべての可能なソリューションを効率的に見つけます。 N-QUENSの問題を理解して実装することは、問題解決スキルとアルゴリズム思考を改善するための貴重な演習です。