Hier ist der Standard-Pseudocode für die Breitensuche:
{ 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
Hier push
und pop
werden Warteschlangenoperationen angenommen. Aber was ist, wenn es sich um Stapeloperationen handelt? Besucht der resultierende Algorithmus Eckpunkte in der Reihenfolge der Tiefe zuerst?
Wenn Sie für den Kommentar "das ist trivial" gestimmt haben, würde ich Sie bitten zu erklären, warum es trivial ist. Ich finde das Problem ziemlich knifflig.
algorithms
graphs
rgrig
quelle
quelle
pop
wir durch einfaches Wechseln in einen Stapel oder eine Warteschlangenoperation dfs oder bfs erhalten. Es ist auch einfach, Pseudo-Code zu schreiben, für den es auf den ersten Blick so aussieht, als ob dies wahr ist, aber es ist nicht wahr. ics.uci.edu//~eppstein/161/960215.html ist eine relevante Referenz.Antworten:
Nein, dies ist nicht dasselbe wie eine DFS.
Betrachten Sie die Grafik
Wenn Sie die Knoten in der Reihenfolge von rechts nach links verschieben, werden Sie vom Algorithmus durchlaufen:
während ein DFS es erwarten würde
Das Problem tritt auf, weil Sie es als gesehen zum Zeitpunkt des Pushings und nicht zum Zeitpunkt des Besuchs markieren. Wie in den Kommentaren erwähnt, kann Ihr Platzbedarf zum Zeitpunkt des Besuchs bei und nicht bei .O ( V )Θ(V+E) O(V)
Ich stimme zu, das Problem ist nicht trivial.
quelle