Nクイーン問題
Nクイーン問題は、チェスの盤面 N×Nマスに N個のクイーンを、どの二つのクイーンも互いに利き筋に入らないように配置する組み合わせパズル、およびそれを解くためのアルゴリズム問題のことであり、制約充足問題(Constraint Satisfaction Problem, CSP)の代表的な例として知られ、バックトラッキング(後戻り)探索アルゴリズムの典型的な適用例としてコンピュータサイエンスで広く研究される問題のことです。
Nクイーン問題の概要とルール
Nクイーン問題は、8クイーン問題(N=8 の場合)の一般化であり、与えられた N の値に対して、クイーンの配置がルールの制約を満たす全ての手順を見つけ出すことを目標とします。
1. 問題の定義
N×Nのチェス盤にN個のクイーンを配置します。
2. クイーンの利き筋の制約
チェスにおけるクイーンの動きに基づき、以下のどの条件も満たしてはなりません。すなわち、どの二つのクイーンも互いに取り合える位置にあってはならないということです。
- 同一行(Row): どの二つのクイーンも同じ行に配置されてはならない。
- 同一列(Column): どの二つのクイーンも同じ列に配置されてはならない。
- 同一斜め(Diagonal): どの二つのクイーンも同じ対角線上に配置されてはならない。
N個のクイーンを配置する場合、同一行の制約があるため、通常は「各行に必ずクイーンを1つだけ配置する」という前提で問題を簡略化し、探索アルゴリズムの効率を高めます。
主な目的は、Nの値に対して、すべての有効な配置の総数(解の数)を求めたり、有効な配置のうちの一つを見つけたりすることです。
Nクイーン問題を解くアルゴリズム
Nクイーン問題の解法は、総当たり(ブルートフォース)探索を行うと計算量が爆発的に増大するため、効率的なバックトラッキング(後戻り)探索アルゴリズムが採用されます。
1. バックトラッキングの基本原理
バックトラッキングは、探索空間を効率的に剪定(せんてい)するための再帰的な探索アルゴリズムです。Nクイーン問題における手順は以下の通りです。
- クイーンの配置: 現在の行 r において、クイーンを配置可能な列 c を順に試します。
- 安全性の確認: クイーンを (r, c) の位置に置いた場合、既に配置されている他のクイーンと衝突しないか(同一列、同一斜め上にないか)を確認します。
- 成功と再帰: 衝突しない場合、そのクイーンを配置し、次の行 r+1 の探索を再帰的に呼び出します。
- 失敗と後戻り: 次の行 r+1 でクイーンを安全に配置できる場所が見つからなかった場合、または現在の位置 (r, c) が衝突する場合、現在のクイーンをその位置から取り除き(後戻り)、現在の行 r における次の列 c+1 を試します。
- 終了: 全てのクイーン(N 個)を配置できた場合、解が一つ見つかったとして記録します。すべての列を試した後、探索を終了します。
2. 安全性の数学的表現
座標 (r_1, c_1) に配置されたクイーンと、現在の探索位置 (r_2, c_2) の衝突判定は、以下の条件で確認できます。
- 同一列の制約: c_1 = c_2 でないこと。
- 同一斜めの制約: 絶対値を利用して、行の差と列の差が等しいかどうかで判断します。
![]()
でないこと。
Nクイーン問題の計算量と解の数
1. 計算量の比較
N 個のクイーンを配置する問題の総当たりで可能な配置の総数は、N 個のクイーンが行を区別しないとして ((N^2)!) / (N! * (N^2 – N)!)通りとなりますが、行を区別する場合、各行で N 通りの選択肢があるため N^N通りの配置が考えられます。
しかし、「各行に1つのクイーン」の制約を適用すると、可能な配置はN個のクイーンを N列に配置する組み合わせ、すなわち Nの階乗 N!通りに限定されます。
バックトラッキングアルゴリズムを用いると、早い段階で不可能な経路を剪定するため、実際の計算時間は $N!$ よりも大幅に効率的になります。
2. 解の数の例
Nが大きくなるにつれて解の数は急速に増加しますが、解が存在しない Nの値も存在します。
| N | 解の数 |
| 1 | 1 |
| 2 | 0 |
| 3 | 0 |
| 4 | 2 |
| 5 | 10 |
| 8 | 92 |
| 10 | 724 |
N=2および N=3の場合は、ルールを満たす配置が存在しないことが知られています。
関連用語
お問い合わせ
システム開発・アプリ開発に関するご相談がございましたら、APPSWINGBYまでお気軽にご連絡ください。
APPSWINGBYの
ソリューション
APPSWINGBYのセキュリティサービスについて、詳しくは以下のメニューからお進みください。
システム開発
クラウドネイティブ技術とアジャイル手法を駆使し、市場投入スピード(Time-to-Market)を最大化。「進化し続けるアプリケーション」を開発します。初期リリースを最速化し、拡張性と柔軟性を備えた、ビジネスの成長に追従できるアプリケーションを開発します。
DX・AI戦略支援
「何から手を付けるべきか分からない」「AIを導入したいが、費用対効果が見えない」といった経営課題に対し、技術とビジネスの両面から解を導き出します。 絵に描いた餅で終わる戦略ではなく、エンジニアリングの実装能力に基づいた、「実現可能で、勝てる技術戦略」を策定します。
リファクタリング・リアーキテクチャ
「システムが古くて改修できない」「障害が頻発する」といった技術的負債を解消します。既存資産の徹底的な診断に基づき、コードのクリーン化(リファクタリング)や、クラウドへの移行(リアーキテクチャ)を行い、システムの寿命を延ばしコストを最適化します。

ご相談・お問い合わせはこちら
APPSWINGBYのミッションは、アプリでビジネスを加速し、
お客様とともにビジネスの成功と未来を形作ること。
私達は、ITテクノロジーを活用し、様々なサービスを提供することで、
より良い社会創りに貢献していきます。
T関する疑問等、小さなことでも遠慮なくお問合せください。3営業日以内にご返答致します。

ご相談・お問合せはこちら
APPSWINGBYのミッションは、アプリでビジネスを加速し、お客様とともにビジネスの成功と未来を形作ること。
私達は、ITテクノロジーを活用し、様々なサービスを提供することで、より良い社会創りに貢献していきます。
IT関する疑問等、小さなことでも遠慮なくお問合せください。3営業日以内にご返答させて頂きます。


