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.
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.