無向グラフ(頂点のリストとして実装)がある場合、その接続されたコンポーネントを見つけるにはどうすればよいですか?クイックユニオンを使用するにはどうすればよいですか?
深さ優先検索(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
すべてのEdge(u,v)
について、クイックユニオン検索データ構造を使用してunion(u,v)
を検索し、find(v)
を使用して各頂点のセットを検索します。新しいセットはそれぞれ、グラフ内の接続されたコンポーネントです