Посещение узлов, когда вы вытаскиваете их из очереди, будет таким же, как и dfs, это не гарантирует вам кратчайший путь. Если вы посетите узлы, то pu sh это в очереди, это даст вам кратчайший путь, учитывая случай :
узел 1 связан с узлом 2, а узел 2 с узлом 3 и узел3 с узлом node1 в форме cycli c
мы будем использовать очередь > q; первый элемент пары - это узел, а второй элемент - это расстояние до узла от начала.
Случай 1: это циклический c граф с начальным узлом как 1, мы хотим найти минимальное расстояние от 1 до 3 .we pu sh 1 в очередь. мы вытолкнем его, а pu sh node 2 и 3 в очередь, не посещая его. когда мы выскочим 2, мы посетим 2 и pu sh 3, поэтому, когда мы pop out 3 мы проверим, что всплывающий узел равен 3, и мы сохраняем минимальное расстояние. поэтому в этом случае наше минимальное расстояние равно 2, что мы выяснили с помощью обхода глубины.
Но ответ должен быть 1, поскольку 1 напрямую связан с 3.
случай 2: мы посетим узел, прежде чем помещать его в очередь
начальный узел равен 1 и pu sh it.visit 2 и 3 а затем pu sh оба в стек. когда мы вытолкнем узел 2, мы проверяем соседние элементы, и оба 3 и 2 посещены. поэтому мы вытолкнем 3 и проверим, является ли он узлом назначения. поэтому мы сохраним расстояние. поэтому в этом случае от dist [1] до dist [3] = 0 + 1, что равно 1.