X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/puzzles/blobdiff_plain/83c0438ffd33d0f6a608dceec3c889d65fb74c28..e1f345b65cbe56dbeb624e88a665691ac5287a16:/puzzles.h diff --git a/puzzles.h b/puzzles.h index d9cb745..f67da1c 100644 --- a/puzzles.h +++ b/puzzles.h @@ -278,8 +278,24 @@ void draw_rect_outline(drawing *dr, int x, int y, int w, int h, /* * dsf.c */ +int *snew_dsf(int size); + +void print_dsf(int *dsf, int size); + +/* Return the canonical element of the equivalence class containing element + * val. If 'inverse' is non-NULL, this function will put into it a flag + * indicating whether the canonical element is inverse to val. */ +int edsf_canonify(int *dsf, int val, int *inverse); int dsf_canonify(int *dsf, int val); + +/* Allow the caller to specify that two elements should be in the same + * equivalence class. If 'inverse' is TRUE, the elements are actually opposite + * to one another in some sense. This function will fail an assertion if the + * caller gives it self-contradictory data, ie if two elements are claimed to + * be both opposite and non-opposite. */ +void edsf_merge(int *dsf, int v1, int v2, int inverse); void dsf_merge(int *dsf, int v1, int v2); +void dsf_init(int *dsf, int len); /* * version.c