GastonFontenla

DFS

May 20th, 2017
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.41 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <queue>
  4.  
  5. #define INF (1 << 29) ///(2^29)*1
  6.  
  7. using namespace std;
  8.  
  9. struct Grafo
  10. {
  11.     vector <vector <int> > adj; ///Lista de adyacencia
  12.     vector <bool> visitado;
  13.     int nodos, aristas;
  14.     int inicial;
  15.  
  16.     void leer()
  17.     {
  18.         cin >> nodos >> aristas;
  19.         adj.resize(nodos+1);
  20.         visitado = vector <bool> (nodos+1, false);
  21.         ///adj = vector <vector <int> > (nodos+1, vector <int> (arista+1, 5));
  22.  
  23.         int n1, n2;
  24.  
  25.         for(int i=0; i<aristas; i++)
  26.         {
  27.             cin >> n1 >> n2;
  28.             adj[n1].push_back(n2);
  29.             adj[n2].push_back(n1);
  30.         }
  31.  
  32.         //cin >> inicial; ///Nodo desde el cual empiezo la ejecución del BFS
  33.     }
  34.  
  35.     void DFS(int nodo)
  36.     {
  37.         visitado[nodo] = true;
  38.  
  39.         for(int i=0; i<adj[nodo].size(); i++)
  40.             if(visitado[adj[nodo][i]] == false)
  41.                 DFS(adj[nodo][i]);
  42.     }
  43.  
  44.     int contarComponentes()
  45.     {
  46.         int cantComp = 0;
  47.  
  48.         for(int i=1; i<=nodos; i++)
  49.         {
  50.             ///Por cada nodo, me fijo si lo visité
  51.             if(visitado[i] == false) ///Si no lo visité
  52.             {
  53.                 DFS(i);
  54.                 cantComp++;
  55.             }
  56.         }
  57.  
  58.         return cantComp;
  59.     }
  60. };
  61.  
  62. int main()
  63. {
  64.     Grafo g;
  65.  
  66.     g.leer();
  67.  
  68.     cout << g.contarComponentes() << endl;
  69.  
  70.     return 0;
  71. }
Advertisement
Add Comment
Please, Sign In to add comment