Advertisement
Guest User

Untitled

a guest
Jun 28th, 2017
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.38 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. class UF
  4. {
  5. public:
  6. UF(const unsigned int n)
  7. {
  8. vertexCount = n;
  9. vertices = new unsigned int[n];
  10.  
  11. for (auto i = 0; i < n; ++i)
  12. {
  13. vertices[i] = i;
  14. }
  15. }
  16.  
  17. ~UF()
  18. {
  19. delete[] vertices;
  20. }
  21.  
  22. bool connected(const unsigned int i, const unsigned int j) const
  23. {
  24. return (vertices[i] == vertices[j]);
  25. }
  26.  
  27. void connect(const unsigned int i, const unsigned int j)
  28. {
  29. if (vertices[i] != vertices[j])
  30. {
  31. for (auto k = 0; k < vertexCount; ++k)
  32. {
  33. if (vertices[k] == vertices[i])
  34. {
  35. vertices[k] = vertices[j];
  36. }
  37. }
  38. }
  39. }
  40.  
  41. private:
  42. unsigned int vertexCount;
  43. unsigned int* vertices;
  44. };
  45.  
  46. void connectWrap(UF& uf, const unsigned int i, const unsigned int j)
  47. {
  48. std::cout << "Connecting: " << i << ", " << j << '\n';
  49. uf.connect(i, j);
  50. }
  51.  
  52. void connectedWrap(const UF& uf, const unsigned int i, const unsigned int j)
  53. {
  54. std::cout << "Connected: " << uf.connected(i, j) << '\n';
  55. }
  56.  
  57. void main()
  58. {
  59. const unsigned vertexCount = 10;
  60. UF uf(vertexCount);
  61.  
  62. connectWrap(uf, 1, 2);
  63. connectWrap(uf, 2, 3);
  64.  
  65. connectWrap(uf,4, 5);
  66.  
  67. connectWrap(uf, 6, 7);
  68.  
  69. connectWrap(uf, 7, 8);
  70. connectWrap(uf, 8, 9);
  71. connectWrap(uf, 9, 0);
  72.  
  73. connectedWrap(uf, 1, 2); //true
  74. connectedWrap(uf, 2, 3); //true
  75. connectedWrap(uf, 3, 4); //false
  76. connectedWrap(uf, 5, 6); //false
  77. connectedWrap(uf, 7, 0); //true
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement