本文整理汇总了C++中PositionStruct::NullMove方法的典型用法代码示例。如果您正苦于以下问题:C++ PositionStruct::NullMove方法的具体用法?C++ PositionStruct::NullMove怎么用?C++ PositionStruct::NullMove使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类PositionStruct
的用法示例。
在下文中一共展示了PositionStruct::NullMove方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: SearchCut
// 零窗口搜索
int SearchCut ( int depth, int beta, bool bNoNull = false ) {
int mv, vl;
int bmv = 0;
int bvl = - MATE_VALUE;
MoveSortStruct mvsort;
if ( TimeOut() ) { // 超时
return bvl;
}
// 无害裁剪
vl = HarmlessPruning ();
if ( vl > - MATE_VALUE ) {
return vl;
}
// 置换裁剪
vl = QueryValueInHashTable ( depth, beta - 1, beta );
if ( vl > - MATE_VALUE ) {
return vl;
}
// 达到极限深度
if ( depth <= 0 ) {
return SearchQuiesc ( beta - 1, beta );
}
// 空着裁剪 : 大切に
if ( !bNoNull && pos.checked == false && pos.NullOkay() ) {
pos.NullMove ();
vl = - SearchCut ( depth - NULL_DEPTH - 1, beta, true );
pos.UndoNullMove ();
if ( TimeOut() ) { // 超时
return bvl;
}
if ( vl >= beta ) {
if ( pos.NullSafe() ) {
InsertInfoToHashTable ( MAX(depth, NULL_DEPTH + 1), 0, vl, HASH_TYPE_BETA );
return vl;
}
else if ( SearchCut(depth - NULL_DEPTH, beta, true) >= beta ) {
InsertInfoToHashTable ( MAX(depth, NULL_DEPTH), 0, vl, HASH_TYPE_BETA );
return vl;
}
}
}
// 生成着法
int nMoveNum = mvsort.InitMove ();
Search.nNode ++;
// 大搜索
while ( (mv = mvsort.NextMove()) != 0 ) {
pos.MakeMove ( mv );
int newDepth = ( pos.checked || nMoveNum == 1 ) ? depth : depth - 1;
vl = - SearchCut ( newDepth, 1 - beta );
pos.UndoMakeMove ();
if ( TimeOut() ) { // 超时
return bvl;
}
// 边界
if ( vl > bvl ) {
bvl = vl;
bmv = mv;
if ( bvl >= beta ) {
Search.nBeta ++;
InsertInfoToHashTable ( depth, bmv, bvl, HASH_TYPE_BETA );
InsertHistoryTable ( bmv, depth );
return bvl;
}
}
}
// 最后
InsertInfoToHashTable ( depth, bmv, bvl, HASH_TYPE_ALPHA );
return bvl;
}