summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Bauer <mail@ulrich-bauer.org>2018-05-16 09:25:46 +0200
committerUlrich Bauer <mail@ulrich-bauer.org>2018-05-16 09:26:22 +0200
commite10038a0fbd1bf2f8c9eec129b2d523d95a4ad0f (patch)
treed42ddaf22abf044f5ac4d77f156297bd7a926934
parent7d662086064455d2b409d3b5651a7ce009b0a6d4 (diff)
simplify union-find
-rw-r--r--ripser.cpp19
1 files changed, 6 insertions, 13 deletions
diff --git a/ripser.cpp b/ripser.cpp
index 6bd725e..bd1a7db 100644
--- a/ripser.cpp
+++ b/ripser.cpp
@@ -252,23 +252,16 @@ public:
}
index_t find(index_t x) {
- index_t y = x, z = parent[y];
- while (z != y) {
- y = z;
- z = parent[y];
- }
- y = parent[x];
- while (z != y) {
- parent[x] = z;
- x = y;
- y = parent[x];
+ index_t y = x, z;
+ while ((z = parent[y]) != y) y = z;
+ while ((z = parent[x]) != y) {
+ parent[x] = y;
+ x = z;
}
return z;
}
void link(index_t x, index_t y) {
- x = find(x);
- y = find(y);
- if (x == y) return;
+ if ((x = find(x)) == (y = find(y))) return;
if (rank[x] > rank[y])
parent[y] = x;
else {