]> git.sesse.net Git - stockfish/blobdiff - src/search.cpp
Stop search if only 1 legal move
[stockfish] / src / search.cpp
index 76653ff99bf5fed6963d13b88a47ea202c17f4a2..19ebc5e6eeeb79ef8ce12a3835372b1581edae95 100644 (file)
@@ -44,6 +44,7 @@ namespace Search {
   Color RootColor;
   Time::point SearchTime;
   StateStackPtr SetupStates;
+  MovesVectPtr SetupMoves;
 }
 
 using std::string;
@@ -441,11 +442,17 @@ namespace {
             if (Time::now() - SearchTime > (TimeMgr.available_time() * 62) / 100)
                 stop = true;
 
+            bool recapture =   pos.is_capture(RootMoves[0].pv[0])
+                            && pos.captured_piece_type()
+                            && SetupMoves->size()
+                            && to_sq(SetupMoves->back()) == to_sq(RootMoves[0].pv[0]);
+
             // Stop search early if one move seems to be much better than others
             if (    depth >= 12
                 && !stop
                 &&  PVSize == 1
-                && (   (bestMoveNeverChanged &&  pos.captured_piece_type())
+                && (   (bestMoveNeverChanged && recapture)
+                    || RootMoves.size() == 1
                     || Time::now() - SearchTime > (TimeMgr.available_time() * 40) / 100))
             {
                 Value rBeta = bestValue - 2 * PawnValueMg;