Aqui está o pseudocódigo padrão para a primeira pesquisa de largura:
{ 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
Aqui push
e pop
são consideradas operações de fila. Mas e se forem operações de pilha? O algoritmo resultante visita os vértices em ordem de profundidade primeiro?
Se você votou no comentário "isso é trivial", peço que explique por que é trivial. Acho o problema bastante complicado.
algorithms
graphs
rgrig
fonte
fonte
pop
para uma operação de pilha ou fila, tenhamos dfs ou bfs. Também é fácil escrever pseudocódigo para o qual, a princípio, parece que isso é verdade, mas não é. ics.uci.edu//~eppstein/161/960215.html é uma referência relevante.Respostas:
Não, isso não é o mesmo que um DFS.
Considere o gráfico
Se você pressionar os nós na ordem da direita para a esquerda, o algoritmo fornecerá uma travessia:
enquanto um DFS esperaria que fosse
O problema ocorre porque você o marca como visto no momento do envio, e não no momento da visita. Conforme apontado nos comentários, se você marcar no momento da visita, seus requisitos de espaço poderão subir para vez de .Θ(V+E) O(V)
Eu concordo, o problema não é trivial.
fonte