繁体   English   中英

C ++:Graph ADT是否应该具有一个顶点列表和一个边列表,或者仅具有指向其他顶点的指针的顶点?

[英]C++: is a Graph ADT supposed to have a list of vertices and a list of edges or just vertices with pointers to other vertices?

我正在尝试在C ++中实现图形,但不确定是否有“适当”的解决方法。 我的每个顶点都应该包含它所指向的顶点列表,还是图对象应该包含一个顶点列表和一个边列表。

这取决于您要处理的图形类型。如果对图形进行加权,则不能仅拥有一个指针列表,因为您将无法为此连接分配权重。 在这种情况下,我建议每个节点都应包含与其连接的边的列表。 如果图形没有方向,则对于任何顶点i和j,您都可以保存指向同一边{i,j}的指针,如果有向,则边{i,j}和{j,i}是两个不同的对象。

另一种方法是保存一个NxN矩阵,该矩阵表示所有顶点之间的连接。 如果图形未加权,则如果顶点i与顶点j之间存在边,则每个像元[i,j]的值为1。 如果对图进行加权,则单元格[i,j]将包含顶点i至顶点j之间的距离,以及无穷大或-1(如果边缘不存在)。

如果您的图形是完整的(每个顶点都连接到所有其他顶点),我强烈建议您使用矩阵技术,因为它很容易实现,可以直接访问任何相关值,并且不会占用额外的内存或运行时间(例如,当您要遍历连接到某个顶点的所有边时),因为任何顶点无论如何都将包含与所有其他顶点的连接的列表。

这取决于您对图形数据的访问。 您可以如下定义两个三维矢量:

vector< vector<int> > nodes;

其中节点ID为0到number_of_nodes -1; 节点6将存储在节点[6]中,然后继续。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM