Advertisement
Guest User

Untitled

a guest
Dec 14th, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.02 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. // Definicja elementu listy sąsiedztwa
  6.  
  7. struct slistEl
  8. {
  9.   slistEl * next;                 // Następny element listy;
  10.   int v;                          // Wierzchołek docelowy
  11. };
  12.  
  13. int main()
  14. {
  15.   int n,m,i,u,v;
  16.   slistEl **graf, *p, *r;
  17.   int *CT;
  18.   bool *C;
  19.  
  20.   cin >> n >> m;                  // Odczytujemy liczbę wierzchołków i krawędzi grafu
  21.  
  22.   graf = new slistEl * [n];       // Tablica list sąsiedztwa
  23.   for(i = 0; i < n; i++) graf[i] = NULL;
  24.  
  25.   CT = new int [n];               // Tablica kolorów wierzchołków
  26.   C  = new bool [n];              // Tablica dostępności kolorów
  27.  
  28.   // Odczytujemy krawędzie grafu
  29.  
  30.   for(i = 0; i < m; i++)
  31.   {
  32.     cin >> u >> v;                // Wierzchołki krawędzi
  33.     p = new slistEl;              // Tworzymy element listy
  34.     p->v = u;
  35.     p->next = graf[v];            // Element dołączamy do listy sąsiadów v
  36.     graf[v] = p;
  37.  
  38.     p = new slistEl;              // To samo dla krawędzi w drugą stronę
  39.     p->v = v;
  40.     p->next = graf[u];            // Element dołączamy do listy sąsiadów u
  41.     graf[u] = p;
  42.   }
  43.  
  44.   // Rozpoczynamy algorytm kolorowania grafu
  45.  
  46.   for(i = 1; i < n; i++) CT[i] = -1;
  47.  
  48.   CT[0] = 0;                      // Kolor pierwszego wierzchołka
  49.  
  50.   for(v = 1; v < n; v++)
  51.   {
  52.     for(i = 0; i < n; i++) C[i] = false;
  53.  
  54.     for(p = graf[v]; p; p = p->next) // Przeglądamy listę sąsiadów v
  55.       if(CT[p->v] > - 1) C[CT[p->v]] = true; // Kolor u zaznaczamy jako zajęty
  56.  
  57.     for(i = 0; C[i]; i++);        // Szukamy wolnego koloru
  58.     CT[v] = i;                    // Kolorujemy wierzchołek v
  59.   }
  60.  
  61.   // Wyświetlamy wyniki
  62.  
  63.   cout << endl;
  64.   for(v = 0; v < n; v++)
  65.     cout << "vertex " << v << " has color " << CT[v] << endl;
  66.  
  67.   // Usuwamy tablice dynamiczne
  68.  
  69.   for(v = 0; v < n; v++)
  70.   {
  71.     p = graf[v];
  72.     while(p)
  73.     {
  74.       r = p;
  75.       p = p->next;
  76.       delete r;
  77.     }
  78.   }
  79.  
  80.   delete [] graf;
  81.   delete [] CT;
  82.   delete [] C;
  83.  
  84.   return 0;
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement