由结构体表示的有向图
a digraph representation by structs
我想创建一个有向图。每个Edge都有destination Node
和origin Node
的信息。此外,每个Node都有incomingEdges
和outgoingEdges
的列表信息。
我有一个邻接矩阵[][]的图,我想读取矩阵和创建一个新的图。
是代码;
struct Node
{
vector<Edge *> incomingEdges;
vector<Edge *> outgoingEdges;
};
struct Edge
{
struct Node destination;
struct Node origin;
};
。...
for(int i=0; i<totalNodes; i++)
{
struct Node nodei;
}
。....
for(int i=0; i<totalNodes; i++)
{
for (int j=0; j<totalNodes; j++)
{
if ( adjacencyMatrix[i][j] == 1)
{
struct Edge edgeij;
edgeij.destination=nodej;
edgeij.origin =nodei;
nodei->outgoing.push_back(edgeij); // ???
nodej->incoming.push_back(edgeij); // ???
}
}
}
我不熟悉C/c++。显然我需要一些帮助来改进它。
当你这样做的时候:
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
对象在块的末尾被销毁,使得它非常无用(并且代码无论如何都无法编译,因为您试图在需要指针的地方推送对象)
因为你的vector需要一个指针,你应该使用一个动态分配的Edge
:
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<std::unique_ptr<Node>>
。
相关文章:
- 构建可组合有向图(扫描仪生成器的汤普森构造算法)
- C++创建指向有向图中节点的指针数组
- 如何仅在 2 个节点之间获取最短路径,给定邻接列表有向图?
- 有向图 - 如何计算图中彼此顶点可到达的顶点数?
- C++计算有向图中的最短路径
- 使用非递归 DFS 检测有向图中的周期
- 如何将这些节点连接为有向图
- 如何使用广度优先搜索确定是否可以在有向图中到达顶点
- 在有向图中精确访问所有节点一次
- 在有向图中查找第二条最短路径
- 关于如何处理有向图的一个想法
- 找到有向图C 的最短路径
- 分析输入文件以创建有向图C++
- 在使用无序多映射实现的有向图中查找循环
- 如何找到在c++中实现的有向图的所有路径作为邻接列表
- 如何创建具有多个数据的节点的有向图
- 有向图中的广度优先搜索
- 查找路径的有向图邻接矩阵
- 使用c++向量的有向图的邻接列表表示
- 由结构体表示的有向图