Определение в какой цвет, какую область нужно раскрасить
Для данного определения была получена матрица. В этой матрице номер строки и номер столбца отвечает за каждую область. Если области смежные, то при пересечении столбца и строки с номерами этих областей стоит 1, иначе 0.
Для начала нужно отсортировать области по убывания количества соседей.
В матрице рассматривается область с наибольшим количеством соседей, которую еще не рассматривали.
Данная область окрашивается в цвет
Ищется область, которая не является смежной, то есть в строке с номером данной области ищется 0. Если такой области нет, то выполняется пункт 1)
Несмежная область окрашивается в цвет
Строки с номерами данной и несмежной области складываются с помощью битовой операции ИЛИ.
Полученная строка записывается в строку с номером данной области, а строка с номером несмежной области заполняется «1».
Выполняется пункт 3)
Практическая часть
Справка
Данная программа начинает выполняться в функции main. Для начала проверяется количество аргументов командной строки. Если их меньше 5 или они введены некорректно, то выводится справка.
Рисунок 2 – Справка, которая выводится в случае неправильных аргументов командной строки
Если все введено корректно, то ключи обрабатываются, а далее вызывается процедура Action(). Эта процедура является основной и выполняет весь алгоритм.
Основные файлы и переменные
Подготовкой к реализации алгоритма является создание переменных, которые используются на протяжении всего алгоритма.
Сначала создается дополнительный файл Table, который используется для реализации матрицы. Файл Log является глобальной переменной. Переменные TimeOnColoring и TotalTime отвечают за время алгоритма раскраски и всего времени реализации алгоритма.
Переменная Areas отвечает за количество областей, переменная NumberOfColors отвечает за количество используемого цвета, FlagWidth отвечает за количество дополнительных байт в конце строки.