Уважаемые форумчане! Подскажите, пожалуйста, в каком направлении "копать" следующую задачу. Идей нет. Написать программу, которая пытается найти оптимальную раскраску для заданного графа. Цвета применяются к вершинам графа и доступны только два цвета: черный и белый. Раскраска графа называется оптимальной, если в ней максимальное количество чёрных вершин. Раскраска ограничена тем правилом, что не может быть двух смежных чёрных вершин. Спасибо.
Эта задача называется "максимальное независимое множество" и является NP-полной. Так что нужно думать в сторону какого-то перебора.
Тут ведь только два цвета. Достаточно правильно раскрасить двудольный граф за O(N). И цвет, который встречается больше раз, сделать черным.
Две былых вершины могут быть смежными.
Действительно. Не заметил. Благодарю
Я так делал. Это не верное решение. Вот например есть одна вершина и из нее выходит 5 , а потом все 5 сходятся в одну. Здесь выгодно первую сделать белой все 5 черными, а последнюю белой.
Твой пример не ломает решение, а этот ломает.
Согласен. А если всегда начинать с вершин с наибольшей степенью и смежные раскрашивать в черный цвет.
Сдал эту задачу на e-olimp, но решение не очень хорошее. Если интересно — могу рассказать.
А задача из жизни или с контеста? В смысле, тесты случайные или "умные"? Может, стоит загнать что-нибудь рандомизированное? Например(в качестве первого пришедшего в голову решения) перебирать вершины в случайном порядке, если очередная вершина еще не запрещена — добавлять в "черные" и запрещать все смежные с ней?
P.S. разумеется, такое нужно запустить несколько раз, наилучший ответ выводить