From: Simon Tatham Date: Mon, 26 Feb 2018 20:49:14 +0000 (+0000) Subject: latin.c: dump every solution found during recursion. X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ian/git?a=commitdiff_plain;h=2270ee116d2c3ee406cb8c65ac58051664107c42;p=sgt-puzzles.git 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. --- diff --git a/latin.c b/latin.c index 50fae3c..716064c 100644 --- a/latin.c +++ b/latin.c @@ -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);