Поиск в ширину ( BFS )
Поиск в ширину (BFS, breath-first search), используется для решения задач обработки графов, связанных с нахождением кратчайших путей. Поиск в ширину — один из базисных алгоритмов, составляющий основу многих других. Например, алгоритм Дейкстры поиска кратчайших путей и алгоритм Прима поиска минимального покрывающего дерева могут рассматриваться как обобщения поиска в ширину.
Пусть задан граф и фиксированная начальная вершина s. Алгоритм поиска в ширину перечисляет все достижимые из s (если идти по ребрам) вершины в порядке возрастания расстояния от s. В процессе поиска из графа выделяется часть, которая называется деревом поиска в ширину с корнем в s. Она содержит все достижимые из s вершины (и только их). Алгоритм поиска в ширину использует цвета вершин. Каждая из вершин вначале белая. Будучи обнаруженной, она становится серой; она станет черной, когда будет полностью обработана, то есть когда все смежные с ней вершины окрашены.
1. Начинаем поиск с произвольной вершины s. Формируем множество текущих вершин A, включив в него вершину s. 1 2 5 4 А: 1 10 6 8 7 9 3 11 12 13
2. Идем в ранее не пройденные вершины по всем дугам с начальной вершиной 4 из множества A. Запоминаем эти дуги. Формируем множество A, включив в него конечные вершины 9 пройденных дуг. 1 2 3 5 8 7 10 6 11 А: 5 42 1 12 13
3. Процесс поиска (пункт 2) заканчивается, когда множество A станет пустым 1 2 3 5 4 8 7 9 10 6 11 12 А: Очередь 12 8 6 10 9 7 3 5 4 2 13 11 пуста. Обход завершен. 13