首先 说明一下 概念问题:
关节点 :如果删除无向 图中的一个顶点,以及与顶点相关的边,把 图的 一个连通 分量 变成 两个 以上的 连通 分量。这样的顶点叫做关节点。
没有 关节点的 无向图,叫做 重连通图。重连通图中 任意 两个顶点 至少 存在 两条以上的 通路。
如果 删除 连通图上的 k个 节点,才能 破坏 他的连通性,那么 这个连通图的 连通度 为k。
下面的算法 是 求 连通图的 关节点,并没有 考虑 求图的 关节点,不过 要 改成 图的 关节点 也不难,只要 加 一个 for i = 0 ,...g.verNum即可.
求关节点,我所知道的 有两种方法:
1.定义法: 依次 删除 连通图的 的节点,然后深度优先 遍历 连通图,看 连通图 是否 连通。 假设 n个顶点,e条边,,时间复杂度 O(n * (n+e))
2.根据 关节点 的两种特性 来 深度优先遍历连通图。时间复杂度 O(n+e)
当然 第二种 方法 比较 好。
书上 给出了 关节点的 两种特性
下面的 代码 完全 是 根据 这两种特性 来 写的