algorithm - 在图中查找连通分量

标签 algorithm graph

<分区>

如果我有一个无向图(作为顶点列表实现),我如何找到它的连通分量?如何使用快速联合?

最佳答案

使用深度优先搜索 (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

关于algorithm - 在图中查找连通分量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21078445/

相关文章:

c# - 检测图何时重新收敛的算法(类似于公共(public)子树?)

python - 增加辅助 y 轴和 x 轴之间的间距?

python - 如何在 igraph 中提取某些路径类型?

algorithm - 在图连接算法中寻找邻居节点

c - 用c语言编写深度优先搜索

c++ - 找到集合并集的最快方法

java - 找到所有组合的更有效方法?

c - 我的 LCM 程序的复杂性是多少?

algorithm - 给定必须包含的边的最小生成树计数

graph - 如何使用SPARQL查询列出并统计图数据中不同类型的节点和边实体?