Algolume

BFS: Обход графа в ширину

Задача: Дан неориентированный связный граф в виде списка смежности. Нужно выполнить обход в ширину (BFS), начиная с заданной стартовой вершины, и восстановить для каждой посещённой вершины путь от старта.

Формат входных данных: В первой строке два числа n и m (1 ≤ n, m ≤ 100000) — число вершин и рёбер. В следующих m строках — пары v u, обозначающие ребро. Последняя строка — стартовая вершина s.

Формат выходных данных: В первой строке выведите порядок обхода вершин через пробел. Затем для каждой посещённой вершины в отдельной строке выведите путь от стартовой вершины до неё.

Решение: Используем очередь (deque) из collections, массив used для отметки посещённых, и массив parent для восстановления пути.

Начальные структуры:

used = [False] * (n + 1)

parent = [-1] * (n + 1)

Функция bfs() извлекает вершину из очереди, помечает соседей, ставит для них parent и добавляет в очередь.

Восстановление пути для вершины v через массив parent:

Визуализируйте алгоритм! (Python3)

Ограничения: 1 ≤ n ≤ 15, m ≤ 30 для стабильной работы.

Логическое название Название переменной
graph
parent