关于在c ++中实现图形的问题

时间:2013-12-13 13:23:18

标签: c++ data-structures graph matrix

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

我有三个问题

1)除了上面列出的两种方法之外还有其他方法来实现图形吗?

2)使用不同的数据结构有什么区别???链表VS矢量VS地图

3)以下段落在文章

中的含义是什么
  

邻接列表和邻接之间的另一个显着差异   矩阵是他们执行的操作的效率。在一个   邻接列表,可列出每个顶点的邻居   有效地,在时间上与顶点的程度成比例。在一个   邻接矩阵,此操作需要与数字成比例的时间   图中的顶点,可能明显高于   学位。另一方面,邻接矩阵允许测试是否   两个顶点在恒定时间内彼此相邻;该   邻接列表支持此操作的速度较慢。

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

two vertices are adjacent to each other in constant time的意思是什么,知道两个顶点是否相邻是否有任何实际用法?

1 个答案:

答案 0 :(得分:2)

  1. 是的,您也可以使用指向其他节点的指针显式实现它。
  2. listS消耗更多内存而不是随机访问,但元素的句柄(迭代器)在插入和删除时保持有效; vectorS是内存有效的随机访问,但无效的句柄(迭代器)在插入和删除时失效; mapS通常消耗更多内存,不会慢速迭代,句柄(迭代器)通常在插入和删除时保持有效;查找子节点可以非常快。这实际上是这些容器之间的一般差异,而不是特定于图表。
  3. 明确给出了操作:列出邻居和测试邻接。根据图表的实现,两者都有不同的复杂性。
  4. two vertices are adjacent to each other只意味着两个节点之间存在直接边缘。在恒定时间内执行此操作意味着操作独立于每个节点具有多少邻居。实际目的去:是的,吨数。您可能想知道某个城市是否通过直接街道与另一个城市相连。您可能想知道两个顶点在折叠之前是否有边缘等。

    在您谈论C ++时,我强烈建议您查看一些优秀的图表库,例如Boost.GraphLemon