Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Глава 4. Взвешенные графы и орграфы, часть 1.doc
Скачиваний:
15
Добавлен:
13.02.2016
Размер:
602.62 Кб
Скачать

Замечания

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

Для преодоления этой трудности используют описатели вершин. Без потери общности, в качестве описателей вершин можно принятьцвета. При инициализации все вершиныбелые. При добавлении из очереди ребра проверяются цвета вершин:

  • Если вершины белые, то это простое дерево, состоящее из двух вершин и ребра. Этим вершинам присваивается один из небелых цветов(например, красный).

  • Если вершины выбранного из очереди ребра разноцветные, то это ребро расширяет дерево либо соединяет два дерева в одно. За полученным деревом сохраняется один из небелых цветов.

  • Если вершины вновь введенного ребра одноноцветные (но не белые), то ребро соединяет вершины одного и того же дерева и создает в нем цикл. Это ребро должно быть отброшено.

Шаг 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

Замечание

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