Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Алгоритмы _ Алгоритм раскраски графа

Автор: npl 9.12.2007 16:49

Помогите с алгоритмом. Для произвольного графа найти хроматическое число и раскраску.

Автор: Michael_Rybak 9.12.2007 19:37

Ориентировочные размеры графа?

Автор: npl 9.12.2007 20:27

Граф произвольный.

Автор: Michael_Rybak 9.12.2007 20:34

Ну если произвольный - то без шансов. Общего полиномиального решения нет, насколько я знаю. Пробуй жадные подходы какие-нибудь, с итерационным приближением к оптимальному решению. Например, http://rain.ifmo.ru/cat/view.php/vis/graph-coloring-layout/coloring-2003.

Автор: npl 9.12.2007 21:14

А нет на Паскале?

Добавлено через 5 мин.
Хотя бы для графа с несколькими вершинами.

Автор: Michael_Rybak 9.12.2007 21:37

Для графа с несколькими вершинами - полным перебором.

Кода у меня нет.

Автор: npl 9.12.2007 21:39

Дайте кто-нибудь ссылку, пожалуйста!

Автор: Michael_Rybak 9.12.2007 21:51

Может и сдать за тебя?

Автор: npl 9.12.2007 22:42

Сдавать не надо, дайте ссылку с описанием метода решения.

Автор: Michael_Rybak 9.12.2007 23:16

Пытаешься раскрасить в один цвет; если не получилось - в два; если не получилось - в три, и т.д.

Чтобы раскрасить в k цветов, используешь такую схему. Фиксируешь порядок обхода вершин. Идешь в первую вершину, даешь ей цвет 1. Идешь во вторую, и даешь ей такой наименьший цвет, который не вызовет конфликтов. Идешь в третью, и т.д. Если на очередном ходу цвет выбрать не получается, откатываешь к предыдущей вершине, и выбираешь для нее следующий цвет, который не вызовет конфликтов. Если и для нее возможные цвета кончились - откатываешь дальше, и т.д.

Если всем вершинам назначены цвета - задача решена.

Рекурсивная процедура будет выглядеть примерно так:

procedure visit(i: integer);
begin
if i = n + 1 then
// решение найдено! выводим
else begin
for c := 1 to k // k - количество цветов
if (ни одна из вершин, смежных с i, не покрашена в цвет с) then
color[i] := c;
visit(i + 1);
end;
end;
end;

Автор: npl 9.12.2007 23:31

Я так понял, что граф представляется в виде матрицы.

Добавлено через 3 мин.
И там где решение найдено, нужно вывести матрицу?

Автор: Michael_Rybak 10.12.2007 0:36

да.

Автор: united pharmacy lasix no precrcr 17.09.2021 11:45

Mail Order Macrobid Visa Accepted Free Shipping

Автор: Edwardgramn 2.10.2021 20:55

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

Автор: finasteride 5mg without a prescr 21.12.2021 10:31

Cialis Compresse Prezzo