Здравствуйте, мне необходимо сделать совершенную раскраску графа. "Раскраска вершин графа G называется совершенной, если для любых двух вершин одного цвета цветовые составы их окружения совпадают. В частности, это означает, что все соцветные вершины в G имеют одинаковую степень." Мне необходимо раскрасить кубический (из вершины исходит 3 ребра) транзитивный граф в 2 цвета (белый и черный). По имеющийся матрице параметров A:
A = {{1,2},{2,1}}.
A[i] - это цвет нашей обрабатываемой вершины (0-белый, 1-черный).
A[i][0] - это столько вершин белого цвета соседствует с вершиной i-цвета.
A[i][1] - это столько вершин черного цвета соседствует с вершиной i-цвета.
Я сделал набросок кода:
void Graph::color() {
//Инициализация?
color_v[0] = 2;
int m, p; //Белые и черные
for (int i = 0; i < 2 * n; i++) {
m = p = 0;
for (int j = 0; j < 2 * n; j++) {
if (matrix[i][j]) {
if (color_v[j] == 1) m++;
else if (color_v[j] == 2) p++;
else {
if ((m < A[color_v[i]-1][0])) {
m++;
color_v[j] = 1;
}
else if ((p < A[color_v[i]-1][1])) {
p++;
color_v[j] = 2;
}
}
}
}
}
}
В массиве color_v у нас хранится цвет i вершины (0 - еще не окрашена, 1-белый, 2 - черный). То есть я просто перебираю вершины и крашу так, чтобы для каждой вершины условие в матрице совпадало, но мне кажется как-то не так сделал (не по уму). В интернете алгоритма не нашел. Данные у меня в виде матрицы смежности.
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники