Voici le pseudocode standard pour la première recherche en largeur:
{ seen(x) is false for all x at this point }
push(q, x0)
seen(x0) := true
while (!empty(q))
x := pop(q)
visit(x)
for each y reachable from x by one edge
if not seen(y)
push(q, y)
seen(y) := true
Ici push
et pop
sont supposés être des opérations de file d'attente. Mais que se passe-t-il si ce sont des opérations de pile? L'algorithme résultant visite-t-il les sommets en profondeur-premier ordre?
Si vous votiez pour le commentaire "c'est trivial", je vous demanderais d'expliquer pourquoi c'est trivial. Je trouve le problème assez délicat.
algorithms
graphs
grog
la source
la source
pop
à une pile ou à une file d'attente, nous obtenions dfs ou bfs. Il est également facile d'écrire du pseudo-code pour lequel il apparaît au début que c'est vrai, mais ce n'est pas le cas. ics.uci.edu//~eppstein/161/960215.html est une référence pertinente.Réponses:
Non, ce n'est pas la même chose qu'un DFS.
Considérons le graphique
Si vous poussez les nœuds de droite à gauche, l'algorithme vous donne un parcours:
alors qu'un DFS s'attend à ce qu'il soit
Je suis d'accord, le problème n'est pas trivial.
la source