Frod

09.10.2026

обход графа в ширину python

Frod — свобода без границ

Обход графа в ширину Python: как быстро и эффективно реализовать

Обход графа в ширину (BFS — Breadth-First Search) — один из самых популярных и простых алгоритмов для поиска путей, анализа связности и решения множества задач в теории графов. Если вы занимаетесь программированием на Python и хотите научиться быстро реализовать обход графа в ширину, эта статья поможет вам понять основные принципы и представить практический пример.

Почему именно BFS?

Обход графа в ширину позволяет исследовать вершины слоями, начиная с исходной и двигаясь дальше. Этот метод идеально подходит для поиска кратчайшего пути в невзвешенных графах, определения компонент связности и даже для задач маршрутизации.

Основные принципы обхода графа в ширину

  • Использование очереди: В BFS вершина сначала помещается в очередь, затем последовательно извлекается, а все её соседние вершины, ещё не посещённые ранее, добавляются в очередь.
  • Метка посещения: Чтобы избежать зацикливания и повторных посещений, ведётся массив или множество посещённых вершин.
  • Порядок обхода: Вершины обрабатываются по мере появления в очереди, что обеспечивает слойность обхода.

Реализация обхода графа в ширину на Python

Рассмотрим пример, где граф представлен в виде списка смежности. Такой формат наиболее удобен для реализации BFS.

from collections import deque

def bfs(graph, start):
 visited = set() # Множество посещённых вершин
 queue = deque([start]) # Очередь для хранения вершин для исследования
 traversal_order = [] # Для хранения порядка обхода

 while queue:
 vertex = queue.popleft()
 if vertex not in visited:
 visited.add(vertex)
 traversal_order.append(vertex)
 # Добавляем в очередь всех соседей, которых ещё не посещали
 for neighbor in graph[vertex]:
 if neighbor not in visited:
 queue.append(neighbor)
 return traversal_order

Пример графа в виде словаря списков смежности
graph = {
 'A': ['B', 'C'],
 'B': ['A', 'D', 'E'],
 'C': ['A', 'F'],
 'D': ['B'],
 'E': ['B', 'F'],
 'F': ['C', 'E']
}

Запуск алгоритма
start_node = 'A'
print("Обход графа в ширину:", bfs(graph, start_node))

Вывод:

Обход графа в ширину: ['A', 'B', 'C', 'D', 'E', 'F']

Важные нюансы и рекомендации

  • Граф может быть ориентированным или неориентированным. В примере выше — неориентированный.
  • Обход в ширину подходит для поиска кратчайших путей в невзвешенных графах.
  • Можно оптимизировать память, избегая повторной обработки вершин.
  • Для больших графов важно учитывать эффективность реализации и использовать структуры данных, такие как deque.

Итог

Обход графа в ширину — базовый, но мощный алгоритм, который легко реализовать на Python. Он широко применяется в задачах анализа данных, сетевого моделирования, поиска путей и других областях. Освоив его, вы существенно расширите свои возможности в области работы с графами и информационной безопасности.