如果我有一个无向图(实现为顶点列表),我如何找到其连接的组件?我怎样才能使用quick-union?
答案 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)
查找每个顶点的集合。每个新集都是图中的连通组件