00001
00002
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "Container/union-find.h"
00021 #include "Utility/pre-post-conditions.h"
00022
00023 #include <iostream>
00024 #include <vector>
00025
00026 int main() {
00027 using namespace std;
00028
00029 GrAL::union_find<int> uf;
00030
00031 for(int i = 0; i < 10; ++i)
00032 REQUIRE_ALWAYS(i == uf(i), "i=" << i << " uf(i)=" << uf(i), 1);
00033
00034 uf.join(0,1);
00035 uf.join(2,3);
00036 uf.join(1,3);
00037
00038 uf.join(1,3);
00039
00040 uf.join(4,5);
00041 uf.join(5,6);
00042 uf.join(7,8);
00043 uf.join(5,8);
00044
00045 uf.join(4,8);
00046
00047 for(int i = 0; i < 10; ++i)
00048 cout << "uf(" << i << ") = " << uf(i) << " size = " << uf.size(i) << "\n";
00049
00050 for(GrAL::union_find<int>::const_iterator s = uf.begin(); s != uf.end(); ++s)
00051 cout << "set " << (*s).second << " has " << uf.size((*s).second) << " members\n";
00052
00053 GrAL::union_find<int> uf2;
00054 int N = ( 1 << 10);
00055 cout << "Testing union-find for " << N << " items ... " << endl;
00056 for(int k = 2; k < N; k *= 2) {
00057 for(int i = 0; i < N/k; ++i)
00058 uf2.join(k*i, k*i + k/2);
00059 cout << k << ": " << uf2.size() << " sets" << endl;
00060 }
00061 vector<int> setof(N);
00062 for(int i = 0; i < N; ++i)
00063 setof[i] = uf2(i);
00064 }
00065