Oto standardowy pseudokod pierwszego wyszukiwania szerokości:
{ 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
Tutaj push
i pop
zakłada się, że są to operacje kolejkowe. Ale co jeśli są operacjami stosowymi? Czy wynikowy algorytm odwiedza wierzchołki w pierwszej kolejności według głębokości?
Jeśli głosowałeś na komentarz „to jest trywialne”, proszę o wyjaśnienie, dlaczego jest to trywialne. Uważam, że problem jest dość trudny.
algorithms
graphs
rgrig
źródło
źródło
pop
do operacji stosu lub kolejki otrzymaliśmy dfs lub bfs. Łatwo jest również napisać pseudo-kod, dla którego na pierwszy rzut oka wydaje się, że to prawda, ale tak nie jest. ics.uci.edu//~eppstein/161/960215.html to odpowiednie odniesienie.Odpowiedzi:
Nie, to nie to samo co DFS.
Rozważ wykres
Jeśli popchniesz węzły w kolejności od prawej do lewej, algorytm wyświetli przejście:
podczas gdy DFS by się tego spodziewał
Problem występuje, ponieważ oznaczysz go jako widoczny podczas pchania, a nie podczas odwiedzania. Jak wskazano w komentarzach, jeśli zaznaczysz w czasie wizyty, twoje wymagania dotyczące miejsca mogą wzrosnąć do zamiast do .Θ(V+E) O(V)
Zgadzam się, problem nie jest trywialny.
źródło