that_one_nigga_you_k

classe de grafo com bfs

Jun 4th, 2024
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.00 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <queue>
  4.  
  5. using namespace std;
  6.  
  7. // Estrutura para representar um grafo usando lista de adjacência
  8. class Graph {
  9.     int V; // Número de vértices
  10.  
  11.     // Lista de adjacência para armazenar as arestas
  12.     vector<vector<int>> adj;
  13.  
  14. public:
  15.     Graph(int V) : V(V) {
  16.         adj.resize(V);
  17.     }
  18.  
  19.     // Função para adicionar uma aresta ao grafo
  20.     void addEdge(int v, int w) {
  21.         adj[v].push_back(w); // Adiciona w à lista de adjacência de v
  22.     }
  23.  
  24.     // Função que implementa o algoritmo BFS
  25.     void BFS(int start) {
  26.         // Marcar todos os vértices como não visitados
  27.         vector<bool> visited(V, false);
  28.  
  29.         // Criar uma fila para o BFS
  30.         queue<int> queue;
  31.  
  32.         // Marcar o vértice de início como visitado e colocá-lo na fila
  33.         visited[start] = true;
  34.         queue.push(start);
  35.  
  36.         // Iterar sobre os vértices da fila
  37.         while (!queue.empty()) {
  38.             // Desenfileirar um vértice da fila e imprimir
  39.             int current = queue.front();
  40.             cout << current << " ";
  41.             queue.pop();
  42.  
  43.             // Obter todos os vértices adjacentes ao vértice desenfileirado
  44.             // Se um vértice adjacente ainda não foi visitado, marcá-lo como visitado e enfileirá-lo
  45.             for (int i = 0; i < adj[current].size(); ++i) {
  46.                 int adjacent = adj[current][i];
  47.                 if (!visited[adjacent]) {
  48.                     visited[adjacent] = true;
  49.                     queue.push(adjacent);
  50.                 }
  51.             }
  52.         }
  53.     }
  54. };
  55.  
  56. int main() {
  57.     // Criar um grafo com 4 vértices
  58.     Graph g(4);
  59.  
  60.     // Adicionar as arestas do grafo
  61.     g.addEdge(0, 1);
  62.     g.addEdge(0, 2);
  63.     g.addEdge(1, 2);
  64.     g.addEdge(2, 0);
  65.     g.addEdge(2, 3);
  66.     g.addEdge(3, 3);
  67.  
  68.     cout << "Busca em Largura (BFS) começando a partir do vértice 2: ";
  69.     g.BFS(2); // Começando a busca a partir do vértice 2
  70.  
  71.     return 0;
  72. }
  73.  
  74.  
Add Comment
Please, Sign In to add comment