无权无向图中的算子错误和边插入问题 在C++中,我的邻接图有几个问题。我修复了一些主要错误,但仍然可以运行和测试程序。我不确定newEdge()方法是否正常工作,向量中的向量是否正确创建,最重要的是如何在图形中显示边

无权无向图中的算子错误和边插入问题 在C++中,我的邻接图有几个问题。我修复了一些主要错误,但仍然可以运行和测试程序。我不确定newEdge()方法是否正常工作,向量中的向量是否正确创建,最重要的是如何在图形中显示边,c++,class,oop,output,graph-theory,C++,Class,Oop,Output,Graph Theory,这是代码,我用“!”标记了有错误的行: #包括 #include.我假设您的图是一个基于程序逻辑的无向图上的模型,具有固定数量的节点 你的程序有很多问题 首先,在成员函数Graph::newEdge中,前提条件是错误的 edge.source >= numOfNodes - 1 || edge.target >= numOfNodes - 1 应该是, edge.source >= numOfNodes || edge.target >= numOfNodes 更重要

这是代码,我用“!”标记了有错误的行:

#包括

#include.

我假设您的
图是一个基于程序逻辑的无向图上的模型,具有固定数量的节点

你的程序有很多问题

首先,在成员函数
Graph::newEdge
中,前提条件是错误的

edge.source >= numOfNodes - 1 || edge.target >= numOfNodes - 1
应该是,

edge.source >= numOfNodes || edge.target >= numOfNodes
更重要的是,如果前提条件失败,
newEdge
函数应该立即返回,而不是添加边缘

第二个问题是构造函数
Graph::Graph
。1) 私有成员变量
numOfNodes
未初始化。2) 无需调用
baseVec.resize()
。可以直接创建给定大小的向量。3) 应首选成员初始值设定项列表

Graph(int numOfNodes) : numOfNodes(numOfNodes), baseVec(num0fNodes) {}
第三个问题是成员变量
Graph::baseVec

vector<vector<Edge>> baseVec;
第二步:(0,2)

第三步:(0,3)

步骤4:(1、2)

第五步:(2,3)

存储在baseVec中的不是
Edge
,而是
int
。源是行索引,目标是列索引。这样,
struct-Edge
的输出操作符就没有必要了

最后
main
函数中,不需要在
numOfEdges
上赋值。我猜您的逻辑是图上的最大边数是
顶点*(顶点-1)
,但是
newEdge
成员函数不检查重复边。您必须修改成员函数以使其有用

请参阅上的完整演示

vector<vector<Edge>> baseVec;
0: 1
1: 0
0: 1 2
1: 0
2: 0
0: 1 2 3
1: 0
2: 0
3: 0
0: 1 2 3
1: 0 2
2: 0 1
3: 0
0: 1 2 3
1: 0 2
2: 0 1 3
3: 0 2