Advertisement
GastonFontenla

Bicoloreo con DFS

Aug 12th, 2019
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.17 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. vector <bool> visit, color;
  6. vector <vector <int> > ady;
  7. bool sePuedeBicolorear;
  8.  
  9. void DFS(int n)
  10. {
  11.     visit[n] = true;
  12.     for(auto i:ady[n])
  13.     {
  14.         if(!visit[i])
  15.         {
  16.             ///La siguiente línea asigna el opuesto del color de n
  17.             color[i] = !color[n];
  18.             DFS(i);
  19.         }
  20.         else
  21.         {
  22.             ///Si llegué acá, es porque el vecino
  23.             ///ya fue visitado antes
  24.             if(color[i] == color[n])
  25.             {
  26.                 ///Tiene el mismo color que mi
  27.                 ///nodo actual. Entonces no se puede
  28.                 sePuedeBicolorear = false;
  29.                 return;
  30.             }
  31.         }
  32.     }
  33. }
  34.  
  35. int main()
  36. {
  37.     ///Leo el grafo
  38.     ///Asumimos que es conexo y bidireccional
  39.     sePuedeBicolorear = true;
  40.     color[1] = 0;
  41.     DFS(1);
  42.    
  43.     if(sePuedeBicolorear == true)
  44.     {
  45.         cout << "Se puede bicolorear" << endl;
  46.         for(int i=1; i<=cantNodos; i++)
  47.             cout << i << ": " << color[i] << endl;
  48.     }
  49.     else
  50.     {
  51.         cout << "No se puede bicolorear" << endl;
  52.     }
  53.    
  54.     return 0;
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement