Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- class UF
- {
- public:
- UF(const unsigned int n)
- {
- vertexCount = n;
- vertices = new unsigned int[n];
- for (auto i = 0; i < n; ++i)
- {
- vertices[i] = i;
- }
- }
- ~UF()
- {
- delete[] vertices;
- }
- bool connected(const unsigned int i, const unsigned int j) const
- {
- return (vertices[i] == vertices[j]);
- }
- void connect(const unsigned int i, const unsigned int j)
- {
- if (vertices[i] != vertices[j])
- {
- for (auto k = 0; k < vertexCount; ++k)
- {
- if (vertices[k] == vertices[i])
- {
- vertices[k] = vertices[j];
- }
- }
- }
- }
- private:
- unsigned int vertexCount;
- unsigned int* vertices;
- };
- void connectWrap(UF& uf, const unsigned int i, const unsigned int j)
- {
- std::cout << "Connecting: " << i << ", " << j << '\n';
- uf.connect(i, j);
- }
- void connectedWrap(const UF& uf, const unsigned int i, const unsigned int j)
- {
- std::cout << "Connected: " << uf.connected(i, j) << '\n';
- }
- void main()
- {
- const unsigned vertexCount = 10;
- UF uf(vertexCount);
- connectWrap(uf, 1, 2);
- connectWrap(uf, 2, 3);
- connectWrap(uf,4, 5);
- connectWrap(uf, 6, 7);
- connectWrap(uf, 7, 8);
- connectWrap(uf, 8, 9);
- connectWrap(uf, 9, 0);
- connectedWrap(uf, 1, 2); //true
- connectedWrap(uf, 2, 3); //true
- connectedWrap(uf, 3, 4); //false
- connectedWrap(uf, 5, 6); //false
- connectedWrap(uf, 7, 0); //true
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement