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

31
latin.c
View File

@ -964,13 +964,30 @@ static int latin_solver_top(struct latin_solver *solver, int maxdiff,
got_result:
#ifdef STANDALONE_SOLVER
if (solver_show_working)
printf("%*s%s found\n",
solver_recurse_depth*4, "",
diff == diff_impossible ? "no solution (impossible)" :
diff == diff_unfinished ? "no solution (unfinished)" :
diff == diff_ambiguous ? "multiple solutions" :
"one solution");
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",
solver_recurse_depth*4, "",
diff == diff_impossible ? "no solution (impossible)" :
diff == diff_unfinished ? "no solution (unfinished)" :
"multiple solutions");
}
}
#endif
latin_solver_free_scratch(scratch);