diff options
Diffstat (limited to 'unequal.c')
| -rw-r--r-- | unequal.c | 30 |
1 files changed, 16 insertions, 14 deletions
@@ -890,13 +890,14 @@ static int solver_state(game_state *state, int maxdiff) struct latin_solver solver; int diff; - latin_solver_alloc(&solver, state->nums, state->order); - - diff = latin_solver_main(&solver, maxdiff, - DIFF_LATIN, DIFF_SET, DIFF_EXTREME, - DIFF_EXTREME, DIFF_RECURSIVE, - unequal_solvers, unequal_valid, ctx, - clone_ctx, free_ctx); + if (!latin_solver_alloc(&solver, state->nums, state->order)) + diff = latin_solver_main(&solver, maxdiff, + DIFF_LATIN, DIFF_SET, DIFF_EXTREME, + DIFF_EXTREME, DIFF_RECURSIVE, + unequal_solvers, unequal_valid, ctx, + clone_ctx, free_ctx); + else + diff = DIFF_IMPOSSIBLE; memcpy(state->hints, solver.cube, state->order*state->order*state->order); @@ -2256,13 +2257,14 @@ static int solve(game_params *p, char *desc, int debug) solver_show_working = debug; game_debug(state); - latin_solver_alloc(&solver, state->nums, state->order); - - diff = latin_solver_main(&solver, DIFF_RECURSIVE, - DIFF_LATIN, DIFF_SET, DIFF_EXTREME, - DIFF_EXTREME, DIFF_RECURSIVE, - unequal_solvers, unequal_valid, ctx, - clone_ctx, free_ctx); + if (latin_solver_alloc(&solver, state->nums, state->order)) + diff = latin_solver_main(&solver, DIFF_RECURSIVE, + DIFF_LATIN, DIFF_SET, DIFF_EXTREME, + DIFF_EXTREME, DIFF_RECURSIVE, + unequal_solvers, unequal_valid, ctx, + clone_ctx, free_ctx); + else + diff = DIFF_IMPOSSIBLE; free_ctx(ctx); |