Ось стандартний псевдокод для першого пошуку:
{ 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
@Joe, Dave: будь ласка, дивіться наступну мета-дискусію
—
Gilles 'SO- перестань бути злим'
Можна записати псевдо-код так, щоб просто змінивши
—
Джо,
pop
стек або операцію черги, ми отримаємо dfs або bfs. Також легко написати псевдо-код, для якого спочатку виявляється, що це правда, але це не так. ics.uci.edu//~eppstein/161/960215.html - це відповідна посилання.