GastonFontenla

Untitled

May 13th, 2018
263
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.25 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6. /**
  7. Input ejemplo:
  8. 6 3
  9. A B
  10. B E
  11. C D
  12. **/
  13.  
  14. ///Declaramos la lista de adyacencia como global,
  15. ///así podemos acceder a ella desde cualquier función
  16. vector <vector <char> > ady;
  17. vector <bool> visitados;
  18. vector <char> prov; ///Acá vamos guardando las ciudades que corresponden con cada ciudad
  19.  
  20. void DFS(char ciudad)
  21. {
  22.     visitados[ciudad - 'A'] = true;
  23.     prov.push_back(ciudad);
  24.  
  25.     for(int i=0; i<ady[ciudad-'A'].size(); i++)
  26.         if(visitados[ ady[ciudad-'A'][i] - 'A' ] == 0) ///Si no visitó la ciudad vecina,
  27.             DFS(ady[ciudad-'A'][i]);                    ///entonces la visito
  28. }
  29.  
  30. int main()
  31. {
  32.     int N, M; ///Cantidad de nodos (nodes), cantidad de aristas (edges)
  33.     char C1, C2; ///Variables para describir cada arista/ruta entre Ciudad_1 y Ciudad_2
  34.  
  35.     cin >> N >> M;
  36.  
  37.     ady.resize(N); ///Le damos tamaño a la lista de adyacencia
  38.  
  39.     for(int i=0; i<M; i++) ///Leemos cada una de las rutas
  40.     {
  41.         cin >> C1 >> C2;
  42.         ady[C1-'A'].push_back(C2);
  43.         ady[C2-'A'].push_back(C1);
  44.     }
  45.  
  46.     ///Hasta acá, lo que se hizo es la lectura del grafo.
  47.  
  48.     visitados = vector <bool> (N, false); ///El vector visitados es un vector de bool de tamaño N lleno de false (cero)
  49.  
  50.     int cantidadProvincias = 0;
  51.  
  52.     for(int i=0; i<N; i++) ///Este for itera por todas las ciudades
  53.     {
  54.         if(visitados[i] == 0) ///Si no visité a esta ciudad,
  55.         {
  56.             DFS('A'+i);       /// la visito
  57.             ///Luego de ejecutar el DFS para esa ciudad, en el vector prov me quedaron las ciudades recorridas
  58.             ///Es decir, las ciudades que van a formar parte de la provincia
  59.            
  60.             cantidadProvincias++; ///Ahora tenemos una provincia más
  61.  
  62.             cout << "Provincia " << cantidadProvincias << ": ";
  63.             for(int j=0; j<prov.size(); j++) ///Muestro en una línea las ciudades de esta provincia
  64.                 cout << prov[j] << " ";
  65.             cout << endl;
  66.  
  67.             prov.clear(); ///Dejo el vector de prov listo para la siguiente provincia a detectar
  68.         }
  69.     }
  70.  
  71.     cout << "Para dividir el pais necesitamos crear " << cantidadProvincias << " provincia/s" << endl;
  72.  
  73.     return 0;
  74. }
Advertisement
Add Comment
Please, Sign In to add comment