[英]undirected weighted graph data structure in c++
我正在学习C ++,感谢您的回答,以帮助我理解基本概念,感谢您的支持。 我确定我需要学习很多东西,但是我需要一些建议以帮助我找到正确的方法。 我的问题在下面解释。
我想实现一个类以在C ++中创建图形。 正如我所注意到的,我可以使用矩阵,但是我对矩阵不感兴趣,稍后您将看到。 该图是无向的和加权的。 该图是节点的向量,我使用标准库向量。 图的每个节点(顶点)具有以下参数和一些邻居。
node_index, node_degree, X, Y , Z.
邻居也是节点,我可以为它们定义一个节点向量。 但是,有3个我不喜欢创建节点向量的原因。 首先,我不需要
Y,Z来自邻居。 我还需要此节点与其每个邻居之间的权重。 其次,我需要分别计算每个节点的node_degree,X,如果邻居有重复的节点,则需要手动更新它们,这是额外的工作。 第三,图形将很大,我不想浪费宝贵的内存来存储无用的信息。
话虽如此,我当时正在考虑拥有一个基类,以后我可以从中派生Node类和Neighbor类。 然后对于邻居,我保留指向每个邻居开始的指针的向量。 我不知道如何,但是我想我可以将该指针转换为基类,并通过使用它可以从邻居节点中检索所需的信息。
换句话说,我试图保留指向邻居的指针,并且在更新邻居参数时,我直接使用指针访问节点的最新信息。
您能否提供我应该学习实现的相关主题的链接?
请让我知道这是一个非常糟糕的主意(通过解释问题),什么是更好或最好的方法?
我建议你使用一个Link
结构,以表示图中的边 :
struct Link
{
Node *N;
float weight;
}
然后每个节点可以包含
vector<Link> neighbors;
这样就不会重复节点。 权重重复,因为如果节点A的链接指向节点B,则节点B的链接具有相同的权重指向节点A。如果权重重复是一个问题(例如,图形很大)权重的存储很昂贵,或者如果权重经常更新),则可以使Link双向(两个Node*
和一个权重)并为每个Node
vector<*Link>
在这种情况下,代码会稍微复杂一些,但这是效率的代价。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.