Я только начал читать теорию графов и читал о раскраске графа. Эта проблема возникла у меня в голове:Частично окрашивание графа с 1 цветом
Мы должны покрасить наш неориентированный граф (не полностью) только с одним цветом, чтобы максимально увеличить число цветных узлов. Нам нужно найти это максимальное число. Я смог сформулировать подход для нециклических графов:
Мой подход: сначала мы делим график на изолированные компоненты и делаем это для каждого компонента. Мы делаем ДФС дерево и сделать 2 дп массива при обходе его так, чтобы корневая последний приходит:
dp[0][u]=sum(dp[1][visited children])
dp[1][u]=sum(dp[0][visited children])
ans=max(dp[1][root],dp[0][root])
dp[0][i] , dp[1][i] are initialized to 0,1 respectively.
Здесь 0 означает неокрашенный и 1 означает, цвета.
Но это не работает для циклических графов, так как я предположил, что ни один из посещенных детей не подключен.
Может ли кто-нибудь вести меня в правильном направлении, как решить эту проблему для циклических графиков (а не грубой силой)? Возможно ли изменить мой подход или нам нужно разработать другой подход? Будет ли жадный подход, например, окрашивать узлы с наименьшими ребрами?
Я не понимаю ваш вопрос? если вы окрашиваете весь график, оптимален ли этот результат? –
@PhamTrung две последовательные вершины не могут быть окрашены одним цветом. – evil999man
Довольно уверен, что NP Hard также, возможно, сместим с [Vertex-Cover] (http://en.wikipedia.org/wiki/Vertex_cover). Существуют различия между проблемами, но по существу они сводятся к одной и той же цели. – amit