Je ne sais pas pourquoi une question aussi ancienne est apparue dans mon flux, mais toutes les réponses précédentes sont mauvaises, donc...
DFS est utilisé pour trouver des cycles dans des graphes dirigés, car cela fonctionne.
Dans un DFS, chaque sommet est "visité", où visiter un sommet signifie :
-
Le sommet est démarré
-
Le sous-graphe accessible à partir de ce sommet est visité. Cela inclut le traçage de tous les bords non traçés qui sont accessibles à partir de ce sommet, et la visite de tous les sommets accessibles non visités.
-
Le sommet est terminé.
La caractéristique critique est que tous les bords accessibles à partir d'un sommet sont traçés avant que le sommet ne soit terminé. C'est une caractéristique du DFS, mais pas du BFS. En fait, c'est la définition du DFS.
En raison de cette caractéristique, nous savons que lorsque le premier sommet dans un cycle est démarré :
- Aucun des bords du cycle n'a été traçé. Nous le savons car on ne peut y accéder que depuis un autre sommet du cycle, et nous parlons du premier sommet à démarrer.
- Tous les bords non traçés accessibles à partir de ce sommet seront traçs avant qu'il ne soit terminé, et cela inclut tous les bords du cycle, car aucun d'entre eux n'a encore été traçé. Par conséquent, s'il y a un cycle, nous trouverons un bord de retour au premier sommet après qu'il soit démarré, mais avant qu'il ne soit terminé; et
- Comme tous les bords traçés sont accessibles à partir de chaque sommet démarré mais non terminé, trouver un bord vers un tel sommet démarré-mais-non-terminé indique toujours un cycle.
Ainsi, s'il y a un cycle, alors nous sommes assurés de trouver un bord vers un sommet démarré-mais-non-terminé (2), et si nous trouvons un tel bord, alors nous sommes assurés qu'il y a un cycle (3).
C'est pourquoi DFS est utilisé pour trouver des cycles dans des graphes dirigés.
Le BFS ne fournit aucune garantie, donc cela ne fonctionne tout simplement pas. (nonobstant les algorithmes de détection de cycle parfaitement valables qui incluent BFS ou similaire en tant que sous-procédure)
En revanche, un graphe non dirigé a un cycle chaque fois qu'il existe deux chemins entre n'importe quel couple de sommets, c'est-à-dire lorsqu'il ne s'agit pas d'un arbre. Cela est facile à détecter pendant BFS ou DFS -- Les bords tracés vers de nouveaux sommets forment un arbre, et tout autre bord indique un cycle.
7 votes
Dans les graphes dirigés, seul DFS peut être utilisé pour détecter un cycle; mais dans les graphes non dirigés, les deux peuvent être utilisés.
2 votes
Êtes-vous sûr que vous continuez à dire que BFS n'est pas applicable sur un graphe dirigé? ref: geeksforgeeks.org/detect-cycle-in-a-directed-graph-using-bfs