C++ 用结构表示有向图

C++ 用结构表示有向图,c++,c,graph,graph-theory,C++,C,Graph,Graph Theory,我想创建一个有向图。每条边都有关于目标节点和源节点的信息。此外,每个节点都有关于收入边和支出边列表的信息 我有一个图的邻接矩阵[],我想读取矩阵并创建一个新的图 这是代码 struct Node { vector<Edge *> incomingEdges; vector<Edge *> outgoingEdges; }; struct Edge { struct Node destinat

我想创建一个有向图。每条边都有关于
目标节点
源节点
的信息。此外,每个节点都有关于
收入边
支出边
列表的信息

我有一个图的邻接矩阵[],我想读取矩阵并创建一个新的图

这是代码

  struct Node
    {
       vector<Edge *> incomingEdges;
       vector<Edge *> outgoingEdges;
    };

    struct Edge
    {

       struct Node destination;
       struct Node origin;

    };
struct节点
{
矢量输入边;
病媒支出;
};
结构边
{
结构节点目的地;
结构节点原点;
};
。 . .

for(int i=0;i当您执行以下操作时:

    if ( adjacencyMatrix[i][j] == 1)
    {
        struct Edge edgeij;
        edgeij.destination=nodej;
        edgeij.origin =nodei;
        nodei->outgoing.push_back(edgeij); // ???
        nodej->incoming.push_back(edgeij); // ???
    }
edgeij
对象在块的末尾被销毁,使其变得毫无用处(而且代码无论如何都不会编译,因为您试图将对象推送到需要指针的位置)

由于向量需要指针,因此应使用动态分配的

    Edge* edgeij = new Edge;
    edgeij.destination=nodej;
    edgeij.origin =nodei;
    nodei->outgoing.push_back(edgeij);
    nodej->incoming.push_back(edgeij);
    // now, do not forget to properly delete resources allocated with new

更好的设计解决方案是完全避免原始指针,而更喜欢智能指针,例如
std::vector

您的问题到底是什么?抱歉,问题已更新。如何将\u推回到结构中声明的指针向量?此外,我建议在Edge类上定义一个构造函数,该构造函数包含两个参数,即.e.两个节点,起点和终点。在没有节点的情况下创建Edge是毫无意义的。好吧,构造函数甚至可以在两个节点上调用push_,使if块中的代码非常简单,即基本上
新Edge(nodei,nodej)
。只要我的两分钱。
    if ( adjacencyMatrix[i][j] == 1)
    {
        struct Edge edgeij;
        edgeij.destination=nodej;
        edgeij.origin =nodei;
        nodei->outgoing.push_back(edgeij); // ???
        nodej->incoming.push_back(edgeij); // ???
    }
    Edge* edgeij = new Edge;
    edgeij.destination=nodej;
    edgeij.origin =nodei;
    nodei->outgoing.push_back(edgeij);
    nodej->incoming.push_back(edgeij);
    // now, do not forget to properly delete resources allocated with new