Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <queue>
- using namespace std;
- // Estrutura para representar um grafo usando lista de adjacência
- class Graph {
- int V; // Número de vértices
- // Lista de adjacência para armazenar as arestas
- vector<vector<int>> adj;
- public:
- Graph(int V) : V(V) {
- adj.resize(V);
- }
- // Função para adicionar uma aresta ao grafo
- void addEdge(int v, int w) {
- adj[v].push_back(w); // Adiciona w à lista de adjacência de v
- }
- // Função que implementa o algoritmo BFS
- void BFS(int start) {
- // Marcar todos os vértices como não visitados
- vector<bool> visited(V, false);
- // Criar uma fila para o BFS
- queue<int> queue;
- // Marcar o vértice de início como visitado e colocá-lo na fila
- visited[start] = true;
- queue.push(start);
- // Iterar sobre os vértices da fila
- while (!queue.empty()) {
- // Desenfileirar um vértice da fila e imprimir
- int current = queue.front();
- cout << current << " ";
- queue.pop();
- // Obter todos os vértices adjacentes ao vértice desenfileirado
- // Se um vértice adjacente ainda não foi visitado, marcá-lo como visitado e enfileirá-lo
- for (int i = 0; i < adj[current].size(); ++i) {
- int adjacent = adj[current][i];
- if (!visited[adjacent]) {
- visited[adjacent] = true;
- queue.push(adjacent);
- }
- }
- }
- }
- };
- int main() {
- // Criar um grafo com 4 vértices
- Graph g(4);
- // Adicionar as arestas do grafo
- g.addEdge(0, 1);
- g.addEdge(0, 2);
- g.addEdge(1, 2);
- g.addEdge(2, 0);
- g.addEdge(2, 3);
- g.addEdge(3, 3);
- cout << "Busca em Largura (BFS) começando a partir do vértice 2: ";
- g.BFS(2); // Começando a busca a partir do vértice 2
- return 0;
- }
Add Comment
Please, Sign In to add comment