Задача: Дан неориентированный связный граф в виде списка смежности. Нужно выполнить обход в ширину (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: