Simplest fix is to just remove the 'n' parameter from
solve_island_subgroup, replacing it with a robust island_countbridges.
git-svn-id: svn://svn.tartarus.org/sgt/puzzles@9547
cda61777-01e9-0310-a592-
d414129be87e
-static int solve_island_subgroup(struct island *is, int direction, int n)
+static int solve_island_subgroup(struct island *is, int direction)
{
struct island *is_join;
int nislands, *dsf = is->state->solver->dsf;
{
struct island *is_join;
int nislands, *dsf = is->state->solver->dsf;
debug(("..checking subgroups.\n"));
/* if is isn't full, return 0. */
debug(("..checking subgroups.\n"));
/* if is isn't full, return 0. */
+ if (island_countbridges(is) < is->count) {
debug(("...orig island (%d,%d) not full.\n", is->x, is->y));
return 0;
}
debug(("...orig island (%d,%d) not full.\n", is->x, is->y));
return 0;
}
/* we have a full subgroup that isn't the whole set.
* This isn't allowed. */
debug(("island at (%d,%d) makes full subgroup, disallowing.\n",
/* we have a full subgroup that isn't the whole set.
* This isn't allowed. */
debug(("island at (%d,%d) makes full subgroup, disallowing.\n",
return 1;
} else {
debug(("...has finished puzzle.\n"));
return 1;
} else {
debug(("...has finished puzzle.\n"));
solve_join(is, i, n, 0);
map_update_possibles(is->state);
solve_join(is, i, n, 0);
map_update_possibles(is->state);
- if (solve_island_subgroup(is, i, n) ||
+ if (solve_island_subgroup(is, i) ||
solve_island_impossible(is->state)) {
maxb = n-1;
debug(("island at (%d,%d) d(%d,%d) new max of %d bridges:\n",
solve_island_impossible(is->state)) {
maxb = n-1;
debug(("island at (%d,%d) d(%d,%d) new max of %d bridges:\n",
}
map_update_possibles(is->state);
}
map_update_possibles(is->state);
- if (solve_island_subgroup(is, -1, n))
+ if (solve_island_subgroup(is, -1))
got = 1;
for (j = 0; j < is->adj.npoints; j++)
got = 1;
for (j = 0; j < is->adj.npoints; j++)