Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Дискретка_Экзамен_Ответы / графы / 4 Раскраска графа

.docx
Скачиваний:
91
Добавлен:
11.03.2015
Размер:
23.18 Кб
Скачать

4.17. Раскраска графа

Пусть задан граф G=(V,E) и натуральное число k. Вершинной k –рас-краской графа называется функция, ставящая в соответствие каждой вершине из множества V натуральное число (цвет) из множества {1.. k}. Другими словами, раскраска задаёт цвет каждой вершине графа. Раскраска называется правильной, если никакие две смежные вершины не окрашены в один цвет. В дальнейшем под раскраской будем понимать только правильную раскраску. Граф называется k –раскрашиваемым, если для него существует правильная k–раскраска. Хроматическим числом графа называется минимальное число цветов, требующееся для правильной раскраски графа. Правильная раскраска графа в хроматическое число цветов называется минимальной.

Очевидны следующие факты.

1. Хроматическое число графа G=(V,E), в котором E=, равно 1.

2. Хроматическое число полного графа G=(V,E) равно n=|V|.

3. Если мощность наибольшей клики графа G=(V,E) равна n, то его хроматическое число не меньше n.

4. Множество вершин графа G=(V,E), окрашенных в один цвет является независимым множеством.

Пусть требуется получить все раскраски графа G=(V,E) не более чем в k цветов. Раскраску будем хранить в массиве m, mi - цвет i-ой вершины графа. Если i-ая вершина графа не окрашена, то mi=0. Обозначим через Color(Г(i)) множество цветов, которыми окрашены вершины, смежные i-ой вершине графа. Тогда цвет, в который может быть окрашена i-ая вершина, принадлежит множеству {1.. k}- Color(Г(i)).

Получить все раскраски графа не более чем в k цветов можно, используя метод поиска с возвращением. В исходном состоянии все вершины графа не окрашены и все элементы массив m равны нулю. Вершины графа будем окрашивать последовательно, начиная с первой. Окраску i-ой вершины опишем рекурсивным алгоритмом 4.24, блок-схема которого представлена на рис.4.47. В цикле перебираются цвета, в которые может быть окрашена i-ая вершина. Если окрашена последняя n-ая вершина (n=|V|), то раскраска получена и выводим её, иначе окрашиваем следующую i+1-ую вершину по алгоритму 4.24. Когда выполняется шаг назад, к окраске i-1-ой вершине, i-ая вершина становится неокрашенной, поэтому процедура имеет дополнительный параметр m.

Алгоритм 4.24 получения всех раскрасок графа G=(V,E) не более чем в k-цветов.

Вход: i – окрашиваемая вершина;

m – текущая раскраска.

Выход: последовательность всех раскрасок графа в k-цветов, если граф G k-раскрашиваемый.

Раскраска(i,m)

mi := x

x{1..k}-Color(Г(i))

i=n

+

m

Раскраска(i+1, m)

Конец

Рис.4.47. Рекурсивный алгоритм получения всех раскрасок

графа в k-цветов

Пусть требуется получить одну раскраску графа G=(V,E) не более чем в k цветов. Для решения этой задачи можно использовать алгоритм 4.24 с небольшой модификацией: после получения первой раскраски закончить алгоритм. Такая модификация позволит получить решение, но для повышения эффективности можно учитывать следующее:

1. i-ую вершину (i<k)можно окрашивать в цвет, не превышающий i.

2. В первую очередь окрашивать вершины, принадлежащие наибольшей клике.

3. Остальные вершины окрашивать в порядке невозрастания степеней.

Учитывая вышесказанное, получим более эффективный алгоритм 4.25 получения одной раскраски графа G=(V,E) не более чем в k цветов. Отметим, что если граф не является k-раскрашиваемым, то раскраска в k цветов не будет получена, в остальных же случаях будет получена раскраска, близкая к минимальной.

Для получения минимальной раскраски графа можно использовать следующий алгоритм.

Алгоритм 4.26 получения минимальной раскраски графа.

Вход: граф G=(V,E).

Выход: Mmin – минимальная раскраска.

1 Получить раскраску m не более чем в k=|V| цветов

по алгоритму 4.25. Присвоить k наибольший цвет в раскраске m.

2. Если раскраска m в k цветов получена, выполнять:

2.1. Сохранить в Mmin раскраску m.

2.2. k:=k-1.

2.3. Получить раскраску m не более чем в k цветов

по алгоритму 4.25.

4. Конец алгоритма.

Любой граф может быть раскрашен в число цветов, равное количеству вершин в графе. В п.1 по алгоритму 4.25 получаем раскраску m, близкую к минимальной и сохраняем количество цветов k в ней. В п.2 пытаемся получить раскраску в меньшее число цветов, предварительно запомнив ранее полученную в качестве претендента на минимальную. Минимальной раскраской будет последняя полученная.

Рассмотрим задачи, решение которых сводится к нахождению минимальной раскраски графа.

Задача 1. Имеется город G, который связан авиамаршрутами с городами G1, G2,…, Gn. Маршрут GGiG обслуживается в интервале времени [xi,yi]. Требуется определить минимальное количество самолётов, достаточное для обслуживания всех маршрутов.

Решение. Построим граф, множество вершин которого соответствует множеству маршрутов. Две вершины смежны тогда, когда временные интервалы соответствующих маршрутов пересекаются. Хроматическое число этого графа равно минимальному количеству самолётов, достаточному для обслуживания всех маршрутов, а минимальная раскраска определяет распределение самолётов по маршрутам: маршруты, соответствующие вершинам, окрашенным в один цвет, могут обслуживаться одним самолётом.

Задача 2. Требуется составить расписание уроков так, чтобы заданное множество занятий было проведено за минимально возможное время.

Решение. Построим граф, множество вершин которого соответствует множеству занятий. Две вершины смежны тогда, когда соответствующие занятия нельзя проводить одновременно (один и тот же преподаватель, кабинет или класс). Минимальная раскраска графа определяет требуемое расписание: на первом уроке проводятся занятия, соответствующие вершинам, окрашенным в первый цвет, на втором - занятия, соответствующие вершинам, окрашенным во второй цвет и т.д.

Задача 3. Заданы множества работ и механизмов. Для выполнения работ требуется время (одинаковое для всех работ) и некоторые механизмы. Никакой из механизмов не может быть одновременно занят в нескольких работах. Нужно организовать процесс выполнения всех работ за минимально возможное время.

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

Задача 4. Граф на рис.4.48 представляет схему электрических соединений; вершины соответствуют клеммам, рёбра – прямым металлическим полоскам проводников. Проводники не должны пересекать друг друга, поэтому необходимо их распределить по нескольким параллельным платам, в каждой из которых проводники не пересекались бы. Клеммы доступны на всех платах.

клемы

проводники

клемы

Рис.4.48. Схема электрических соединений

Необходимо определить наименьшее число плат и распределить проводники по платам.

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