无向图中的连通分量数

时间:2013-04-07 01:42:46

标签: algorithm data-structures graph

我正在研究一些图形算法(这不是功课;我只是在研究算法和数据结构),我有一个问题。假设我有以下无向图:

var graph = {
    9: [19, 26],
    13: [19, 5],
    17: [],
    26: [11, 18],
    18: [9],
    19: [],
    23: [24],
    24: [],
    11: [],
    18: []
};

图表基本上如下所示:

enter image description here

此图表中有多少个连接组件?从图中看,它看起来有3个组件。但是,如果我实际实现了算法(迭代每个顶点,并使用该顶点作为起点进行bfs 如果该顶点未被发现。此外,bfs将标记它遇到的任何顶点,如发现的那样)。

如果我从9开始,我最终会发现以下节点:[19, 26, 11, 18]。但是,13未被发现,因为它不在19的邻接列表中。但是,19位于13的邻接列表中。这就是我最终得到一个额外组件的原因。

这是对的吗?实际上是否有4个单独的组件,如果是这样,我对连接组件的理解是错误的吗?

2 个答案:

答案 0 :(得分:4)

问题在于,对于无向图表的邻接列表表示,您必须

(1)使用对称邻接列表,即在设置新边ab时,将b添加到adjlist[a] 反之亦然

(2)遍历所有顶点的邻接列表,只要你正在寻找边缘的存在。

由于(2)非常低效,你通常会选择(1)。这也是一般使用的adj列表的惯例。如果我被提交了你的调整清单,我会认为该图是有针对性的。

答案 1 :(得分:3)

您可以更改邻接列表表示,您的表示是“定向”但您的图片是无向的。对于边(a,b)图{a:[b],b:[a]}