ref: 2270ee116d2c3ee406cb8c65ac58051664107c42
parent: 43b9eb1472d2a82e5369815511a9ae6681a61a08
author: Simon Tatham <anakin@pobox.com>
date: Mon Feb 26 15:49:14 EST 2018
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.
--- a/latin.c
+++ b/latin.c
@@ -964,13 +964,30 @@
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);