
- •2. Основные определения теории графов
- •2.1.1. Задание графа множествами вершин и линий
- •2.1.2. Задание графа с помощью отображения
- •2.1.3. Задание графа с помощью обратного отображения
- •2.1.4. Матричное представление графа
- •2.2. Достижимость и обратная достижимость вершин графа
- •2.2.1. Матрица достижимостей и матрица обратных достижимостей
- •2.2.2. Определение матриц достижимостей и обратных достижимостей с помощью прямых и обратных отображений
- •2.2.3. Определение матриц ограниченных достижимостей
- •2.2.4. Определение матриц достижимостей и обратных
- •2.3. Разбиение графа на подграфы
- •2.3.1. Определение существенных вершин
- •2.3.2. Определение сильных компонент графа
- •2.3.3. Определение сильных компонент графа
- •2.3.4. Определение оптимальной базы графа
- •2.3.5. Определение оптимальной антибазы графа
- •3. Алгоритмы оптимизации на графовых моделях
- •3.1. Решение задачи о максимальном потоке методом расстановки пометок на графе (алгоритм Форда-Фалкерсона)
- •Несколько источников и стоков
- •3.2. Решение задачи о максимальном потоке в табличной форме
- •3.3. Решение задачи о максимальном потоке в графе
- •3.4. Решение задачи о кратчайшем пути в транспортной сети непосредственно по графу
- •3.5. Решение задач о кратчайших путях в табличной форме
- •3.5.1. Определение кратчайшего пути между двумя
- •3.5.2. Определение длин кратчайших путей между
- •3.5.3. Решение задачи о кратчайшем пути в графе
- •3.6. Кратчайший остов графа
- •3.6.1. Понятие дерева
- •3.6.2. Определение числа остовных деревьев графа
- •3.6.3. Алгоритм построения всех остовных деревьев графа
- •3.6.4. Определение кратчайшего остова неориентированного
- •3.6.5. Решение задачи о кратчайшем пути в графе
- •3.7. Задача о назначениях
- •3.7.1. Матричная формулировка задачи
- •3.7.3. Решение задачи о назначениях
- •3.7.4. Модификации задачи о назначениях
- •3.8. Задача о наименьшем покрытии
- •3.8.1. Постановка задачи
- •3.8.2. Алгоритм решения задачи
- •3.8.3 Решение задачи о наименьшем покрытии
- •Библиографический список
- •Оглавление
- •Редактор м.Е. Цветкова Корректор н.А. Орлова
- •390005, Рязань, ул. Гагарина, 59/1.
3.6. Кратчайший остов графа
3.6.1. Понятие дерева
Одним из наиболее важных понятий теории графов является дерево. Его упрощенное определение можно дать так. Дерево – граф, имеющий начало, от которого дуги (ребра) расходятся, как ветви дерева [2]. Дерево, как и граф, может быть ориентированным и неориентированным.
Неориентированное дерево– это сильно связный граф, не имеющий циклов. (Понятие сильно связного графа дано в п.2.3.2).
Ориентированное деревопредставляет собой ориентированный граф без циклов, в котором в каждую вершину должна быть направлена только одна дуга, кроме корневой вершины, куда не заходит ни одна дуга. Остовное дерево графа, или остов графа, имеет то же самое множество вершин, что и исходный граф, но множество дуг (ребер) остовного дерева является подмножеством множества дуг (ребер) исходного графа.
3.6.2. Определение числа остовных деревьев графа
В некоторых ситуациях возникает необходимость в построении полного списка остовных деревьев графа. Например, в том случае, когда надо отобрать «наилучшее» дерево, а критерий, позволяющий осуществить такой отбор, является очень сложным, так что непосредственное решение задачи оптимизации, не использующее перечисление всех остальных деревьев, оказывается невыполнимым.
Определим число всех остовных деревьев для неориентированного графа. Пусть матрица M={mij}для неориентированного графа определена следующим образом: диагональный элементmii есть число ребер, имеющих вершинуxiв качестве одной из концевых вершин, а элементmij – число параллельных ребер между вершинамиxi иxjсо знаком минус. Число всех остовных деревьев равно определителю подматрицы, получающейся вычеркиванием одной строки и одного столбца из матрицы М.
Для ориентированного графа без петель (петлей называется дуга, начальная и конечная вершины которой совпадают) матрицу определим следующим образом: mii– число дуг, которые имеют своей конечной вершиной, вершинуxiт.е. заходят вxi; mij = -k, гдеkесть число параллельных дуг изxiвxj. Тогда число ориентированных остовов с корнемxrравно определителю подматрицы, полученной вычеркиваниемr-й строки иr-го столбца из матрицы М.
3.6.3. Алгоритм построения всех остовных деревьев графа
на основе полного перебора последовательностей
ребер или дуг
Алгоритм можно представить в виде последовательности из 7 пунктов (этапов). Он справедлив как для неориентированных, так и ориентированных графов.
1. Все ребра (дуги) перенумеровываются от 1 до m, гдеm– число ребер (дуг) в графе.
2. Составляются различные перестановки последовательностей ребер (дуг), например, для трех ребер в графе последовательности
1 – d1, d2, d3; 2 – d1, d3, d2; 3 – d2, d1 d3;
4 – d2, d3, d1; 5 – d3, d1, d2; 6 – d3, d2, d1.
3. Выбрав определенную последовательность, строим дерево (для неориентированного графа – сильно связный граф без циклов, для ориентированного графа не должно быть двух путей в одну вершину). Если очередное ребро (дуга) увеличивает дерево, т.е. увеличивает число ребер (дуг) в нем, то оно включается в дерево. Если же оно приводит к образованию цикла (в случае неориентированного графа) или образует два пути в одну вершину (для ориентированного графа), то данное ребро (дуга) вычеркивается из списка данной последовательности и вносится в список «Пропущенное ребро (дуга)».
4. После каждого включения ребра (дуги) в дерево просматривается список «Пропущенное ребро». После использования в дереве пропущенного ребра (дуги) оно вычеркивается из списка «Пропущенное ребро». Ребро (дуга) вычеркивается из списка «Пропущенное ребро» также и в том случае, если пропущенное ребро (дуга) приводит к образованию цикла (для неориентированного графа) или к двум путям в вершину (для ориентированного графа).
5. Пункты 3,4 повторяются до тех пор, пока не будут просмотрены все ребра (дуги) данной последовательности. Для ориентированного графа необходимо убедиться, что полученное дерево есть остовное дерево графа, т.е. из вершины-корня достижимы все вершины графа.
6. Полученное остовное дерево сравнить с имеющимися и, если нет повторения, занести в память (список деревьев).
7. Если число остовных деревьев меньше максимального (п.3.5.2), то перейти к п.3.