Вот стандартный псевдокод для поиска в ширину:
{ 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
Здесь push
и pop
предполагаются операции очереди. Но что, если они являются стековыми операциями? Полученный алгоритм посещает вершины в порядке первой глубины?
Если бы вы проголосовали за комментарий «это тривиально», я бы попросил вас объяснить, почему он тривиален. Я нахожу проблему довольно сложной.
algorithms
graphs
rgrig
источник
источник
pop
в стек или операцию очереди, мы получим dfs или bfs. Также легко написать псевдокод, для которого сначала кажется, что это правда, но это не так. ics.uci.edu//~eppstein/161/960215.html является соответствующей ссылкой.Ответы:
Нет, это не то же самое, что DFS.
Рассмотрим график
Если вы перемещаете узлы в порядке справа налево, алгоритм дает вам обход:
в то время как DFS будет ожидать, что это будет
Я согласен, проблема не тривиальная.
источник