Здравствуйте, мне необходимо сделать совершенную раскраску графа. "Раскраска вершин графа 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 - черный). То есть я просто перебираю вершины и крашу так, чтобы для каждой вершины условие в матрице совпадало, но мне кажется как-то не так сделал (не по уму). В интернете алгоритма не нашел. Данные у меня в виде матрицы смежности.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Подскажите, пожалуйста, как правильно удалить элемент из двусвязного списка и добавить элемент в конец списка? Пример кода, который работает...
Определить число выписыванием в обратном порядке цифр заданного натуральным числом nРезультат вывести на экран
У меня есть натуральное число n, как можно вывести его цифры в обратном порядке?
Используя ф-ции MovetoEx LineTO как изменить масштаб графика? При значении x=1 у=60, что за гранью рамки консолиВот исходник, помогите пожалуйста