latin.c: dump every solution found during recursion.

In solver_show_working mode, we were logging all the deductions,
guesswork and backtracking, but not printing out the actual solution
(if any) reached at the end of each branch of the tree.
This commit is contained in:
Simon Tatham
2018-02-26 20:49:14 +00:00
parent 43b9eb1472
commit 2270ee116d

23
latin.c
View File

@ -964,13 +964,30 @@ static int latin_solver_top(struct latin_solver *solver, int maxdiff,
got_result: got_result:
#ifdef STANDALONE_SOLVER #ifdef STANDALONE_SOLVER
if (solver_show_working) if (solver_show_working) {
if (diff != diff_impossible && diff != diff_unfinished &&
diff != diff_ambiguous) {
int x, y;
printf("%*sone solution found:\n", solver_recurse_depth*4, "");
for (y = 0; y < solver->o; y++) {
printf("%*s", solver_recurse_depth*4+1, "");
for (x = 0; x < solver->o; x++) {
int val = solver->grid[y*solver->o+x];
assert(val);
printf(" %s", solver->names[val-1]);
}
printf("\n");
}
} else {
printf("%*s%s found\n", printf("%*s%s found\n",
solver_recurse_depth*4, "", solver_recurse_depth*4, "",
diff == diff_impossible ? "no solution (impossible)" : diff == diff_impossible ? "no solution (impossible)" :
diff == diff_unfinished ? "no solution (unfinished)" : diff == diff_unfinished ? "no solution (unfinished)" :
diff == diff_ambiguous ? "multiple solutions" : "multiple solutions");
"one solution"); }
}
#endif #endif
latin_solver_free_scratch(scratch); latin_solver_free_scratch(scratch);