Я пытаюсь понять поиск в глубину. Не знаю, прав ли я

http://i.stack.imgur.com/sEJKz.png

На изображении показан график. Это правильный обход в глубину? Или у меня совершенно неверная мысль? Мое понимание dfs дается отправной точкой, вы смотрите на все соседние узлы. Затем произвольно выберите один и рекурсивно «посетите» этот узел. Начиная с v, я выбрал узел 2, чтобы перейти к следующему. Цифры от 1 до 8 показывают путь.

Редактировать: кажется, я перепутал числа 2 и 3! Их следует поменять местами.

Изображение 2: http://i.stack.imgur.com/KdWl6.png


person user2900772    schedule 10.01.2014    source источник


Ответы (1)


То, что вы показываете, является правильным возможным порядком поиска DFS. DFS посещает рекурсивно, как вы сказали, отмечая узлы, которые он уже посетил. Когда он достигает точки, в которой он не может рекурсивно вернуться к непосещенному узлу, он будет возвращаться до тех пор, пока не будет такой точки или поиск не завершится, поскольку все узлы помечены как посещенные.

В вашем случае он посещает 1, 2 и 3. В 3 он возвращается к 2, затем переходит к 4, 5, 6, 7, 8. Затем он возвращается, но посещаются все узлы, поэтому поиск заканчивается этим порядок посещения.

Узел, отмеченный 3 в этом случае, также мог быть 2 или 8. Например, DFS мог уйти (используя метки на вашем рисунке): 1, 2, 4, 5, 6, 7, 8, вернуться к 2, 3, прекратить.

person Jake Cobb    schedule 10.01.2014
comment
Таким образом, ничего не изменяя на картинке, переход от 1 к 3, а затем к 2, а затем к остальным узлам приведет к пути 1, 3, 2, 4, 5, 6, 7, 8 без возврата? Все ребра не нужно посещать, и это правильный путь dfs, верно? - person user2900772; 10.01.2014
comment
Да это правильно. Реализация может или не может вернуться к началу перед завершением, в зависимости от того, как она отслеживает посещенные узлы, но концептуально в этом случае ей не нужно возвращаться, поскольку все узлы посещаются, как только он достигает 8. - person Jake Cobb; 10.01.2014
comment
Спасибо. Еще вопрос, чем отличается путь для bfs и почему? - person user2900772; 10.01.2014
comment
Я добавил еще одно изображение в описание вопроса. Цифры теперь на месте. Правильно ли я говорю, что показанный обход одинаков для bfs и dfs? - person user2900772; 10.01.2014