The solver for N-Queen problem.
N-Queen問題を解くためのアルゴリズム実装です。
$ n-queen -solver {naive|bitboard|bigbitboard} -n <board_size>
ナイーブに配列を作って解く解法です。 とはいえ、全探索は無駄が多いのでバックトラック法で明らかに途中で足切りできる盤面は除くことで効率化をはかっています。
クイーンのありなしを1bitで表現することで配列で表現するのに比べて効率化できるのと、探索面でもビット演算を使うことで計算量の削減を図っています。 uint64で表現するために8x8までしか計算することができないのが難点です。
bitboardを拡張してuint64×4で16x16まで表現できるようにしています。8x8まではオーバーヘッドがありますが、それ以上のものも同じロジックで計算でき、ナイーブなモデルよりは効率よく計算することができます。