aboutsummaryrefslogtreecommitdiff
path: root/divvy.c
diff options
context:
space:
mode:
Diffstat (limited to 'divvy.c')
-rw-r--r--divvy.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/divvy.c b/divvy.c
index 021956f..91379e4 100644
--- a/divvy.c
+++ b/divvy.c
@@ -262,7 +262,7 @@ static bool addremcommon(int w, int h, int x, int y, int *own, int val)
*/
int *divvy_rectangle_attempt(int w, int h, int k, random_state *rs)
{
- int *order, *queue, *tmp, *own, *sizes, *addable, *retdsf;
+ int *order, *queue, *tmp, *own, *sizes, *addable, *retdsf, *tmpdsf;
bool *removable;
int wh = w*h;
int i, j, n, x, y, qhead, qtail;
@@ -277,6 +277,7 @@ int *divvy_rectangle_attempt(int w, int h, int k, random_state *rs)
queue = snewn(n, int);
addable = snewn(wh*4, int);
removable = snewn(wh, bool);
+ retdsf = tmpdsf = NULL;
/*
* Permute the grid squares into a random order, which will be
@@ -619,18 +620,18 @@ int *divvy_rectangle_attempt(int w, int h, int k, random_state *rs)
* the ominoes really are k-ominoes and we haven't
* accidentally split one into two disconnected pieces.
*/
- dsf_init(tmp, wh);
+ tmpdsf = snew_dsf(wh);
for (y = 0; y < h; y++)
for (x = 0; x+1 < w; x++)
if (own[y*w+x] == own[y*w+(x+1)])
- dsf_merge(tmp, y*w+x, y*w+(x+1));
+ dsf_merge(tmpdsf, y*w+x, y*w+(x+1));
for (x = 0; x < w; x++)
for (y = 0; y+1 < h; y++)
if (own[y*w+x] == own[(y+1)*w+x])
- dsf_merge(tmp, y*w+x, (y+1)*w+x);
+ dsf_merge(tmpdsf, y*w+x, (y+1)*w+x);
for (i = 0; i < wh; i++) {
j = dsf_canonify(retdsf, i);
- assert(dsf_canonify(tmp, j) == dsf_canonify(tmp, i));
+ assert(dsf_canonify(tmpdsf, j) == dsf_canonify(tmpdsf, i));
}
cleanup:
@@ -640,6 +641,7 @@ int *divvy_rectangle_attempt(int w, int h, int k, random_state *rs)
*/
sfree(order);
sfree(tmp);
+ sfree(tmpdsf);
sfree(own);
sfree(sizes);
sfree(queue);