繁体   English   中英

有关在C ++中实现图形的问题

[英]Questions regarding Implementation of graph in c++

我正在学习用C ++实现图形,因此我阅读了Wikipedia条目 ,发现有两种常用的方法: 邻接表邻接矩阵 我了解邻接列表邻接矩阵之间在空间上的权衡。

我有三个问题

1)除了上面列出的两种以外,还有其他方法可以实现该图吗?

2)使用不同的数据结构之间有什么区别? 链表VS向量VS映射

3)下一段在文章中是什么意思

邻接表和邻接矩阵之间的另一个重要区别是它们执行的操作效率。 在邻接表中,每个顶点的邻居可以按与顶点度成比例的时间有效地列出。 在邻接矩阵中,此操作所花费的时间与图中的顶点数量成正比,而该数量可能远高于度。 另一方面,邻接矩阵可以测试两个顶点是否在恒定时间内彼此相邻; 邻接表较慢以支持此操作。

efficiency of the operations they perform指的是什么? 什么类型的操作???

two vertices are adjacent to each other in constant time意味着什么?知道两个顶点是否彼此相邻有什么实际用途?

  1. 是的,您还可以使用指向其他节点的指针来显式实现它。
  2. listS消耗更多的内存,并且不是随机访问的,但是元素的句柄(迭代器)在插入和删除时仍然有效; vectorS是内存有效的随机访问,但是无效句柄(迭代器)在插入和删除时会失效; mapS通常会消耗更多的内存,而不要迭代太慢,句柄(迭代器)通常在插入和删除时仍然有效; 查找子节点可以非常快。 这实际上是这些容器之间的一般区别,并非特定于图形。
  3. 明确给出了这些操作:列出邻居和测试邻接关系。 两者都有不同的复杂度,具体取决于图形实现。

two vertices are adjacent to each other仅表示两个节点之间存在直接边缘。 以恒定的时间执行此操作意味着该操作与每个节点具有多少个邻居无关。 按照实际目的去做:是的,很多。 您可能想知道一个城市是否通过直达街道与另一个城市相连。 在折叠等之前,您可能想知道两个顶点是否具有边。

在您谈论C ++时,我强烈建议您看一下Boost.GraphLemon等一些好的图形库。

暂无
暂无

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

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