GastonFontenla

Untitled

May 20th, 2018
279
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.79 KB | None | 0 0
  1. #include <iostream>
  2. #include <queue>
  3.  
  4. using namespace std;
  5.  
  6. #define INF (1 << 29)
  7. ///^^Eso es operaciones de bits. Es equivalente a hacer 1 * (2^29) -> dos elevado a la veintinueve, y todo eso multiplicado por 1.
  8.  
  9. vector <vector <int> > ady;
  10.  
  11. vector <int> BFS(int cantNodos, int nodoInicial)
  12. {
  13.     vector <int> dist(cantNodos+1, INF); ///Inicialmente todos tienen distancia INFINITO
  14.     queue <int> cola;
  15.    
  16.     ///Para empezar el algoritmo tengo que asignar distancia cero al nodoInicial, y ponerlo en cola
  17.     cola.push(nodoInicial);
  18.     dist[nodoInicial] = 0;
  19.    
  20.     while(cola.size()) ///Eso ejecuta siempre y cuando el tamaño sea distinto que cero
  21.     {
  22.         int nodo = cola.front(); ///Obtengo el elemento del principio
  23.         cola.pop(); ///Saco dicho elemento
  24.        
  25.         for(int i=0; i<ady[nodo].size(); i++)
  26.         {
  27.             int vecino = ady[nodo][i]; ///Nodo vecino a nodo
  28.             if(dist[nodo] + 1 < dist[vecino]) ///Si puedo mejorar la distancia
  29.             {
  30.                 dist[vecino] = dist[nodo] + 1; ///La mejoro
  31.                 cola.push(vecino); ///Y mando al vecino a la cola
  32.             }
  33.         }
  34.     }
  35.    
  36.     return dist; ///Devuelvo el vector con las distancias mínimas.
  37. }
  38.  
  39. int main()
  40. {
  41.     int N, M;
  42.     cin >> N >> M;
  43.    
  44.     ady = vector <vector <int> > (N+1);
  45.    
  46.     for(int i=0; i<M; i++)
  47.     {
  48.         int desde, hasta;
  49.         cin >> desde >> hasta;
  50.         ady[desde].push_back(hasta);
  51.         ady[hasta].push_back(desde);
  52.     }
  53.    
  54.     int nodoInicial;
  55.     cin >> nodoInicial;
  56.    
  57.     vector <int> distancias = BFS(N, nodoInicial);
  58.    
  59.     for(int i=1; i<=N; i++)
  60.     {
  61.         cout << "La menor distancia desde " << nodoInicial << " hasta " << i << " es : " << distancias[i] << endl;
  62.     }
  63.    
  64. }
Advertisement
Add Comment
Please, Sign In to add comment