GastonFontenla

BFS

May 20th, 2017
210
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.47 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <queue>
  4.  
  5. #define INF (1 << 29) ///(2^29)*1
  6.  
  7. using namespace std;
  8.  
  9. struct Grafo
  10. {
  11.     vector <vector <int> > adj; ///Lista de adyacencia
  12.     int nodos, aristas;
  13.     int inicial;
  14.  
  15.     void leer()
  16.     {
  17.         cin >> nodos >> aristas;
  18.         adj.resize(nodos+1);
  19.         ///adj = vector <vector <int> > (nodos+1, vector <int> (arista+1, 5));
  20.  
  21.         int n1, n2;
  22.  
  23.         for(int i=0; i<aristas; i++)
  24.         {
  25.             cin >> n1 >> n2;
  26.             adj[n1].push_back(n2);
  27.             adj[n2].push_back(n1);
  28.         }
  29.  
  30.         cin >> inicial; ///Nodo desde el cual empiezo la ejecución del BFS
  31.     }
  32.  
  33.     void BFS(int inicial)
  34.     {
  35.         vector <int> d(nodos+1, INF);
  36.  
  37.         d[inicial] = 0;
  38.  
  39.         queue <int> cola;
  40.  
  41.         cola.push(inicial);
  42.  
  43.         while(cola.size())
  44.         {
  45.             int nodo = cola.front();
  46.             cola.pop();
  47.  
  48.             for(int i=0; i<adj[nodo].size(); i++)
  49.             {
  50.                 int dist = d[nodo] + 1;
  51.                 int vecino = adj[nodo][i];
  52.                 if(dist < d[vecino])
  53.                 {
  54.                     d[vecino] = dist;
  55.                     cola.push(vecino);
  56.                 }
  57.             }
  58.         }
  59.  
  60.         for(int i=1; i<d.size(); i++)
  61.         {
  62.             cout << d[i] << " ";
  63.         }
  64.         cout << endl;
  65.     }
  66. };
  67.  
  68. int main()
  69. {
  70.     Grafo g;
  71.  
  72.     g.leer();
  73.     g.BFS(g.inicial);
  74.  
  75.     return 0;
  76. }
Advertisement
Add Comment
Please, Sign In to add comment