diff options
author | Ulrich Bauer <mail@ulrich-bauer.org> | 2018-05-16 09:25:46 +0200 |
---|---|---|
committer | Ulrich Bauer <mail@ulrich-bauer.org> | 2018-05-16 09:26:22 +0200 |
commit | e10038a0fbd1bf2f8c9eec129b2d523d95a4ad0f (patch) | |
tree | d42ddaf22abf044f5ac4d77f156297bd7a926934 | |
parent | 7d662086064455d2b409d3b5651a7ce009b0a6d4 (diff) |
simplify union-find
-rw-r--r-- | ripser.cpp | 19 |
1 files changed, 6 insertions, 13 deletions
@@ -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 { |