Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <queue>
- #define INF (1 << 29) ///(2^29)*1
- using namespace std;
- struct Grafo
- {
- vector <vector <int> > adj; ///Lista de adyacencia
- int nodos, aristas;
- int inicial;
- void leer()
- {
- cin >> nodos >> aristas;
- adj.resize(nodos+1);
- ///adj = vector <vector <int> > (nodos+1, vector <int> (arista+1, 5));
- int n1, n2;
- for(int i=0; i<aristas; i++)
- {
- cin >> n1 >> n2;
- adj[n1].push_back(n2);
- adj[n2].push_back(n1);
- }
- cin >> inicial; ///Nodo desde el cual empiezo la ejecución del BFS
- }
- void BFS(int inicial)
- {
- vector <int> d(nodos+1, INF);
- d[inicial] = 0;
- queue <int> cola;
- cola.push(inicial);
- while(cola.size())
- {
- int nodo = cola.front();
- cola.pop();
- for(int i=0; i<adj[nodo].size(); i++)
- {
- int dist = d[nodo] + 1;
- int vecino = adj[nodo][i];
- if(dist < d[vecino])
- {
- d[vecino] = dist;
- cola.push(vecino);
- }
- }
- }
- for(int i=1; i<d.size(); i++)
- {
- cout << d[i] << " ";
- }
- cout << endl;
- }
- };
- int main()
- {
- Grafo g;
- g.leer();
- g.BFS(g.inicial);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment