Блог пользователя ser398

Автор ser398, 13 лет назад, По-русски

Недавно возник вопрос про реализацию поиска в глубину без рекурсии. Я умею просто обходить граф и помечать вершины из одной компоненты используя O(V) памяти на стек. При использовании рекурсии легко сделать пометки tin, tout(время входа и время выхода из вершины). А используя стек мне нужно O(V+E) памяти. Вопрос в том, чтобы использовать O(v) памяти на стек и получить пометки tin, tout.

Теги dfs
  • Проголосовать: нравится
  • +5
  • Проголосовать: не нравится

»
13 лет назад, скрыть # |
 
Проголосовать: нравится +4 Проголосовать: не нравится
»
13 лет назад, скрыть # |
 
Проголосовать: нравится +5 Проголосовать: не нравится

А зачем О(V+E) памяти? Тебе ведь нужно просто промоделировать рекурсию. Помимо вершины, в стек еще нужно кидать номер ребра, по которому ты перешел во время просмотра всех ребер из текущей вершины. Грубо говоря, ты просто запоминаешь ту самую локальную переменную, которая у тебя в обычном дфс является счетчиком цикла, чтобы при возврате не смотреть с начала все ребра, а именно с места, где ты в последний раз остановился.