Да, если алгоритм DFS изменяется так, как вы упомянули, его можно использовать для поиска кратчайших путей от корня в невзвешенном графе. Проблема в том, что, модифицируя алгоритм, вы в корне изменили его.
Может показаться, что я преувеличиваю, так как изменение внешне незначительно, но оно меняет больше, чем вы думаете.
Рассмотрим граф с n
узлами, пронумерованными от 1
до n
. Пусть между каждым k
и k + 1
будет грань. Также, позвольте 1
быть подключенным к каждому узлу.
Поскольку DFS может выбирать соседних соседей в любом порядке, давайте также предположим, что этот алгоритм всегда выбирает их в возрастающем числовом порядке.
Теперь попробуйте запустить алгоритм в своей голове или на компьютере с правами root 1
.
Сначала алгоритм достигнет n
с шагом n-1
, используя ребра между 1-2
, 2-3
и так далее. Затем, после возврата, алгоритм переходит ко второму соседу 1
, а именно 3
. На этот раз будет n-2
шагов.
Тот же процесс будет повторяться до тех пор, пока алгоритм, наконец, не увидит 1-n
.
Алгоритм потребует O (n ^ 2), а не O (n) шагов, чтобы закончить. Помните, что V = n & E = 2 * n - 3
. Так что это не O (V + E).
На самом деле, алгоритм, который вы описали, всегда будет заканчиваться в O (V ^ 2) на невзвешенных графиках. Я оставлю доказательство этого утверждения в качестве упражнения для читателя.
O (V ^ 2) не так уж и плохо. Особенно если граф плотный. Но поскольку BFS уже дает ответ в O (V + E), никто не использует DFS для расчета кратчайшего расстояния.