Совершенная раскраска графа

186
16 декабря 2017, 07:11

Здравствуйте, мне необходимо сделать совершенную раскраску графа. "Раскраска вершин графа 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 - черный). То есть я просто перебираю вершины и крашу так, чтобы для каждой вершины условие в матрице совпадало, но мне кажется как-то не так сделал (не по уму). В интернете алгоритма не нашел. Данные у меня в виде матрицы смежности.

READ ALSO
Двусвязный список

Двусвязный список

Подскажите, пожалуйста, как правильно удалить элемент из двусвязного списка и добавить элемент в конец списка? Пример кода, который работает...

217
Выписать цифры числа в обратном порядке с помощью цикла while [требует правки]

Выписать цифры числа в обратном порядке с помощью цикла while [требует правки]

Определить число выписыванием в обратном порядке цифр заданного натуральным числом nРезультат вывести на экран

186
Выписать цифры числа в обратном порядке с помощью цикла while

Выписать цифры числа в обратном порядке с помощью цикла while

У меня есть натуральное число n, как можно вывести его цифры в обратном порядке?

260
Как изменить масштаб графика

Как изменить масштаб графика

Используя ф-ции MovetoEx LineTO как изменить масштаб графика? При значении x=1 у=60, что за гранью рамки консолиВот исходник, помогите пожалуйста

267