Алгоритм приближенной раскраски графа - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Необходимо раскрасить граф вот есть

алгоритм приближенной раскраски:

1. Вычислить степени вершин. Положить K=1.Пример. 2. Просмотреть вершины в порядке не возрастания степеней и окрасить первую неокрашенную вершину в цвет № K. 3. Просмотреть вершины в порядке не возрастания степеней и окрасить в цвет №К все вершины, которые не смежны вершинам, уже окрашенным в цвет №К. 4. Если все вершины окрашены, то К-искомое хроматическое число. Пример.Иначе К=К+1 и переход к пункту 2. http://www.tisbi.ru/resource/lib/graph/TEOR4.htm#metka42 или тут http://rain.ifmo.ru/cat/view.php/the.../coloring-2004 вроде не сложно ну что то не как не соображу , представил каждую вершину в виде структуры:
struct graf{
int stepeni;
int color;
int number;
};
и на 3-ем пункте застрял ,может как то по другому представить вершины что посоветуете???

Решение задачи: «Алгоритм приближенной раскраски графа»

textual
Листинг программы
#include <iostream>
int main()
{
    setlocale(LC_ALL, "Russian");
    const int n(6);
    int i, j;
    int mi[n][n] = { 0, 1, 0, 1, 1, 0,
                     1, 0, 1, 1, 0, 0,
                     0, 1, 0, 1, 1, 1,
                     1, 1, 1, 0, 1, 0,
                     1, 0, 1, 1, 0, 1,
                     0, 0, 1, 0, 1, 0 };
 
    for(i = 0; i < n; ++i, std::cout<<std::endl)
        for(j = 0; j < n; ++j)
            std::cout<<mi[i][j]<<' ';
    int col[n];
    for(i = 0; i < n; ++i)
        col[i] = 1; 
    for(i = 0; i < n; ++i)
        for(j = i + 1; j < n - 1; ++j)
            if(mi[i][j] == 1 && col[j] == col[i])
                col[j] = col[i] + 1;
    int max = col[0];
    for(j = 1; j < n; ++j)
        if(max < col[j])
            max = col[j];
    std::cout<<"\nХроматическое число графа равно "<<max;
    std::cin.get();
    return 0;
}

Объяснение кода листинга программы

  1. Установка локали на русский язык
  2. Объявление константы n, которая определяет размер графа
  3. Объявление переменных i, j для использования в циклах
  4. Объявление двумерного массива mi[n][n] и инициализация его значениями 0 и 1, которые представляют собой цвета вершин графа
  5. Вывод значений массива mi на экран
  6. Объявление одномерного массива col[n] для хранения цветов вершин графа
  7. Инициализация всех элементов массива col значением 1
  8. Проверка цветов соседних вершин графа и изменение цвета при необходимости
  9. Поиск максимального цвета в массиве col
  10. Вывод максимального цвета на экран
  11. Получение ввода от пользователя для завершения работы программы
  12. Возврат значения 0, что означает успешное завершение программы

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.154 из 5
Похожие ответы