q
- очередь («первым пришел - первым обслужена», FIFO), типичная для BFS. На передний очереди указывается f
(отсюда извлекаются значения), а на задний очереди указывается r
(где новыйзначения добавляются в очередь).
Сначала очередь пуста, а соседи j
текущей вершины v
добавляются в очередь (на ее "задней" стороне). Когда вершина j
находится в очереди, ее visit[j]
устанавливается в 1, в противном случае это 0. Это предотвращает добавление одной и той же вершины дважды в очередь.
С началаочередь, следующая вершина вытягивается. Теперь он считается посещенным, поэтому visited[v]
теперь установлен на 1, а visit[v]
очищен (это немного излишне, но все в порядке). Опять же, это гарантирует, что вершины посещаются (и выводятся) только один раз.
Используя очередь, мы уверены, что вершины посещаются в порядке их расстояния (с точки зрения количества ребер) от начальной вершины. .
Поскольку существует n
вершин, все они будут посещены, когда внешний цикл будет повторяться n
раза. Вот что имеет значение k
.