Trouver composantes connexes dans un graphe
Si j'ai un graphe non-dirigé (implémentée par une liste de sommets), comment puis-je trouver ses composants connectés? Comment puis-je utiliser rapide de l'union?
- Les sommets sont représentés sous forme de liste, mais la façon dont les bordures sont représentés?
- Le graphe G est une liste de listes de nombres entiers. Il n'y a bord de la forme i à j ssi j est sur la liste G[i] et i sur G[j].
- Cette question semble être hors-sujet, car il est à propos de l'informatique, pas de programmation, et appartient à cs.stackexchange.com
- j'ai répondu à cette question parce que vous semblez nouveau DONC , mais nowonwards vous devriez aussi poster sur ce que vous avez essayé .
- Comment cette question est trop vaste?
Vous devez vous connecter pour publier un commentaire.
Utilisation depth-first search (DFS) pour marquer tous les différents composants connectés visité:
Le meilleur moyen est d'utiliser cette méthode simple qui est linéaire en temps O(n).
Depuis que vous avez demandé à propos de l'union-find algorithme:
X
vous avez choisi au début, signifie que si un nœudY
n'est pas accessible à partir deX
, puis BFS ne pas le visiter. Alors que DFS dans un tel scénario, pourquoi? parce que quand vous couvrez toutes les accessible nœuds deX
et il y a encore quelques non visités nœuds, puis DFS va recommencer à partir de l'un de ces nœuds, ainsi DFS vous donne une forêt, tandis que BFS un seul arbre.v
dans le graphique.dfs
qui rend votre mise en œuvre incorrecte.dfs
'd, le haut niveaudfs
appels tout bas.Pour chaque
edge(u,v)
trouverunion(u,v)
l'aide rapide de l'union-find discbased et de trouver ensemble de chaque sommet à l'aide defind(v)
. Chaque nouveau jeu est une composante connexe du graphe