Frod

02.10.2026

обход в ширину с++

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

Обход в ширину с++: полное руководство для начинающих и профессионалов

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

Что такое обход в ширину?

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

Почему стоит выбрать обход в ширину?

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

Реализация обхода в ширину с++: пример кода

#include <iostream>
#include <vector>
#include <queue>

using namespace std;

void bfs(const vector<vector<int>>& graph, int start) {
 vector<bool> visited(graph.size(), false);
 queue<int> q;

 visited[start] = true;
 q.push(start);

 while (!q.empty()) {
 int current = q.front();
 q.pop();

 cout << "Посещена вершина: " << current << endl;

 for (int neighbor : graph[current]) {
 if (!visited[neighbor]) {
 visited[neighbor] = true;
 q.push(neighbor);
 }
 }
 }
}

int main() {
 // Пример графа
 vector<vector<int>> graph = {
 {1, 2}, // вершина 0
 {0, 3, 4}, // вершина 1
 {0, 4}, // вершина 2
 {1, 5}, // вершина 3
 {1, 2}, // вершина 4
 {3} // вершина 5
 };

 int startVertex = 0;
 bfs(graph, startVertex);

 return 0;
}

Ключевые моменты при реализации BFS

  • Используйте очередь (std::queue) для хранения вершин уровня.
  • Ведите массив посещений (visited), чтобы избегать циклов и повторных обходов.
  • Изначально помечайте стартовую вершину как посещённую и добавляйте её в очередь.

Какие есть нюансы?

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

Итоги

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

Если хотите углубиться, попробуйте реализовать алгоритм поиска кратчайшего пути или обнаружение компонент связности — это отличная практика!