aboutsummaryrefslogtreecommitdiff
path: root/singles.c
diff options
context:
space:
mode:
authorSimon Tatham <anakin@pobox.com>2010-01-12 23:32:23 +0000
committerSimon Tatham <anakin@pobox.com>2010-01-12 23:32:23 +0000
commitdeb5e1e5b4049301678074ef9c6b7b89ce24684d (patch)
tree2eed6b11c53d93f194f028b72b4b7802b92b2f96 /singles.c
parentb3af872f3c9e4547ea27d914a463bb5e63f6fd07 (diff)
downloadpuzzles-deb5e1e5b4049301678074ef9c6b7b89ce24684d.zip
puzzles-deb5e1e5b4049301678074ef9c6b7b89ce24684d.tar.gz
puzzles-deb5e1e5b4049301678074ef9c6b7b89ce24684d.tar.bz2
puzzles-deb5e1e5b4049301678074ef9c6b7b89ce24684d.tar.xz
Couple of small changes to Singles from James H which missed my main
commit: tweak the grid generation a bit, and fix the use of the Solve function on a grid containing errors. [originally from svn r8835]
Diffstat (limited to 'singles.c')
-rw-r--r--singles.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/singles.c b/singles.c
index ec5db73..ef7730d 100644
--- a/singles.c
+++ b/singles.c
@@ -1164,11 +1164,11 @@ static char *solve_game(game_state *state, game_state *currstate,
game_state *solved = dup_game(currstate);
char *move = NULL;
- if (solve_specific(solved, DIFF_ANY, 0)) goto solved;
+ if (solve_specific(solved, DIFF_ANY, 0) > 0) goto solved;
free_game(solved);
solved = dup_game(state);
- if (solve_specific(solved, DIFF_ANY, 0)) goto solved;
+ if (solve_specific(solved, DIFF_ANY, 0) > 0) goto solved;
free_game(solved);
*error = "Unable to solve puzzle.";
@@ -1256,7 +1256,7 @@ static int best_black_col(game_state *state, random_state *rs, int *scratch,
for (i = 0; i < o; i++) {
j = scratch[i] + 1;
if (rownums[y*o + j-1] == 1 && colnums[x*o + j-1] == 1)
- return j;
+ goto found;
}
/* Then try each number in turn returning the first one that's
@@ -1264,10 +1264,16 @@ static int best_black_col(game_state *state, random_state *rs, int *scratch,
for (i = 0; i < o; i++) {
j = scratch[i] + 1;
if (rownums[y*o + j-1] != 0 || colnums[x*o + j-1] != 0)
- return j;
+ goto found;
}
assert(!"unable to place number under black cell.");
return 0;
+
+found:
+ /* Update column and row counts assuming this number will be placed. */
+ rownums[y*o + j-1] += 1;
+ colnums[x*o + j-1] += 1;
+ return j;
}
static char *new_game_desc(game_params *params, random_state *rs,