diff options
Diffstat (limited to 'src/solvers/h48/solve.h')
| -rw-r--r-- | src/solvers/h48/solve.h | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/src/solvers/h48/solve.h b/src/solvers/h48/solve.h index dcec5a4..fc7631f 100644 --- a/src/solvers/h48/solve.h +++ b/src/solvers/h48/solve.h | |||
| @@ -176,10 +176,16 @@ solve_h48_dfs(dfsarg_solve_h48_t arg[static 1]) | |||
| 176 | ulbi = arg->use_lb_inverse; | 176 | ulbi = arg->use_lb_inverse; |
| 177 | 177 | ||
| 178 | ret = 0; | 178 | ret = 0; |
| 179 | mm_normal = allowednextmove_mask(arg->solution_moves->nmoves, | 179 | mm_normal = arg->movemask_normal; |
| 180 | arg->solution_moves->moves) & arg->movemask_normal; | 180 | if (arg->solution_moves->nmoves > 0) { |
| 181 | mm_inverse = allowednextmove_mask(arg->solution_moves->npremoves, | 181 | m = arg->solution_moves->moves[arg->solution_moves->nmoves-1]; |
| 182 | arg->solution_moves->premoves) & arg->movemask_inverse; | 182 | mm_normal &= allowedmask[movebase(m)]; |
| 183 | } | ||
| 184 | mm_inverse = arg->movemask_inverse; | ||
| 185 | if (arg->solution_moves->npremoves > 0) { | ||
| 186 | m = arg->solution_moves->premoves[arg->solution_moves->npremoves-1]; | ||
| 187 | mm_inverse &= allowedmask[movebase(m)]; | ||
| 188 | } | ||
| 183 | if (popcount_u32(mm_normal) <= popcount_u32(mm_inverse)) { | 189 | if (popcount_u32(mm_normal) <= popcount_u32(mm_inverse)) { |
| 184 | arg->solution_moves->nmoves++; | 190 | arg->solution_moves->nmoves++; |
| 185 | for (m = 0; m < 18; m++) { | 191 | for (m = 0; m < 18; m++) { |
| @@ -299,7 +305,12 @@ solve_h48_maketasks( | |||
| 299 | return NISSY_OK; | 305 | return NISSY_OK; |
| 300 | } | 306 | } |
| 301 | 307 | ||
| 302 | mm = allowednextmove_mask(maketasks_arg->nmoves, maketasks_arg->moves); | 308 | if (maketasks_arg->nmoves == 0) { |
| 309 | mm = MM_ALLMOVES; | ||
| 310 | } else { | ||
| 311 | m = maketasks_arg->moves[maketasks_arg->nmoves-1]; | ||
| 312 | mm = allowedmask[movebase(m)]; | ||
| 313 | } | ||
| 303 | 314 | ||
| 304 | maketasks_arg->nmoves++; | 315 | maketasks_arg->nmoves++; |
| 305 | backup_cube = maketasks_arg->cube; | 316 | backup_cube = maketasks_arg->cube; |
