Недавно возник вопрос про реализацию поиска в глубину без рекурсии. Я умею просто обходить граф и помечать вершины из одной компоненты используя O(V) памяти на стек. При использовании рекурсии легко сделать пометки tin, tout(время входа и время выхода из вершины). А используя стек мне нужно O(V+E) памяти. Вопрос в том, чтобы использовать O(v) памяти на стек и получить пометки tin, tout.
http://codeforces.net/blog/entry/8073
Thanks
А зачем О(V+E) памяти? Тебе ведь нужно просто промоделировать рекурсию. Помимо вершины, в стек еще нужно кидать номер ребра, по которому ты перешел во время просмотра всех ребер из текущей вершины. Грубо говоря, ты просто запоминаешь ту самую локальную переменную, которая у тебя в обычном дфс является счетчиком цикла, чтобы при возврате не смотреть с начала все ребра, а именно с места, где ты в последний раз остановился.
Спасибо. Да я забыл, что нам не нужна память на (вершина, страрый счетчик).