mirror of
git://git.tartarus.org/simon/puzzles.git
synced 2025-04-20 23:51:29 -07:00
New puzzle: `Slant', picked from the Japanese-language section of
nikoli.co.jp (which has quite a few puzzles that they don't seem to have bothered to translate into English). Minor structural change: the disjoint set forest code used in the Net solver has come in handy again, so I've moved it out into its own module dsf.c. [originally from svn r6155]
This commit is contained in:
28
dsf.c
Normal file
28
dsf.c
Normal file
@ -0,0 +1,28 @@
|
||||
/*
|
||||
* dsf.c: two small functions to handle a disjoint set forest,
|
||||
* which is a data structure useful in any solver which has to
|
||||
* worry about avoiding closed loops.
|
||||
*/
|
||||
|
||||
int dsf_canonify(int *dsf, int val)
|
||||
{
|
||||
int v2 = val;
|
||||
|
||||
while (dsf[val] != val)
|
||||
val = dsf[val];
|
||||
|
||||
while (v2 != val) {
|
||||
int tmp = dsf[v2];
|
||||
dsf[v2] = val;
|
||||
v2 = tmp;
|
||||
}
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
void dsf_merge(int *dsf, int v1, int v2)
|
||||
{
|
||||
v1 = dsf_canonify(dsf, v1);
|
||||
v2 = dsf_canonify(dsf, v2);
|
||||
dsf[v2] = v1;
|
||||
}
|
Reference in New Issue
Block a user