- •Глава 4. Взвешенные графы и орграфы
- •Определения
- •Определение
- •Псевдокод
- •Замечания
- •Замечание
- •3.2.2. Алгоритм Прима (Prim)
- •Определения
- •Псевдокод
- •Замечания
- •3.2.3. Минимальное каркасное дерево для точек на евклидовой плоскости
- •Второй алгоритм решения
- •Определения
- •3.3.2. Минимальное каркасное дерево с максимальным числом листьев
- •Определение
- •Определение
- •3 Определение.3.7. Проблема многоцелевого минимального каркасного дерева с заданной степенью
- •Класс сложности
- •3 Определения.3.8. Обобщенное минимальное каркасное дерево
- •Класс сложности
- •Определения
- •Дерево Штейнера с евклидовой метрикой
- •Алгоритм построения дерева Штейнера с евклидовой метрикой
- •Определение
- •Определение
- •Определение
- •Класс сложности
Замечания

Если размерность взвешенного графа растет, то возникает очевидная трудность определения цикла, возникающего при добавлении из очереди ребра.
Для преодоления этой трудности используют описатели вершин. Без потери общности, в качестве описателей вершин можно принятьцвета. При инициализации все вершиныбелые. При добавлении из очереди ребра проверяются цвета вершин:
Если вершины белые, то это простое дерево, состоящее из двух вершин и ребра. Этим вершинам присваивается один из небелых цветов(например, красный).
Если вершины выбранного из очереди ребра разноцветные, то это ребро расширяет дерево либо соединяет два дерева в одно. За полученным деревом сохраняется один из небелых цветов.
Е
сли
вершины вновь введенного ребра
одноноцветные (но не белые), то ребро
соединяет вершины одного и того же
дерева и создает в нем цикл. Это ребро
должно быть отброшено.
Ш
аг
1.Из приоритетной очереди выбираем
ребро {g,h},
которое создает первое нетривиальное
дерево. Красный цвет выбран описателем
этого дерева. Число ребер дерева равно
1.
Шаг 2. Ребро {c,i}из приоритетной очереди создает второе нетривиальное дерево. Синий цвет выбран описателем этого дерева. Число ребер каркасного дерева равно 2.

Шаг 3.Ребро {f,g} вошло в первое нетривиальное дерево, т.к. вершинаg– красная, аf– белая. Красный цвет остался описателем этого дерева. Число ребер каркасного дерева - 3.

Шаг 4. Ребро {a,b}создает третье нетривиальное дерево. Зеленый цвет становится описателем этого дерева. Число ребер каркасного дерева равно 4.

Шаг 5.Добавляем ребро {c,f}. Вершинаc– синяя, вершинаf– красная. Ребро {c,f} яет первое и второе деревья. Красный цвет выбран в качестве описателя этого объединенного дерева. Число ребер каркасного дерева равно 5.

Шаг 6.Ребро {g,i} имеет одинаковые красные описатели вершин, следовательно, оно создает цикл. Отбрасываем его.

Шаг 7.Ребро {c,d}: вершина с имеет красный цвет, вершинаd– белая. Добавляем ее к дереву. Описатели дерева – красные. Число ребер каркасного дерева равно 6.

Шаг 8.Вершиныhиiребра {h,i} – красные. Ребро создает цикл, отбрасываем его.

Шаг 9.Ребро{a,h} – вершинаa– зеленая, вершинаh– красная. Добавляем ребро {c,d}к дереву. Красный цвет остается описателем этого дерева. Число ребер каркасного дерева равно 7.

Шаг 10.Вершиныbиcребра {b,c}- красные. Добавление этого ребра приведет к созданию цикла. Отбрасываем его.

Шаг 11.Ребро {d,e}: вершинаd– красная, а вершинаe– белая. Добавляем это ребро к дереву. Вершины дерева – красные. Число ребер каркасного дерева равно 8, алгоритм стоп.

Вес минимального
каркасного дерева = 38
Замечание

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