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