Шаг 198.
Основы языка Haskell. Реализация алгоритмов на графах... . Построение остовного дерева связного графа с помощью поиска в ширину

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

    Теперь зададимся вопросом, какими свойствами будет обладать остовное дерево, построенное с помощью процедуры поиска в ширину?

    При поиске в ширину просмотренные вершины располагаются в порядке неубывания их расстояния от начальной вершины. Поэтому в остовном дереве, построенном с помощью поиска в ширину, единственный путь, соединяющий какую-либо вершину с начальной, совпадает с кратчайшим путем в исходном графе между этими двумя вершинами.

    Необходимые для построения остовного дерева с помощью поиска в ширину изменения в функции brfi более существенны по сравнению с аналогичными изменениями в функции defi. Дело в том, что при поиске в ширину нам не нужна была информация о предшественнике рассматриваемой вершины - в этом смысле поиск в ширину нелокален. Поэтому вместо очереди вершин, предназначенных для просмотра, мы введем очередь, состоящую непосредственно из элементов структуры смежности.

    Приведем текст такой функции.

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

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

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

Все файлы можно взять здесь.

    Обратите внимание, что при работе функции spbf параметр car всегда есть список соседей вершины, определяемой параметром father, что позволяет знать предшественника текущей вершины.

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




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