luisoncpp

Clase de Grafos

Dec 17th, 2020
1,027
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.74 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. namespace ListasDeAdyacencia {
  4.   using std::vector;
  5.   using std::cout;
  6.   vector<vector<int>> Vecinos;
  7.   vector<bool> Visitado;
  8.   void AgregarArista(int a, int b) {
  9.     Vecinos[a].push_back(b);
  10.     Vecinos[b].push_back(a);
  11.   }
  12.   void Inicializar(int n) {
  13.     Vecinos = vector<vector<int>>(n);
  14.     Visitado = vector<bool>(n, false);
  15.   }
  16.   void Visitar(int vertice_actual) {
  17.     if (Visitado[vertice_actual]) {
  18.       return;
  19.     }
  20.     Visitado[vertice_actual] = true;
  21.     cout << "Visitar " << vertice_actual + 1 << std::endl;
  22.     for (int vecino : Vecinos[vertice_actual]) {
  23.       Visitar(vecino);
  24.     }
  25.   }
  26. };
  27.  
  28. namespace MatrizDeAdyacencia {
  29.   using std::vector;
  30.   using std::cout;
  31.   using Matriz = vector<vector<bool>>;
  32.   Matriz A;
  33.   vector<bool> Visitado;
  34.   void Inicializar(int n) {
  35.     A = Matriz(n, vector<bool>(n, false));
  36.     Visitado = vector<bool>(n, false);
  37.   }
  38.   void AgregarArista(int a, int b) {
  39.     A[a][b] = true;
  40.     A[b][a] = true;
  41.   }
  42.   void Visitar(int vertice_actual) {
  43.     if (Visitado[vertice_actual]) {
  44.       return;
  45.     }
  46.     Visitado[vertice_actual] = true;
  47.     cout << "Visitar " << vertice_actual + 1 << std::endl;
  48.     const int NumeroDeVertices = Visitado.size();
  49.     for (int vecino = 0; vecino < NumeroDeVertices; ++vecino) {
  50.       if (A[vertice_actual][vecino]) {
  51.         Visitar(vecino);
  52.       }
  53.     }
  54.   }
  55. }
  56.  
  57. int main() {
  58.   using std::cin;
  59.   using std::cout;
  60.   using namespace ListasDeAdyacencia;
  61.   // using namespace MatrizDeAdyacencia;
  62.   int NumVertices, NumAristas;
  63.   cin >> NumVertices >> NumAristas;
  64.   Inicializar(NumVertices);
  65.   for (int i = 0; i < NumAristas; ++i) {
  66.     int a, b;
  67.     cin >> a >> b;
  68.     AgregarArista(a - 1, b - 1);
  69.   }
  70.   Visitar(0);
  71. }
Advertisement
Add Comment
Please, Sign In to add comment