Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <vector>
- #include <stack>
- #include <map>
- using namespace std;
- class Nodo
- {
- public:
- vector<Nodo*> Relaciones;
- int Valor;
- bool Visitado;
- Nodo(int V)
- {
- Valor = V;
- Visitado = false;
- }
- Nodo()
- {
- Visitado = false;
- }
- };
- class Grafo
- {
- public:
- Nodo *Raiz;
- map<int, Nodo*> Nodos;
- Grafo(int V)
- {
- Raiz = new Nodo(V);
- Nodos.insert(pair<int, Nodo*>(V, Raiz));
- }
- void Insertar(int _1, int _2)
- {
- Nodo *Fuente = Nodos[_1];
- Nodo *Destino = new Nodo(_2);
- Nodos.insert(pair<int, Nodo>(_2, Destino));
- Fuente->Relaciones.push_back(Destino);
- Destino->Relaciones.push_back(Fuente);
- }
- pair<int, Nodo> Resultado;
- void DFS(Nodo Fuente)
- {
- stack<pair<int, Nodo>> St;
- St.push(pair<int, Nodo>(0, Fuente));
- Fuente.Visitado = true;
- while(!St.empty())
- {
- pair<int, Nodo> P = St.top();
- int Dist = P.first;
- Nodo N = P.second;
- St.pop();
- if(Dist < Resultado.first)
- {
- Resultado.first = Dist;
- Resultado.second = N;
- }
- for(int i = 0; i < N.Relaciones.size(); i++)
- {
- //Getting error C2664: 'Nodo::Nodo(int)' : cannot convert parameter 1 from 'Nodo *' to 'int' here
- Nodo *I = N.Relaciones[i];
- if(!I->Visitado)
- {
- I->Visitado = true;
- St.push(pair<int, Nodo>(Dist + 1, I));
- }
- }
- }
- }
- int Procesar()
- {
- DFS(*Raiz);
- Resultado.first = 0;
- DFS(Resultado.second);
- return Resultado.first;
- }
- };
- int main()
- {
- Grafo* G;
- int Nodos = 0;
- scanf("%d", &Nodos);
- int _1, _2 = 0;
- scanf("%d", &_1);
- scanf("%d", &_2);
- G = new Grafo(_1);
- G->Insertar(_1, _2);
- Nodos--;
- while(Nodos - 1 > 0)
- {
- scanf("%d", &_1);
- scanf("%d", &_2);
- G->Insertar(_1, _2);
- Nodos--;
- }
- printf("%d" + G->Procesar());
- system("PAUSE");
- }
Add Comment
Please, Sign In to add comment