这几乎是debugging a map insertion的后续内容,我应用了那里指出的建议,但现在需要更多指针我真的对此感到困惑:
#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
指针。
如果它很重要,我使用的Visual Studio 2011配置为没有字符集。
答案 0 :(得分:1)
由于地图使用指针,您需要插入一对指针,更改所有
pair<int, Nodo>
到
pair<int, Nodo*>
答案 1 :(得分:1)
我看到了Insertar的一些问题......
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);
}
1)Nodos [_1]不是查找与键_1关联的条目的方法,因为如果一个条目尚不存在,它将在地图中创建一个条目。请使用map :: find()。
2)对的插入正在通过Nodo *。这是不正确的。
我只看了这个功能。我确定还有其他问题。