страница 1
|
|||||||||||||||||||||||||||||||||||||||||||
Похожие работы
|
Поиск в глубину - страница №1/1
Поиск в глубинуЗадан граф G с N вершинами и M дугами. Поиск в глубину применяется во многих задачах, например в задачах поиска компонент связности, мостов, точек сочленения, сильно связных компонент, топологической сортировке. Поиск в глубину реализуется следующей рекурсивной процедурой: DFS(a) Пометить вершину a как пройденную Для любого ребра (a,b) Если вершина b не пройдена, то DFS(b) Пусть G — неорграф. Разобъем множество его вершин на компоненты связности по следующему принципу: две вершины лежат в одной компоненте связности, когда есть путь из одной вершины в другую. Если выполнить DFS(a) при условии, что все вершины изначально не помечены, то алгоритм посетит все вершины, достижимые из a. Поэтому его можно применять для поиска связных компонент. Для этого будем для каждой помеченной вершины хранить номер ее компоненты связности, который будем также называть цветом. Непройденные вершины считаем непокрашенными. Алгоритм работает так: Покрасить вершину a в цвет c Для любого ребра (a,b) Если вершина b не покрашена, то DFS(b,c) Изначально все вершины не покрашены c := 0 Для любой вершины a, Если a не покрашена, то c := c+1 DFS(a,c) DFS(a) Пометить вершину a Для любого ребра (a,b), Если вершина b не помечена, то DFS(b) Добавить a в начало списка вершин TOPOLOGICAL_SORT Изначально список вершин пуст, никакая вершина не помечена Для любой вершины a, Если a не помечена, то DFS(a) |
|