在图表中查找已连接的组件

时间:2014-01-12 18:15:11

标签: algorithm graph

如果我有一个无向图(实现为顶点列表),我如何找到其连接的组件?我怎样才能使用quick-union?

2 个答案:

答案 0 :(得分:38)

使用深度优先搜索(DFS)将所有连接的组件标记为已访问:

dfs(node u)
  for each node v connected to u :
    if v is not visited :
      visited[v] = true
      dfs(v)


for each node u:
  if u is not visited :
    visited[u] = true
    connected_component += 1
    dfs(u)

最好的方法是使用这种简单的方法,即线性时间O(n) 既然你问过union-find算法:

for each node parent[node] = node  

for each node u :
   for each node v connected to u :  
       if findset(u)!=findset(v) :
           union(u,v)  

**I assume you know about how findset and union works **  
for each node if (parent[node] == node)  
    connected_component += 1

答案 1 :(得分:2)

对于使用快速联合查找数据结构的每个edge(u,v)查找union(u,v),并使用find(v)查找每个顶点的集合。每个新集都是图中的连通组件