无权无向图中的算子错误和边插入问题 在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