From: simon Date: Thu, 31 May 2012 18:10:10 +0000 (+0000) Subject: Bridges solver fix: in map_update_possibles, collect values from X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/puzzles/commitdiff_plain/63e20fbe30306376edb2c0aadfc1ea386ebdb4e0 Bridges solver fix: in map_update_possibles, collect values from maxh/maxv for squares between islands as well as on islands. git-svn-id: svn://svn.tartarus.org/sgt/puzzles@9542 cda61777-01e9-0310-a592-d414129be87e --- diff --git a/bridges.c b/bridges.c index 6a677e3..794908d 100644 --- a/bridges.c +++ b/bridges.c @@ -881,17 +881,20 @@ static void map_update_possibles(game_state *state) /* Unset possible flags until we find an island. */ for (y = 0; y < state->h; y++) { is_s = IDX(state, gridi, idx); - if (is_s) break; + if (is_s) { + maxb = is_s->count; + break; + } IDX(state, possv, idx) = 0; idx += w; } for (; y < state->h; y++) { + maxb = min(maxb, IDX(state, maxv, idx)); is_f = IDX(state, gridi, idx); if (is_f) { assert(is_s); - maxb = IDX(state, maxv, idx); - np = min(maxb, min(is_s->count, is_f->count)); + np = min(maxb, is_f->count); if (s != -1) { for (i = s; i <= e; i++) { @@ -901,6 +904,7 @@ static void map_update_possibles(game_state *state) s = y+1; bl = 0; is_s = is_f; + maxb = is_s->count; } else { e = y; if (IDX(state,grid,idx) & (G_LINEH|G_NOLINEV)) bl = 1; @@ -921,17 +925,20 @@ static void map_update_possibles(game_state *state) bl = 0; for (x = 0; x < state->w; x++) { is_s = IDX(state, gridi, idx); - if (is_s) break; + if (is_s) { + maxb = is_s->count; + break; + } IDX(state, possh, idx) = 0; idx += 1; } for (; x < state->w; x++) { + maxb = min(maxb, IDX(state, maxh, idx)); is_f = IDX(state, gridi, idx); if (is_f) { assert(is_s); - maxb = IDX(state, maxh, idx); - np = min(maxb, min(is_s->count, is_f->count)); + np = min(maxb, is_f->count); if (s != -1) { for (i = s; i <= e; i++) { @@ -941,6 +948,7 @@ static void map_update_possibles(game_state *state) s = x+1; bl = 0; is_s = is_f; + maxb = is_s->count; } else { e = x; if (IDX(state,grid,idx) & (G_LINEV|G_NOLINEH)) bl = 1;