Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- vector <bool> visit, color;
- vector <vector <int> > ady;
- bool sePuedeBicolorear;
- void DFS(int n)
- {
- visit[n] = true;
- for(auto i:ady[n])
- {
- if(!visit[i])
- {
- ///La siguiente línea asigna el opuesto del color de n
- color[i] = !color[n];
- DFS(i);
- }
- else
- {
- ///Si llegué acá, es porque el vecino
- ///ya fue visitado antes
- if(color[i] == color[n])
- {
- ///Tiene el mismo color que mi
- ///nodo actual. Entonces no se puede
- sePuedeBicolorear = false;
- return;
- }
- }
- }
- }
- int main()
- {
- ///Leo el grafo
- ///Asumimos que es conexo y bidireccional
- sePuedeBicolorear = true;
- color[1] = 0;
- DFS(1);
- if(sePuedeBicolorear == true)
- {
- cout << "Se puede bicolorear" << endl;
- for(int i=1; i<=cantNodos; i++)
- cout << i << ": " << color[i] << endl;
- }
- else
- {
- cout << "No se puede bicolorear" << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement