C++ 中的无向加权图数据结构
undirected weighted graph data structure in c++
我正在学习C++,感谢您的支持,回答我的问题以帮助我理解基本概念。我确信我需要学习很多东西,但我需要一些建议来帮助我找到正确的方法。我遇到的问题在下面解释。
我想实现一个类来C++中创建图形。正如我注意到的,我可以使用矩阵,但我对矩阵不感兴趣,正如你稍后看到的那样。该图是无向的和加权的。该图是节点的向量,我使用标准库向量。图的每个节点(顶点)都有以下参数和一些邻居。
node_index, node_degree, X, Y , Z.
邻居也是节点,我可以为它们定义节点向量。但是,我不喜欢创建节点向量的原因有 3 个。首先,我不需要邻居的
Y,Z。我还需要这个节点和它的每个邻居之间的权重。其次,我需要分别计算每个节点的node_degree X,如果我有重复的节点作为邻居,我需要手动更新它们,这是额外的工作。第三,图表会很大,我不想将宝贵的内存浪费在无用的信息上。
话虽如此,我正在考虑拥有一个基类,以后我可以从中派生 Node 类和邻居类。然后对于邻居,我保留一个指向每个邻居开头的指针向量。我不知道怎么做,但我想我可以将该指针强制转换为基类,并且通过使用它可以从邻居节点检索我需要的信息。
换句话说,我试图保留指向邻居的指针,当我更新邻居参数时,我直接使用指针访问节点的最新信息。
您能否提供我应该学习实现它的相关主题的链接?
请让我知道这是否是一个非常糟糕的主意(通过解释问题)以及这样做的更好或最好的方法是什么。
我建议你使用Link
结构来表示图中的边缘:
struct Link
{
Node *N;
float weight;
}
然后每个节点可以包含
vector<Link> neighbors;
这样就不会有重复的节点。存在权重重复,因为如果节点 A 具有指向节点 B 的链接,则节点 B 具有指向节点 A 的相同权重的链接。如果权重的重复是一个问题(例如,如果图形太大以至于权重的存储很昂贵,或者权重经常更新),那么您可以使链接双向(两个Node*
和一个权重)并为每个节点提供
vector<*Link>
在这种情况下,代码会稍微复杂一些,但这是效率的代价。
相关文章:
- 链表,反向函数,数据结构
- 如何使用set实现无序数据结构?
- 我们可以将数据永久保存为数据结构吗?
- C++中的可变长度数组/数据结构
- 一种有效的数据结构,用于按 ID 访问和查找加权随机项
- 当接收到不明确的规范时,表示图的邻接列表的数据结构
- C Koala图库 - 了解访问数据结构的语法
- C 图数据结构
- 使用C 中的单元格 /图块 /网格进行碰撞检测的最佳数据结构
- 具有恒定时间复杂度的无向图边的数据结构
- c或c++中是否有头文件来实现图、树等数据结构
- 残差图最快的数据结构
- 在c++中使用深度优先搜索查找图数据结构中所有可能的路径
- 垃圾收集器:对象图的数据结构
- 构建图的最佳标准数据结构是什么?
- C++中的图状数据结构和实现
- 数据结构-在c++中,图中单个节点的许多边
- C++ 中的无向加权图数据结构
- 数据结构- c++无向图
- 表示多图的良好数据结构(c++)