
- •Введение
- •1. Начальные сведения из теории графов
- •Определения графа и ориентированного графа
- •Задание графов с помощью матриц
- •Изоморфизм графов
- •Подграф
- •Маршруты, связность
- •Графы специального вида
- •Деревья
- •2.1. Эквивалентные определения понятия дерева. Остовные деревья
- •Построение остовного дерева
- •Построение кратчайших путей на графе
- •3.1. Алгоритм Дейкстры и алгоритм Форда
- •Алгоритм Флойда
- •4. Эйлеровы графы
- •4.1 Понятие об эйлеровом графе. Критерий наличия в графе эйлерова цикла
- •Алгоритм Флери построения эйлерова цикла
- •Эйлеровы ориентированные графы
Построение остовного дерева
Рассмотрим алгоритм построения остовного дерева. Следуя принятой в монографии [4] терминологии, обозначим термином "букет" множество вершин любого дерева, содержащегося в исходном графе G. Просматривая ребра исходного графа, будем каким-либо способом помечать их, например, окрашивая в синий и красный цвета.
Алгоритм содержит следующие шаги:
Выбрать любое ребро, окрасить его в синий цвет. Сформировать букет, включив в него концевые вершины окрашенного ребра.
Если все вершины исходного графа вошли в один букет, то синим цветом окрашено остовное дерево. Тогда перейти к шагу 5, иначе - к шагу 3.
Выбрать любое неокрашенное ребро. Если неокрашенного ребра нет, то исходный граф не содержит остовного дерева. Тогда перейти к шагу 5, иначе - к шагу 4.
Сделать выбор для вершин, инцидентных выбранному на шаге 3 ребру:
если обе вершины принадлежат одному букету, то окрасить ребро в красный цвет;
если ни одна из вершин не принадлежит ни одному из букетов, то окрасить ребро в синий цвет и сформировать новый букет;
если одна вершина принадлежит одному из букетов, то окрасить ребро в синий цвет и включить вторую вершину в тот же букет;
если две вершины принадлежат разным букетам, то окрасить ребро в синий цвет и слить два букета в один новый.
По окончании выбора перейти к шагу 2.
Закончить выполнение алгоритма.
При решении прикладных задач часто приходится работать со взвешенным графом, каждому ребру {vi,vj} которого присвоена числовая характеристика w(i,j) - вес ребра. Это позволяет учитывать параметры реальной задачи (расстояние между пунктами, стоимость или время транспортировки и прочее). Весом графа называется сумма весов его ребер. Приведенный выше алгоритм позволяет строить остовное дерево минимального (максимального) веса. Для этого достаточно просматривать ребра исходного графа в порядке возрастания (убывания) их весов. Ребра одинакового веса просматриваются в произвольном порядке
Теорема 7. Алгоритм построения остовного дерева позволяет построить остовное дерево минимального веса, если такое дерево существует в данном графе.
▲ Пусть остовное дерево T построено по алгоритму, а дерево S0 является остовным деревом минимального веса. Обозначим через e1={u,v} первое из просмотренных в алгоритме ребер, которое входит в T и не входит в S0. Так как дерево S0 является остовным, то в силу теоремы 3 в S0 существует простая цепь, соединяющая вершины u, v. Эта цепь не содержит ребра e1. В силу теоремы 3 граф S0+e1 содержит цикл. В этот цикл входит ребро e1, а также некоторое ребро e2, которое содержится в S0, но не содержится в T. Рассматривая граф S1=S0+e1-e2, нетрудно убедиться, что перед нами новое остовное дерево с весом
w(S1)=w(S0)+w(e1)-w(e2). (8)
Так как S0 - дерево с минимальным весом, то
w(e1)-w(e2)≥0. (9)
Предположим теперь, что в алгоритме ребро e2 просматривалось раньше, чем e1. Так как e2 не было при этом включено в T, то e2 образует цикл вместе с ребрами, которые рассмотрены в алгоритме раньше и уже включены в T. Среди этих ребер, в силу сделанного предположения, нет ребра e1. Значит, все они входят в S0 и образуют в S0 цикл вместе с e2. Наличие этого цикла противоречит тому условию, что S0 - дерево. Следовательно, сделанное ранее предположение об очередности просмотра ребер e1 и e2 неверно; ребро e2 просматривалось в алгоритме не раньше, чем e1. Это означает, что
w(e2) ≥w(e1). (10)
Рассматривая совместно неравенства (9) и (10), приходим к равенству
w(e1) =w(e2),
из которого с учетом (8) следует, что
w(S1)=w(S0).
Последний результат означает, что S1 также является остовным деревом минимального веса. При этом S1 имеет с T на одно общее ребро больше, чем S0.
Повторяя сделанные рассуждения, построим далее остовное дерево S2 минимального веса, у которого еще на одно общее с T ребро больше, и так далее. За конечное число шагов получается последовательность остовных деревьев равного веса S0, S1, S2, …, T.
Так как w(S0)=w(T) и вес S0 минимальный, то T - остовное дерево минимального веса. ▲