mirror of
git://git.tartarus.org/simon/puzzles.git
synced 2025-04-21 16:05:44 -07:00
Bridges solver fix: in map_update_possibles, collect values from
maxh/maxv for squares between islands as well as on islands. [originally from svn r9542]
This commit is contained in:
20
bridges.c
20
bridges.c
@ -881,17 +881,20 @@ static void map_update_possibles(game_state *state)
|
|||||||
/* Unset possible flags until we find an island. */
|
/* Unset possible flags until we find an island. */
|
||||||
for (y = 0; y < state->h; y++) {
|
for (y = 0; y < state->h; y++) {
|
||||||
is_s = IDX(state, gridi, idx);
|
is_s = IDX(state, gridi, idx);
|
||||||
if (is_s) break;
|
if (is_s) {
|
||||||
|
maxb = is_s->count;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
IDX(state, possv, idx) = 0;
|
IDX(state, possv, idx) = 0;
|
||||||
idx += w;
|
idx += w;
|
||||||
}
|
}
|
||||||
for (; y < state->h; y++) {
|
for (; y < state->h; y++) {
|
||||||
|
maxb = min(maxb, IDX(state, maxv, idx));
|
||||||
is_f = IDX(state, gridi, idx);
|
is_f = IDX(state, gridi, idx);
|
||||||
if (is_f) {
|
if (is_f) {
|
||||||
assert(is_s);
|
assert(is_s);
|
||||||
maxb = IDX(state, maxv, idx);
|
np = min(maxb, is_f->count);
|
||||||
np = min(maxb, min(is_s->count, is_f->count));
|
|
||||||
|
|
||||||
if (s != -1) {
|
if (s != -1) {
|
||||||
for (i = s; i <= e; i++) {
|
for (i = s; i <= e; i++) {
|
||||||
@ -901,6 +904,7 @@ static void map_update_possibles(game_state *state)
|
|||||||
s = y+1;
|
s = y+1;
|
||||||
bl = 0;
|
bl = 0;
|
||||||
is_s = is_f;
|
is_s = is_f;
|
||||||
|
maxb = is_s->count;
|
||||||
} else {
|
} else {
|
||||||
e = y;
|
e = y;
|
||||||
if (IDX(state,grid,idx) & (G_LINEH|G_NOLINEV)) bl = 1;
|
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;
|
bl = 0;
|
||||||
for (x = 0; x < state->w; x++) {
|
for (x = 0; x < state->w; x++) {
|
||||||
is_s = IDX(state, gridi, idx);
|
is_s = IDX(state, gridi, idx);
|
||||||
if (is_s) break;
|
if (is_s) {
|
||||||
|
maxb = is_s->count;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
IDX(state, possh, idx) = 0;
|
IDX(state, possh, idx) = 0;
|
||||||
idx += 1;
|
idx += 1;
|
||||||
}
|
}
|
||||||
for (; x < state->w; x++) {
|
for (; x < state->w; x++) {
|
||||||
|
maxb = min(maxb, IDX(state, maxh, idx));
|
||||||
is_f = IDX(state, gridi, idx);
|
is_f = IDX(state, gridi, idx);
|
||||||
if (is_f) {
|
if (is_f) {
|
||||||
assert(is_s);
|
assert(is_s);
|
||||||
maxb = IDX(state, maxh, idx);
|
np = min(maxb, is_f->count);
|
||||||
np = min(maxb, min(is_s->count, is_f->count));
|
|
||||||
|
|
||||||
if (s != -1) {
|
if (s != -1) {
|
||||||
for (i = s; i <= e; i++) {
|
for (i = s; i <= e; i++) {
|
||||||
@ -941,6 +948,7 @@ static void map_update_possibles(game_state *state)
|
|||||||
s = x+1;
|
s = x+1;
|
||||||
bl = 0;
|
bl = 0;
|
||||||
is_s = is_f;
|
is_s = is_f;
|
||||||
|
maxb = is_s->count;
|
||||||
} else {
|
} else {
|
||||||
e = x;
|
e = x;
|
||||||
if (IDX(state,grid,idx) & (G_LINEV|G_NOLINEH)) bl = 1;
|
if (IDX(state,grid,idx) & (G_LINEV|G_NOLINEH)) bl = 1;
|
||||||
|
Reference in New Issue
Block a user