繁体   English   中英

C ++中的无向加权图数据结构

[英]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.

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