mirror of
git://git.tartarus.org/simon/puzzles.git
synced 2025-04-21 08:01:30 -07:00
Error highlighting bug in Bridges: when counting the number of extra
bridges that could go to an island, the game was not correctly accounting for existing bridges in all circumstances. (E.g. in 7x7m2:2a6a2a1g4a6c4i1a1h23c2b, connect the top right 1 to the 2 left of it, and the 6 left of that correctly lights up red. But now connect the 6 to the 6 below it, and it wrongly unlights again.) [originally from svn r8905]
This commit is contained in:
21
bridges.c
21
bridges.c
@ -542,9 +542,24 @@ static int island_impossible(struct island *is, int strict)
|
|||||||
assert(is_orth);
|
assert(is_orth);
|
||||||
|
|
||||||
ifree = is_orth->count - island_countbridges(is_orth);
|
ifree = is_orth->count - island_countbridges(is_orth);
|
||||||
if (ifree > 0)
|
if (ifree > 0) {
|
||||||
nsurrspc += min(ifree, MAXIMUM(is->state, dx,
|
/*
|
||||||
is->adj.points[i].x, is->adj.points[i].y));
|
* ifree is the number of bridges unfilled in the other
|
||||||
|
* island, which is clearly an upper bound on the number
|
||||||
|
* of extra bridges this island may run to it.
|
||||||
|
*
|
||||||
|
* Another upper bound is the number of bridges unfilled
|
||||||
|
* on the specific line between here and there. We must
|
||||||
|
* take the minimum of both.
|
||||||
|
*/
|
||||||
|
int bmax = MAXIMUM(is->state, dx,
|
||||||
|
is->adj.points[i].x, is->adj.points[i].y);
|
||||||
|
int bcurr = GRIDCOUNT(is->state,
|
||||||
|
is->adj.points[i].x, is->adj.points[i].y,
|
||||||
|
dx ? G_LINEH : G_LINEV);
|
||||||
|
assert(bcurr <= bmax);
|
||||||
|
nsurrspc += min(ifree, bmax - bcurr);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (nsurrspc < nspc) {
|
if (nsurrspc < nspc) {
|
||||||
debug(("island at (%d,%d) impossible: surr. islands %d spc, need %d.\n",
|
debug(("island at (%d,%d) impossible: surr. islands %d spc, need %d.\n",
|
||||||
|
Reference in New Issue
Block a user