首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么使用邻接矩阵或邻接列表?

为什么使用邻接矩阵或邻接列表?
EN

Stack Overflow用户
提问于 2019-12-23 04:33:17
回答 2查看 419关注 0票数 3

我刚开始学习图,有些东西让我感到困惑,那就是为什么我们需要使用外部数据结构(如矩阵或列表)来存储图的哪些顶点与其他顶点相连接。

为什么每个顶点不能只保存对其连接的顶点的引用,就像节点在决策树中所做的那样?在我看来,这似乎更直观。

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2019-12-23 05:08:41

这是一种设计哲学。每当你有很多到许多关系,你介绍一个经纪人来保持这种关系。这破坏了关系,使管理代码和编写数据结构变得更容易。

例如,如果我们将所有的顶点(称为列表B)信息保存到连接到List B的顶点(称为A),则列表B中任何一个顶点的任何更改都需要传播到A。如果我们删除了某些边缘,我们需要更新A中的内容,这可能会变得非常混乱。这也违反了单一责任原则。现在我的顶点可以从两个轴上修改--如果它自己修改或者修改它的任何连接。

然而,如果我们对数据结构建模,使每个顶点可以独立地变化,而顶点中的任何变化都不需要改变其他顶点,这就使我们的生活变得更简单了。我们可以有一个managerbroker来管理每个顶点之间的关系,而不是管理每个顶点。该关系管理器是邻接表/邻接矩阵。

票数 1
EN

Stack Overflow用户

发布于 2019-12-23 04:59:12

邻接矩阵或邻接列表不是强制性的。还有其他的选择。如果您使用的是C++,那么使用向量和地图。如果顶点/节点编号为0-N,则不需要映射,而是向量。例如:

代码语言:javascript
复制
vector < vector < int > > graph; // while vertex/node are numbered from 0-N.
map < int, vector<int> > graph; // when vertex/node can be any number

graph[i].push_back(x); // insertion of node x in i'th list. 

遍历i‘’th列表将显示与节点i连接的节点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59450195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档