小编典典

在图中查找连接的组件

algorithm

如果我有一个无向图(以顶点列表的形式实现),如何找到其连接的组件?如何使用快速工会?


阅读 215

收藏
2020-07-28

共1个答案

小编典典

使用深度优先搜索(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)的简单方法。
由于您询问了联合查找算法:

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
2020-07-28