Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2017
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.62 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <ctime>
  4.  
  5. using namespace std;
  6.  
  7. const int N = 10;                 // Liczba elementów
  8.  
  9. int R[N];
  10.  
  11. // Łączy dwa podzbiory w jeden
  12. //----------------------------
  13. void Union(int x, int y)
  14. {
  15.   int rx,ry,i;
  16.  
  17.   rx = R[x];                      // Wyznaczamy reprezentanta zbioru zawierającego x
  18.   ry = R[y];                      // i reprezentanta zbioru zawierającego y
  19.   if(rx != ry)                    // Łączenie wymaga różnych zbiorów
  20.     for(i = 0; i < N; i++)        // Przeglądamy kolejne elementy tablicy R
  21.       if(R[i] == ry) R[i] = rx;   // i zastępujemy w nich reprezentanta ry przez rx
  22. }
  23.  
  24. // **********************
  25. // *** PROGRAM GŁÓWNY ***
  26. // **********************
  27. int main()
  28. {
  29.   int i,j,x,y,c;
  30.  
  31.   srand(time(NULL));              // Inicjujemy generator pseudolosowy
  32.   for(i = 0; i < N; i++)
  33.     R[i] = i;                     // Ustawiamy tablicę R
  34.   for(i = 0; i < N; i++)
  35.   {
  36.     x = rand() % N;               // Generujemy losowe x i y
  37.     y = rand() % N;
  38.     Union(x,y);                   // Łączymy zbiory
  39.   }
  40.  
  41.   c = 0;                          // Licznik podzbiorów w R
  42.  
  43.   // Wyświetlamy wyniki
  44.  
  45.   for(i = 0; i < N; i++)
  46.   {
  47.     if(R[i] == i) c++;            // Zliczamy reprezentantów
  48.     cout << i << " is in set " << R[i] << endl;
  49.   }
  50.  
  51.   cout << endl << "Number of sets = " << c << endl << endl;
  52.  
  53.   for(i = 0; i < N; i++)
  54.     if(R[i] == i)
  55.     {
  56.       cout << "Set " << i << " : ";
  57.       for(j = 0; j < N; j++)
  58.         if(R[j] == i) cout << j << " ";
  59.       cout << endl;
  60.     }
  61.   cout << endl;
  62.  
  63.   return 0;
  64.  
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement