Это в значительной степени продолжение отладки вставки карты , я применил предложенное там предложение, но теперь, когда понадобилось еще больше указателей, я действительно озадачен этим:
#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");
}
Разве это не должно работать как есть?Я объявляю I
указателем на Nodo
, а оператор []
предназначен для того, чтобы дать мне просто указатель Nodo
.
Если это важно, я использую VisualStudio 2011 настроена на отсутствие кодировки.