>>89
>王手の生成は、ある局面で生成できる手を片っ端から
>「手を進める→王手を確認→手を戻す」作業を繰り返して王手が掛かる手だけを
>残していく方法が簡単だとは思いますが、実際のところどうなんでしょうか?
私もそれが簡単で確実だと思います。
手を進めないで王手を調べるとしたら…
・駒毎に個別に処理を書き分けるのはやめて
212 010 000
1馬1 1金1 0桂0
212 111 000
000 000 101
ていう3×4の初期化された配列を用意して統一的に書く。桂歩香はその中で特殊処理。
・駒毎に利きの9×9配列を用意して各要素のビットに意味を持たせる。利きかなければ0とする。
第0ビット…成りでない利き
第1ビット…成りの利き
第2ビット…角飛馬龍香による飛び利き
・手番毎の利きの9×9配列を用意してその手番の駒の利きのビットORを取っておく。
・駒毎に空き王手になっている駒を覚えておく。なければNULL。
・王手をかけている駒を覚えておく。なければNULL。
という前処理をしておいてからというのはどうでしょう?
攻め側、守り側どちらも使えそうですが、詰将棋はまだ考えていないんで役に立つデータかわかりません。
一応、私のプログラムが持っている情報です。