我想解决一个问题,其中给出了无向图及其顶点,值为k
,其中k
是每个连接组件中应该有的顶点数,我必须找到给定图形中只有偶数顶点的所有连通分量。我必须找出有多少这样的连接组件,并保存每个连接组件的每个顶点的值。
示例:K=3
,我们得到以下图表:
对于该图,我们有2个连通分量,其中所有顶点都是偶数。第一个连通组件由以下顶点组成:8, 2, 4
;第二个连通分量由以下顶点组成:2, 4, 6
。
是否有算法在给定数量的顶点的无向图中查找连通分量?或者任何人都可以帮助我了解如何解决问题?我尝试用DFS算法做这件事,但我最终无处可去。
答案 0 :(得分:0)
蛮力:
将问题分解为两个子问题:
1)识别包含所有偶数和任意大小的所有连通分量(CC)。在上面给出的例子中,只有一个CC:(8,2,4,6)。这可以在O(e+n)
时间内完成,其中e
是边数,n
是使用BFS或DFS的节点数。 (这是快速的步骤。)
2)在步骤1)的每个CC中,枚举所有大小为k
的连通子图。这是缓慢的部分。通过枚举来自m
并使用O( k* (m choose k)) = O(k m^k)
操作的所有m choose k
个k
个节点,大小为m
个节点的CC的强力解决方案为k
确定它们是否已连接。
鉴于(1)速度快且(2)速度慢,您可能无法很好地理解问题,无法知道如何规避计算(2)的需要。可能有一种更快的计算方法(2),我所建议的可能就像蛮力一样接近。