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