|
アルファベータ法 と同じ処理を行うが、次の手番をコールするときに、
盤面を白黒反転、α値、β値をマイナスにして交換して自分自身をコールする。
オセロ盤のデータ構造にビットボードを用いた場合などのように、盤面の反転にコストが必要なければ、
デメリットがなく、ソースが簡潔になる。
int negaAlpha(uint64 black, uint64 white, int alpha, int beta)
{
if( 末端ノード )
return eval(black, white);
for(m = すべての黒の着手について) {
着手を実行;
int ev = alphaBeta(white, black, -beta, -alpha); // 盤面を白黒反転、αβをマイナス反転
if( ev > alpha) alpha = ev;
着手を元に戻す;
if( alpha >= beta ) return alpha; // αβカット
}
return alpha;
}
このページへのトラックバックURL: http://vivi.dyndns.org/wtb/266
1,897 page views,
page owner : びびすけ
2007/05/26 08:34 modified by びびすけ
( page views in recent 7 days)
|