struct island *is, *is_join;
/* Initialise dsf. */
- for (i = 0; i < wh; i++)
- dsf[i] = i;
+ dsf_init(dsf, wh);
/* For each island, find connected islands right or down
* and merge the dsf for the island squares as well as the
ret->solved = ret->completed = 0;
ret->solver = snew(struct solver_state);
- ret->solver->dsf = snewn(wh, int);
+ ret->solver->dsf = snew_dsf(wh);
ret->solver->tmpdsf = snewn(wh, int);
- for (i = 0; i < wh; i++) ret->solver->dsf[i] = i;
ret->solver->refcount = 1;
* classes) by finding the representative of each tile and
* setting equivalence[one]=the_other.
*/
- equivalence = snewn(w * h, int);
- for (i = 0; i < w*h; i++)
- equivalence[i] = i; /* initially all distinct */
+ equivalence = snew_dsf(w * h);
/*
* On a non-wrapping grid, we instantly know that all the edges
* Establish a disjoint set forest for tracking connectedness
* between grid points.
*/
- for (i = 0; i < W*H; i++)
- sc->connected[i] = i; /* initially all distinct */
+ dsf_init(sc->connected, W*H);
/*
* Establish a disjoint set forest for tracking which squares
* are known to slant in the same direction.
*/
- for (i = 0; i < w*h; i++)
- sc->equiv[i] = i; /* initially all distinct */
+ dsf_init(sc->equiv, w*h);
/*
* Clear the slashval array.
* Establish a disjoint set forest for tracking connectedness
* between grid points.
*/
- connected = snewn(W*H, int);
- for (i = 0; i < W*H; i++)
- connected[i] = i; /* initially all distinct */
+ connected = snew_dsf(W*H);
/*
* Prepare a list of the squares in the grid, and fill them in
* edge is visited at most twice.
*/
dsf = state->clues->tmpdsf;
- for (i = 0; i < W*H; i++)
- dsf[i] = i; /* initially all distinct */
+ dsf_init(dsf, W*H);
for (y = 0; y < h; y++)
for (x = 0; x < w; x++) {
int i1, i2;