调试矢量检索?

时间:2011-10-15 20:23:21

标签: c++ pointers vector

这几乎是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配置为没有字符集。

2 个答案:

答案 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 *。这是不正确的。

我只看了这个功能。我确定还有其他问题。

相关问题