SVN commit 1217216 by coolo: mod3 solver: do not ignore valid moves, but give them very low priority BUG: 236445 M +14 -3 mod3solver.cpp --- trunk/KDE/kdegames/kpat/patsolve/mod3solver.cpp #1217215:1217216 @@ -182,6 +182,8 @@ int first_empty_pile = -1; bool foundone = false; + int firstfree[4] = { -1, -1, -1, -1}; + for (int i = 0; i < 32; ++i ) { if ( !Wlen[i] ) @@ -213,6 +215,15 @@ int current_row = i / 8; int row = j / 8; + if (!Wlen[j]) { + if (firstfree[row] < 0) + firstfree[row] = j; + + //fprintf(stderr, "firstfree %d %d %d\n", row, firstfree[row], j); + if (j != firstfree[row] && row < 4) + continue; + } + if ( Wlen[j] && RANK( *Wp[j] ) != row + 2 + ( Wlen[j] - 1 ) * 3 ) { //fprintf( stderr, "rank %d %d\n", i, j ); @@ -238,7 +249,7 @@ if ( Wlen[i] == Wlen[j] + 1 ) continue; } - mp->pri = 12 + 20 * Wlen[j] - current_row * 2; + mp->pri = qMin(119, 12 + 20 * Wlen[j] + current_row * 2 + RANK(*Wp[j]) * 5); mp->turn_index = -1; if ( i >= 24 && Wlen[i] == 1 && Wlen[deck] ) @@ -295,14 +306,14 @@ } } - if ( n == 0 && Wlen[deck] ) + if ( Wlen[deck] ) { // move mp->card_index = 0; mp->from = deck; mp->to = 0; mp->totype = W_Type; - mp->pri = 0; /* unused */ + mp->pri = -77; // last resort mp->turn_index = -1; mp->card_index = Wlen[deck]; n++;