パズル研TOP > パズル研製作プログラム > nクイーン問題解答プログラム

 

nクイーン問題解答プログラム

nクイーン問題というのは歴史の古いパズル「エイトクイーン」を拡張したものです。詳しくはパズル紹介のページでどうぞ。

このプログラムは、nクイーン問題の全解を求めるプログラムです。
どういうふうに解を求めているかというと・・・・・・

  1. 1からnまでの数字を並べる順列を生成する。
    i番目の数字をjとすると、座標(i,j)にクイーンが置かれていることを意味する。

これで縦・横にクイーンの重複がない配置を得ることができます。そして次に、

  1. 斜めに重複していないかチェックする。

これで全ての条件をクリアする解に絞ることができます。
ただし、全ての順列を一旦生成してからふるいにかける方式を取ると、nが大きいときに無駄な探索の数が膨大になるので、再帰的に順列を生成する過程で2.のチェックを逐次行うことで探索の効率化を図っています。

●スクリーンショット(クリックすると大きな画像が出ます)

スクリーンショット1        スクリーンショット2

プログラムとソースのダウンロード

  • このプログラムは現在のところGUIプログラムではありません。コマンドプロンプトかUNIXなどのコンソールで使用してください。
  • ソースはC++で書かれています。
    GCC、Borland C++ Compiler、Visual C++で正常にコンパイルできます。
●更新履歴
Version 1.24 ユニーク解の抽出機能を追加、バグフィックス
1.21 BCCでのコンパイル不良のバグを直すついでにC++で書いてみる
1.2 バックトラックを組み込んで高速化
1.1 コマンドラインからクイーンの個数を指定できるように変更
1.0 エイトクイーン解答プログラム完成。ただしコマンドラインからのクイーンの個数指定はできない
 

nクイーン問題解答プログラム < パズル研製作プログラム < パズル研TOP