diff options
| author | Simon Tatham <anakin@pobox.com> | 2010-01-12 23:32:23 +0000 |
|---|---|---|
| committer | Simon Tatham <anakin@pobox.com> | 2010-01-12 23:32:23 +0000 |
| commit | deb5e1e5b4049301678074ef9c6b7b89ce24684d (patch) | |
| tree | 2eed6b11c53d93f194f028b72b4b7802b92b2f96 | |
| parent | b3af872f3c9e4547ea27d914a463bb5e63f6fd07 (diff) | |
| download | puzzles-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]
| -rw-r--r-- | singles.c | 14 |
1 files changed, 10 insertions, 4 deletions
@@ -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, |