Шаг 196.
Основы языка Haskell.
Реализация алгоритмов на графах... . Вычисление компонентов связности графа

    На этом шаге мы рассмотрим реализацию этого алгоритма.

    С помощью поиска на графе можно ответить на некоторые вопросы относительно структуры графа.

    Рассмотрим две задачи, связанные с поиском:

Определение.
Связным компонентом графа называется максимальный связный подграф.

    Для вычисления компонентов связности графа воспользуемся уже построенной функцией depthFirst.

    Рассмотрим ещё раз работу функции defi. Заметим, что когда к списку просмотренных вершин visited добавляется новая вершина, список path представляет собой путь из этой вершины в начальную. Поэтому по окончанию работы в списке visited содержатся только те вершины, которые можно соединить с начальной.

    Можно показать (см. [1]), что в этом списке содержатся все вершины, обладающие этим свойством.

    Таким образом, функция depthFirst вычисляет список вершин связной компоненты вершины root, и теперь мы готовы решить задачу о построении всех компонентов связности данного графа.

    Приведем пример построения компонентов связности графа.

Раскрыть/скрыть текст примера.

    Библиотека для работы с графами, представленными ассоциативными списками смежности.

Раскрыть/скрыть текст библиотеки.

Все файлы можно взять здесь.
(1)Липский В. Комбинаторика для программистов. - М.: Мир, 1988. - 213 с.

    На следующем шаге мы рассмотрим построение остовного дерева связного графа с помощью поиска в глубину.




Предыдущий шаг Содержание Следующий шаг