Frod

25.10.2026

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

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

Обход графа в ширину на Python: понимание алгоритма и его применения

Когда речь идет о работе с графами и их обходе, существует несколько методов, которые можно использовать для поиска всех узлов и ребер графа. В этом материале мы сосредоточимся на одном из наиболее популярных алгоритмов — обходе графа в ширину (BFS). Мы разберемся в том, как его реализовать на Python, а также рассмотрим несколько практических применений этого алгоритма.

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

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

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

Чтобы реализовать обход графа в ширину на Python, можно использовать следующие шаги:

  1. Создать класс, представляющий граф. В качестве атрибутов можно использовать словарь, где ключами являются узлы, а значением является список соседних узлов.
  2. Создать функцию, которая инициализирует очередь и добавляет в нее начальный узел.
  3. Создать функцию, которая реализует сам алгоритм обхода графа в ширину. Эта функция должна удалять узлы из очереди и добавлять в нее соседние узлы, пока не будет посещено все узлы графа.

Реализация обхода графа в ширину на Python может выглядеть следующим образом:

from collections import deque

class Graph:
 def __init__(self):
 self.nodes = {}

 def add_node(self, node, neighbors):
 self.nodes[node] = neighbors

 def bfs(self, start_node):
 queue = deque([start_node])
 visited = set()

 while queue:
 node = queue.popleft()
 if node not in visited:
 visited.add(node)
 print(node)

 for neighbor in self.nodes[node]:
 if neighbor not in visited:
 queue.append(neighbor)

Создаем граф
graph = Graph()

Добавляем узлы и ребра графа
graph.add_node('A', ['B', 'C'])
graph.add_node('B', ['A', 'D', 'E'])
graph.add_node('C', ['A', 'F'])
graph.add_node('D', ['B'])
graph.add_node('E', ['B', 'F'])
graph.add_node('F', ['C', 'E'])

Обходим граф в ширину
graph.bfs('A')

Применения обхода графа в ширину

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

  • Поиск в ширину в играх: Обход графа в ширину может использоваться для реализации поиска в ширину в играх, где игрок должен найти путь к цели, избегая препятствий.
  • Алгоритм Дейкстры: Обход графа в ширину является основой алгоритма Дейкстры, который используется для нахождения кратчайшего пути между двумя узлами графа.
  • Работа с социальными сетями: Обход графа в ширину может использоваться для анализа социальных сетей и нахождения наиболее популярных узлов (пользователей).

В этом материале мы рассмотрели обход графа в ширину на Python и его основные понятия. Мы также увидели, как реализовать этот алгоритм на Python и рассмотрели некоторые практические применения его использования.