Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <queue>
- #include <stack>
- using namespace std;
- // Estrutura para representar um grafo usando lista de adjacência
- class Graph {
- int V; // Número de vértices
- vector<vector<int>> adj; // Lista de adjacência para armazenar as arestas
- 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) {
- vector<bool> visited(V, false); // Marcar todos os vértices como não visitados
- queue<int> fila; // Fila para o BFS
- visited[start] = true; // Marcar o vértice de início como visitado
- fila.push(start); // Colocar o vértice de início na fila
- while (!fila.empty()) {
- int current = fila.front(); // Desenfileirar um vértice
- cout << current << " ";
- fila.pop(); // Remover o vértice da fila
- // Iterar sobre os vértices adjacentes
- for (int adjacent : adj[current]) {
- if (!visited[adjacent]) {
- visited[adjacent] = true;
- fila.push(adjacent); // Enfileirar os vértices adjacentes não visitados
- }
- }
- }
- }
- // Função que implementa o algoritmo DFS
- void DFS(int start) {
- vector<bool> visited(V, false); // Marcar todos os vértices como não visitados
- stack<int> pilha; // Pilha para o DFS
- visited[start] = true; // Marcar o vértice de início como visitado
- pilha.push(start); // Colocar o vértice de início na pilha
- while (!pilha.empty()) {
- int current = pilha.top(); // Obter o vértice do topo da pilha
- pilha.pop(); // Remover o vértice da pilha
- cout << current << " "; // Processar o vértice
- // Iterar sobre os vértices adjacentes
- for (int adjacent : adj[current]) {
- if (!visited[adjacent]) {
- visited[adjacent] = true;
- pilha.push(adjacent); // Empurrar os vértices adjacentes não visitados para a pilha
- }
- }
- }
- }
- };
- int main() {
- // Criar um grafo com 4 vértices
- int quant, arestas;
- cin>> quant;
- cin>> arestas;
- Graph g(quant);
- // Adicionar as arestas do grafo
- for(int i = 0; i < arestas; i++){
- int vertice, adjacencia;
- cin>>vertice >> adjacencia;
- g.addEdge(vertice, adjacencia);
- }
- cout << "Busca em Largura (BFS) começando a partir do vértice 0: ";
- g.BFS(0); // Começando a busca a partir do vértice 2
- cout<<"\n\n";
- cout << "Busca em Profundidade (DFS) começando a partir do vértice 0: ";
- g.DFS(0); // Começando a busca a partir do vértice 2
- return 0;
- }
Add Comment
Please, Sign In to add comment