Si j'ai un graphe non orienté (implémenté comme une liste de sommets), comment puis-je trouver ses composants connectés? Comment utiliser l'union rapide?
Utilisez la recherche en profondeur (DFS) pour marquer tous les composants connectés individuels comme visités:
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)
La meilleure façon est d'utiliser cette méthode simple qui est le temps linéaire O (n).
Puisque vous avez posé des questions sur l'algorithme de recherche d'union:
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
Pour chaque Edge(u,v)
recherchez union(u,v)
à l'aide de la structure de données rapide de recherche d'union et recherchez l'ensemble de chaque sommet à l'aide de find(v)
. Chaque nouvel ensemble est un composant connecté dans le graphique