Первый обход по ширине (или поиск) для графика аналогичен первому обходу по ширине дерева (см. Способ 2 этого поста ). Единственный улов здесь, в отличие от деревьев, графы могут содержать циклы, поэтому мы можем снова прийти к одному и тому же узлу. Чтобы избежать обработки узла более одного раза, мы используем логический массив посещений. Для простоты предполагается, что все вершины достижимы из начальной вершины.
Например, на следующем графике мы начинаем обход с вершины 2. Когда мы подходим к вершине 0, мы ищем все смежные ее вершины. 2 также является смежной вершиной 0. Если мы не пометим посещенные вершины, то 2 будет обработан снова, и он станет непрерывным процессом. Первым обходом по ширине следующего графика является 2, 0, 3, 1.
Ниже приведены реализации простого обхода в ширину из данного источника.
Реализация использует представление списка смежности графов. Контейнер списка STL используется для хранения списков соседних узлов и очередей узлов, необходимых для обхода BFS.
|
Джава
|
python3
|
Выход:
Following is Breadth First Traversal (starting from vertex 2) 2 0 3 1
Иллюстрация:
Обратите внимание, что приведенный выше код пересекает только вершины, достижимые из данной исходной вершины. Все вершины могут быть недоступны из данной вершины (например, отключенный граф). Чтобы напечатать все вершины, мы можем изменить функцию BFS, чтобы она выполняла обход, начиная со всех узлов один за другим (как в модифицированной версии DFS ).
Сложность времени: O (V + E), где V — количество вершин в графе, а E — количество ребер в графе.
Вы можете также увидеть ниже:
- Последние статьи о BFS
- Глубина Первый обход
- Приложения ширины первого обхода
- Приложения глубины первого поиска
Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.
Рекомендуемые посты:
- Поиск в глубину или DFS для графика
- Нахождение минимального размера покрытия вершины графа с помощью бинарного поиска
- Приложения ширины первого обхода
- Преобразовать неориентированный граф в ориентированный граф так, чтобы не было пути длиной больше 1
- Реализация графов с использованием STL для конкурентного программирования | Набор 2 (Весовой график)
- Определить цикл в графе, используя степени узлов графа
- Лучший первый поиск (информированный поиск)
- Итеративный углубленный поиск (IDS) или Итеративный углубленный поиск в глубину (IDDFS)
- Транспонировать граф
- Доминантный набор графа
- BFS для отключенного графа
- Сумма зависимостей в графе
- Граф и его представления
- Острова в графе с использованием BFS
- График гиперкуба
0.00 (0%) 0 votes