that_one_nigga_you_k

classe de grafo com BFS e DFS

Aug 29th, 2024
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.99 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <queue>
  4. #include <stack>
  5.  
  6. using namespace std;
  7.  
  8. // Estrutura para representar um grafo usando lista de adjacência
  9. class Graph {
  10.     int V; // Número de vértices
  11.     vector<vector<int>> adj; // Lista de adjacência para armazenar as arestas
  12.  
  13. public:
  14.     Graph(int V) : V(V) {
  15.         adj.resize(V);
  16.     }
  17.  
  18.     // Função para adicionar uma aresta ao grafo
  19.     void addEdge(int v, int w) {
  20.         adj[v].push_back(w); // Adiciona w à lista de adjacência de v
  21.     }
  22.  
  23.     // Função que implementa o algoritmo BFS
  24.     void BFS(int start) {
  25.         vector<bool> visited(V, false); // Marcar todos os vértices como não visitados
  26.         queue<int> fila; // Fila para o BFS
  27.  
  28.         visited[start] = true; // Marcar o vértice de início como visitado
  29.         fila.push(start); // Colocar o vértice de início na fila
  30.  
  31.         while (!fila.empty()) {
  32.             int current = fila.front(); // Desenfileirar um vértice
  33.             cout << current << " ";
  34.             fila.pop(); // Remover o vértice da fila
  35.  
  36.             // Iterar sobre os vértices adjacentes
  37.             for (int adjacent : adj[current]) {
  38.                 if (!visited[adjacent]) {
  39.                     visited[adjacent] = true;
  40.                     fila.push(adjacent); // Enfileirar os vértices adjacentes não visitados
  41.                 }
  42.             }
  43.         }
  44.     }
  45.  
  46.     // Função que implementa o algoritmo DFS
  47.     void DFS(int start) {
  48.         vector<bool> visited(V, false); // Marcar todos os vértices como não visitados
  49.         stack<int> pilha; // Pilha para o DFS
  50.  
  51.         visited[start] = true; // Marcar o vértice de início como visitado
  52.         pilha.push(start); // Colocar o vértice de início na pilha
  53.  
  54.         while (!pilha.empty()) {
  55.             int current = pilha.top(); // Obter o vértice do topo da pilha
  56.             pilha.pop(); // Remover o vértice da pilha
  57.             cout << current << " "; // Processar o vértice
  58.  
  59.             // Iterar sobre os vértices adjacentes
  60.             for (int adjacent : adj[current]) {
  61.                 if (!visited[adjacent]) {
  62.                     visited[adjacent] = true;
  63.                     pilha.push(adjacent); // Empurrar os vértices adjacentes não visitados para a pilha
  64.                 }
  65.             }
  66.         }
  67.     }
  68. };
  69.  
  70.  
  71. int main() {
  72.     // Criar um grafo com 4 vértices
  73.     int quant, arestas;
  74.     cin>> quant;
  75.     cin>> arestas;
  76.     Graph g(quant);
  77.  
  78.     // Adicionar as arestas do grafo
  79.  
  80.    
  81.  
  82.     for(int i = 0; i < arestas; i++){
  83.         int vertice, adjacencia;
  84.         cin>>vertice >> adjacencia;
  85.         g.addEdge(vertice, adjacencia);
  86.     }
  87.    
  88.     cout << "Busca em Largura (BFS) começando a partir do vértice 0: ";
  89.     g.BFS(0); // Começando a busca a partir do vértice 2
  90.     cout<<"\n\n";
  91.     cout << "Busca em Profundidade (DFS) começando a partir do vértice 0: ";
  92.     g.DFS(0); // Começando a busca a partir do vértice 2
  93.  
  94.     return 0;
  95. }
  96.  
  97.  
Add Comment
Please, Sign In to add comment