#include <iostream>
#include <vector>
#include <queue>
using namespace std;
class Grafo {
int V; // Número de vértices
vector<vector<int>> adj; // Lista de adyacencia
public:
Grafo(int V) {
this->V = V;
adj.resize(V);
}
void agregarArista(int v, int w) {
adj[v].push_back(w); // Agregar w a la lista de v
}
void BFS(int s) {
vector<bool> visitado(V, false); // Inicializar todos los vértices como no visitados
queue<int> cola; // Cola para BFS
visitado[s] = true; // Marcar el vértice inicial como visitado
cola.push(s); // Encolar el vértice inicial
while (!cola.empty()) {
s = cola.front();
cout << s << " "; // Procesar el vértice
cola.pop();
// Recorrer todos los vértices adyacentes
for (int i : adj[s]) {
if (!visitado[i]) {
visitado[i] = true; // Marcar como visitado
cola.push(i); // Encolar el vértice
}
}
}
}
};
int main() {
Grafo g(5); // Crear un grafo con 5 vértices
g.agregarArista(0, 1);
g.agregarArista(0, 2);
g.agregarArista(1, 3);
g.agregarArista(1, 4);
g.agregarArista(2, 4);
cout << "BFS comenzando desde el vértice 0:\n";
g.BFS(0);
return 0;
}