繁体   English   中英

填充一个向量,其中包含指向列表的指针

[英]fill into the a vector holding pointers to lists

我初始化一个指针向量,每个指针指向邻居列表以实现Graph的邻接表表示。

class Graph
{
public:
     Graph(int V) : vertices(V) {}
     // Member functions for Graph class
     void addEdge();
     void print();
     void type(string);
private:
     vector<list<int> *> vertices;
};

addEdge函数要求用户输入从哪个顶点到另一个顶点的边。 我认为在填充向量时某处存在错误。

void Graph::addEdge()
{
    int v, w;
    cout << "\nvertex: ";
    cin >> v;
    cout << "\nadjacent: ";
    cin >> w;
    vertices[v]->push_back(w);
}

如果这是填充或不填充我所介绍的数据结构的正确方法,那么我需要帮助! 如果没有,执行任务的正确方法是什么?

我建议将std::vector<std::vector>用于图形的邻接矩阵 ,并且建议您不要将UI与类混合使用(请参见下面的代码):

class Graph
{
public:
  Graph(std::size_t const n_vert) : adjmat(n_vert, std::vector<int>(n_vert)) {}
     // Member functions for Graph class
     void addEdge(std::size_t const from, std::size_t const to, int const weight);
     void print();
     void type(std::string);
private:
     std::vector<std::vector<int>> adjmat;
};

void Graph::addEdge(std::size_t const from, std::size_t const to, int const weight = 1)
{
  // or `adjmat.at(from).at(to)` for range checking
  adjmat[from][to] = weight;
}

int main ()
{
    Graph G(10);
    int v, w;
    std::cout << "\nvertex: ";
    std::cin  >> v;
    std::cout << "\nadjacent: ";
    std::cin  >> w;
    G.addEdge(v, w);

    return 0;
}

不过,对于小型图,建议使用此解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM