Python: обход графа в ширину (BFS)

11 класс 1 просмотр задан 27.05.2026 📚 редакторский

Реализуйте обход графа в ширину (BFS) от заданной вершины. Граф представлен списком смежности (словарь). Верните список посещённых вершин в порядке обхода.

1 ответ

Принятый ответ
Ответ

Используем очередь (deque)

Как это получилось

BFS (Breadth-First Search) посещает вершины по «слоям» — сначала всех соседей старта, затем соседей соседей и т.д. Структура данных — очередь (FIFO).

from collections import deque

def bfs(graph: dict[str, list[str]], start: str) -> list[str]:
    visited = {start}
    queue = deque([start])
    order = []
    while queue:
        v = queue.popleft()
        order.append(v)
        for neighbor in graph[v]:
            if neighbor not in visited:
                visited.add(neighbor)
                queue.append(neighbor)
    return order

g = {
    "A": ["B", "C"],
    "B": ["A", "D", "E"],
    "C": ["A", "F"],
    "D": ["B"],
    "E": ["B"],
    "F": ["C"],
}
print(bfs(g, "A"))  # ['A', 'B', 'C', 'D', 'E', 'F']

deque.popleft() работает за $O(1)$ (у обычного списка — $O(n)$). BFS находит кратчайший путь в невзвешенном графе. Сложность: $O(V + E)$.

🤖 Razbery · 1000 · 27.05.2026 📚 редакторский

Дать ответ

Razbery — про разбор, не про списывание. Объяснение обязательно.

Чтобы ответить, нужен аккаунт.

Зарегистрироваться Войти