【问题标题】:Number of connected-components in a undirected graph无向图中的连通分量数
【发布时间】:2013-04-07 01:42:46
【问题描述】:

我正在复习一些图形算法(这不是家庭作业;我只是在复习算法和数据结构)并且我有一个问题。假设我有以下无向图:

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

图表基本上是这样的:

此图中有多少个连通分量?从图表上看,似乎有 3 个组件。但是,如果我实际上实现了算法(遍历每个顶点,并使用该顶点作为起点执行 bfs )。

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

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

【问题讨论】:

  • 我想知道这个问题有什么值得反对的……这很合法。
  • 图表不是特别适合其他问题

标签: algorithm data-structures graph


【解决方案1】:

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

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

(2) 每次寻找边的存在时,遍历所有顶点的邻接表。

由于 (2) 效率极低,您通常会选择 (1)。这也是一般使用的 adj 列表的约定。如果我看到你的 adj 列表,我会假设该图是有向的。

【讨论】:

  • 好的,这对我来说很有意义!谢谢!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-25
    • 1970-01-01
    • 2014-03-11
    • 1970-01-01
    • 2018-03-01
    相关资源
    最近更新 更多