Guest User

Untitled

a guest
Jan 23rd, 2018
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.85 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <vector>
  3. #include <stack>
  4. #include <map>
  5.  
  6. using namespace std;
  7.  
  8. class Nodo
  9. {
  10.     public:
  11.         vector<Nodo*> Relaciones;
  12.         int Valor;
  13.         bool Visitado;
  14.  
  15.         Nodo(int V)
  16.         {
  17.             Valor = V;
  18.             Visitado = false;
  19.         }
  20.  
  21.         Nodo()
  22.         {
  23.             Visitado = false;
  24.         }
  25. };
  26.  
  27. class Grafo
  28. {
  29.     public:
  30.         Nodo *Raiz;
  31.         map<int, Nodo*> Nodos;
  32.  
  33.         Grafo(int V)
  34.         {
  35.             Raiz = new Nodo(V);
  36.             Nodos.insert(pair<int, Nodo*>(V, Raiz));
  37.         }
  38.  
  39.         void Insertar(int _1, int _2)
  40.         {
  41.             Nodo *Fuente = Nodos[_1];
  42.             Nodo *Destino = new Nodo(_2);
  43.             Nodos.insert(pair<int, Nodo>(_2, Destino));
  44.             Fuente->Relaciones.push_back(Destino);
  45.             Destino->Relaciones.push_back(Fuente);
  46.         }
  47.  
  48.         pair<int, Nodo> Resultado;
  49.         void DFS(Nodo Fuente)
  50.         {
  51.             stack<pair<int, Nodo>> St;
  52.             St.push(pair<int, Nodo>(0, Fuente));
  53.             Fuente.Visitado = true;
  54.             while(!St.empty())
  55.             {
  56.                 pair<int, Nodo> P = St.top();
  57.                 int Dist = P.first;
  58.                 Nodo N = P.second;
  59.                 St.pop();
  60.                 if(Dist < Resultado.first)
  61.                 {
  62.                     Resultado.first = Dist;
  63.                     Resultado.second = N;
  64.                 }
  65.                 for(int i = 0; i < N.Relaciones.size(); i++)
  66.                 {
  67.                     //Getting error C2664: 'Nodo::Nodo(int)' : cannot convert parameter 1 from 'Nodo *' to 'int' here
  68.                     Nodo *I = N.Relaciones[i];
  69.                     if(!I->Visitado)
  70.                     {
  71.                         I->Visitado = true;
  72.                         St.push(pair<int, Nodo>(Dist + 1, I));
  73.                     }
  74.                 }
  75.             }
  76.         }
  77.  
  78.         int Procesar()
  79.         {
  80.             DFS(*Raiz);
  81.             Resultado.first = 0;
  82.             DFS(Resultado.second);
  83.             return Resultado.first;
  84.         }
  85. };
  86.  
  87. int main()
  88. {
  89.     Grafo* G;
  90.     int Nodos = 0;
  91.     scanf("%d", &Nodos);
  92.     int _1, _2 = 0;
  93.     scanf("%d", &_1);
  94.     scanf("%d", &_2);
  95.     G = new Grafo(_1);
  96.     G->Insertar(_1, _2);
  97.     Nodos--;
  98.     while(Nodos - 1 > 0)
  99.     {
  100.         scanf("%d", &_1);
  101.         scanf("%d", &_2);
  102.         G->Insertar(_1, _2);
  103.         Nodos--;
  104.     }
  105.     printf("%d" + G->Procesar());
  106.     system("PAUSE");
  107. }
Add Comment
Please, Sign In to add comment