N-Queen問題2

別に高速に解くことを目的としてないので練習がてらbitboardを用いた実装を行おうと思う。Bitboardというのはコンピュータチェスでよく使われているテクニックというかデータ構造。最近ではコンピュータ将棋でも使われている。名前の通り、ゲームの盤面をビット情報で表したデータ構造。盤面のデータ構造として他には、一次元配列を使ったデータ構造がある。

何が良いのかというと、チェスや将棋の場合、指し手を生成するのに駒の移動可能先=駒の利きを常に調べたりしなければならいのだが、これがbitboardを使うと論理演算だけで高速かつ楽に求められるというわけ。詳しくは以下参照。

chessprogramming - Bitboards http://chessprogramming.wikispaces.com/Bitboards

最終目標としてコンピュータ将棋を作成する予定なのでそれも兼ねてbitboardを用いてNQueen問題のプログラムを作成します。ということはつまり9-Queenになるのか?w

namespace NQueen
{
/// <summary>
///  bitboardクラス
/// </summary>
	partial class Bitboard
	{
		/// <summary>
		/// bitboardのデータ構造
                /// p[]はそれぞれ9x9の盤面を3つに分割した時のそれぞれの状態を表す
        /// ある位置に駒が存在すれば1、なければ0
		/// </summary>
		private uint[] p = new uint[] { 0, 0, 0 };
		public uint[] p { get; set; }
	}
}

とりあえずこんな感じでクラスを宣言してみる。他にいろいろ実装しなきゃならないのでめんどい。///

がよく分かってないんだけどこんなんでいいのかな。