Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Детализация алгоритма раскраски графа



Разработаем граф-схему алгоритма раскраски графа по описанию, представленному в разделе «Эскизный проект» с учетом определённой выше структуры программы (см. рис.10).

В граф-схеме на рис.10 использованы разработанные выше структуры данных, а также следующие дополнительные переменные:

S – множество еще не раскрашенных вершин графа;

f – текущий цвет;

b – признак отсутствия вершин, которые можно раскрасить в цвет f;

– номер текущей раскрашиваемой вершины;

i – индекс для перебора вершин.

Рис. 10

 

Разработка формата файла для хранения графов

При записи графа в файл будем сохранять число его вершин и матрицу их смежности. Поскольку обрабатываемые графы неориентированные и матрицы их смежности симметричны относительно главной диагонали, в файле достаточно хранить только верхнюю треугольную часть матрицы. Для уменьшения размера файлов каждое значение матрицы смежности будем кодировать 1 битом, а всю хранимую часть матрицы представим цепочкой бит. Длина цепочки для графа, содержащего n вершин, будет равна

бит,

что нетрудно проверить непосредственно по виду матрицы. Поскольку минимальная единица информации файла это байт, указанные биты цепочки будут распределены между байтами, причем номер байта не будет соответствовать номеру вершины в общем случае. Число полных байт, необходимых для хранения матрицы смежности, в таком случае составит

байт,

где скобками обозначена операция округления в сторону увеличения. Количество значащих (используемых) бит в последнем байте будет вычисляться по формуле:

бит.

На рисунке 11 дано графическое представление хранимой в файле информации (а) и формата файла (б).

Алгоритм чтения графа из файла указанного формата будет включать следующие этапы:

1. Чтение числа вершин n и проверка правильности значения.

2. Циклическое побайтовое считывание оставшейся части файла в одномерный массив, содержащий B байт.

3. Извлечение строк верхней треугольной части матрицы смежности вершин графа из указанного одномерного массива путем поразрядной обработки его элементов.

4. Доопределение матрицы смежности вершин путем симметричного отображения верхней треугольной части на нижнюю и обнуления элементов главной диагонали.

Алгоритм записи графа в файл будет содержать следующие этапы:

1. Побитовое копирование строк верхней треугольной части матрицы смежности вершин в одномерный массив из B байт.

2. Запись в файл числа вершин графа n.

3. Циклическая перезапись массива с матрицей смежности в хвост файла.

 

 


(а)

(б)

Рис. 11


РАБОЧИЙ ПРОЕКТ

 

Выбор удобочитаемых идентификаторов

Для улучшения читаемости разрабатываемой программы выполним замену коротких символических обозначений данных, использованных в алгоритме, удобочитаемыми программными идентификаторами, построенными с учетом смысла обозначаемых ими сущностей. Принятый вариант замены представлен в таблице 1.

Таблица 1

Обозначение в алгоритме Программный идентификатор
A AdMatrix
n VCount
C VColor
L VDegree
U UndoItem
S Uncolored
f CurColor
b Colorable
q VCur
V VCenter
O VNumber
индексы i, j, k и т.д. без изменений

 

Общая организация проекта

Данный проект состоит из 6-ти модулей: uMain, uData, uHelp, uFiling, uColoring, uInputk.

 


Описание модулей

 

Модуль uMain

Модуль предназначен для организации редактирования обрабатываемых графов, реализации функции главного меню и координации работы остальных программных модулей. Описание пунктов меню приведено в разделе 5.1.

 

6.3.1.1 Основные переменные, константы и типы модуля

fmMain: TfmMain – основная форма;

TUndoItem – тип данных для представления информации о последнем выполненном действии над графом (используется в режимах Отмена и Восстановление);

VRadius – радиус окружности вершины графа;

AdMatrix: TAdMatrix – матрица смежности вершин текущего графа;

VCount: Byte – число вершин текущего графа;

VColor: TColoring – текущая раскраска вершин;

VCenter: array of TPoint – массив координат центров вершин;

UndoItem: array of TUndoItem – информация об отмененной операции;

k: Byte – требуемое число цветов;

GraphChanged: Boolean – признак измененного и не сохраненного графа.

 

6.3.1.2 Компоненты модуля

Компоненты модуля uMain представлены в таблице 2.


Таблица 2

Компонент Свойства, отличные от свойств по умолчанию Функции
fmMain: TForm BorderStyle: bsToolWindow, Caption: Раскраска графа, ClientHeight: 554, ClientWidth: 792, Color: clBtnFace, Menu: MainMenu, Position: poScreenCenter Форма – контейнер
btnColoring: TBitBtn Caption: Раскраска, Kind: bkOK Кнопка «Раскраска» для запуска процесса раскраски графа
btnExit: TBitBtn Caption: & Выход, Kind: bkClose Кнопка «Выход» для выхода из программы
btnNew: TBitBtn Caption: & Новый граф, Kind: bkRetry Кнопка «Новый граф» для создания нового графа
MainMenu: TMainMenu Items Выбор необходимого режима работы при щелчке на соответствующем пункте главного меню
iFile Caption: Файл Пункты главного меню
iEdit Caption: Редактирование
iHelp Caption: Справка
iFNew Caption: Новый, ShortCut: Ctrl+N Подпункты пункта «Файл» главного меню
iFOpen Caption: Открыть, ShortCut: Ctrl+O
iFSave Caption: Сохранить, ShortCut: Ctrl+S
iFSaveAs Caption: Сохранить как, ShortCut: Ctrl+A
iFBreak Caption: -
iFExit Caption: Выход, ShortCut: F10
iEUndo Caption: Отмена, ShortCut: Ctrl+Z Подпункты пункта «Редактирование» главного меню
iERedo Caption: Восстановление, ShortCut: Ctrl+Alt+Z
iEBreak Caption: -
iEAddV Caption: Добавить вершину, ShortCut: F2
iEDelV Caption: Удалить вершину, ShortCut: Del
iHHelp Caption: Помощь, ShortCut: F1 Подпункты пункта «Справка» главного меню
iHAbout Caption: О программе...
SaveDialog: TSaveDialog DefaultExit: *.zot, Filter: Graph files (*.zot)|*.zot, Options: ofPathMustExist, Title: Сохранение графа в файл Стандартное диалоговое окно для сохранения файлов

Таблица 2 (продолжение)

Компонент Свойства, отличные от свойств по умолчанию Функции
OpenDialog: TOpenDialog DefaultExit: *.zot, Filter: Graph files (*.zot)|*.zot, Options: ofPathMustExist, ofFileMustExist, Title: Открытие файла для загрузки графа Стандартное диалоговое окно для открытия файлов
sgMatrix: TStringGrid DefaultColWidth: 20, DefaultRowHeight: 20, ScrollBars: ssBoth Строковая таблица для отображения и ввода матрицы смежности вершин исходного графа
StatusBar: TStatusBar SimplePanel: True, SizeGrip: False Полоса статуса для отображения текущего состояния программы
stGraph: TStaticText Caption: Исходный граф: Метка для размещения в окне надписи «Исходный граф: »
stMatrix: TStaticText Caption: Матрица смежности: Метка для размещения в окне надписи «Матрица смежности: »

 

6.3.1.3 Процедуры модуля

Процедура iFOpenClick – открывает файл при выборе пункта меню «Открыть», производит очистку и переформат таблицы матрицы смежности sgMatrix.

Процедура iFSaveClick – сохраняет файл при выборе пункта меню «Сохранить».

Процедура btnColoringClick – запускает процесс раскраски графа.

Процедура FormActivate – осуществляет инициализацию глобальных и компонентных данных модуля.

Процедура btnNewClick – создает новый граф при нажатии на кнопку «Новый граф».

Процедура iFNewClick – создает новый граф при выборе пункта меню «Новый».

Процедура iFSaveAsClick – сохраняет граф в другом файле при выборе пункта меню «Сохранить как».

Процедура iFExitClick – осуществляет выход из программы при выборе пункта меню «Выход».

Процедура btnExitClick – осуществляет выход из программы при нажатии на кнопку «Выход».

Процедура iEAddVClick – осуществляет добавление вершины, при этом изменяет матрицу смежности, определяет координаты новой вершины и осуществляет перерисовку вершин.

Процедура iEDelVClick – открывает форму fmInputk как модальную, осуществляет удаление выбранной вершины, удаление смежных с ней ребер, сброс цветов, перенумерацию и перерисовку оставшихся вершин.

Процедура iEUndoClick – осуществляет отмену последнего действия при выборе пункта меню «Отмена».

Процедура iERedoClick – осуществляет восстановление последнего отмененного действия при выборе пункта меню «Восстановление».

Процедура FillUndoDelVrx – осуществляет заполнение структуры данных для отмены удаления вершины.

Процедура iHHelpClick – осуществляет загрузку информации из файла помощи.

Процедура iHAboutClick – осуществляет загрузку информации о программе.

Процедура FormDeactivate – осуществляет освобождение памяти при закрытии формы.

Процедура sgMatrixSelectCell – осуществляет редактирование матрицы смежности вершин графа, сброс цветов и перерисовку вершин.

Процедура FormPaint – осуществляет перерисовку текущего графа в области построения, а также отображает границы области построения графа.

Процедура FormMouseUp – осуществляет добавление или удаление вершины графа при помощи мыши, при этом изменяет матрицу смежности, определяет координаты новой вершины, осуществляет перерисовку вершин после перенумерации и сброс цветов.

Процедура FormMouseDown – осуществляет захват вершины левой кнопкой мыши.

Процедура FormMouseMove – осуществляет соединение вершин перетаскиванием, очистку области, где ребро было на предыдущем шаге и прорисовку нового ребра в следующей позиции.

Процедура FormCloseQuery – запрос на закрытие формы.

Процедура InitForm – осуществляет приведение вида формы к исходному состоянию.

Процедура RemoveVertex – осуществляет удаление выбранной вершины, перезапись sgMatrix в матрицу смежности, формирование массива координат центров вершин, смежных с удаляемой, перенумерацию матрицы смежности и сдвиг массива координат центров вершин, а также изменение размеров структур данных и восстановление измененной матрицы смежности.

Процедура FillAdMatrix – осуществляет построение матрицы смежности по содержимому sgMatrix.

Процедура RepaintVertex – осуществляет перерисовку вершины на форме.

Процедура RepaintEdge – осуществляет перерисовку ребра на форме.

Процедура RepaintAllVertices – осуществляет перерисовку всех вершин на форме.

Процедура InitUndo – инициализирует структуру данных об отмененном действии.

Процедура FillUndoDelVrx – осуществляет заполнение структуры данных для отмены удаления вершины.

Процедура PrintGraphPath – осуществляет отображение пути к файлу с графом в заголовке.

 

 

6.3.1.4 Функции модуля

Функция SaveRequest – вызывает запрос на сохранение графа в файле.

 

Модуль uData

Модуль служит для объединения общеиспользуемых констант и типов:

MaxVCount – максимальное число вершин графа;

TAdMatrix = array of array of Byte – матрица смежности графа;

TColoring = array of ShortInt – вектор цветов вершин;

TRealColors = array[0..MaxVCount-1] of TColor – системные имена цветов;

TVertices = array of TPoint – координаты центров вершин;

TGraphFile = file of Byte – файл графа.

 

Модуль uFiling

Модуль содержит функции для управления записью графов в файлы и считывание сохраненных графов из файлов.

 

6.3.3.1 Основные переменные, константы и типы модуля

GraphFile: TGraphFile – файл для сохранения графа.

 

6.3.3.2 Функции модуля

DoSaveFile – осуществляет сохранение графа в файле по матрице смежности.

DoReadFile – осуществляет чтение графа из файла в матрицу смежности.

 

Модуль uColoring

Модуль объединяет процедуры, функции и переменные, используемые при реализации алгоритма раскраски графа.

 

6.3.4.1 Основные переменные, константы и типы модуля

RealColors: TRealColors – фактические цвета раскраски вершин;

VDegree: array of ShortInt – массив относительных локальных степеней;

VNumber: array of Byte – отсортированный массив номеров вершин;

Uncolored: set of Byte – множество не раскрашенных вершин.

 

6.3.4.2 Процедуры модуля

DoNonminColoring – осуществляет раскраску графа в NewColorCount цветов по найденной минимальной раскраске.

InsertionSort – осуществляет сортировку массива локальных степеней методом вставки.

 

6.3.4.3 Функции модуля

DoMinColoring – осуществляет раскраску графа в минимальное число цветов.

ResetColoring – осуществляет обнуление массива цветов вершин графа.

 

Модуль uInputk

Модуль содержит определение диалога для ввода количества цветов при раскраске графа, а также номера удаляемой вершины.

 

 

6.3.5.1 Основные переменные, константы и типы модуля

fmInputk: TfmInputk – форма для ввода числа цветов k.

 

6.3.5.2 Компоненты модуля

Компоненты модуля uInputk представлены в таблице 3.

Таблица 3

Компонент Свойства, отличные от свойств по умолчанию Функции
fmInputk: TForm BorderStyle: bsDialog, Caption: Ввод числа цветов k, ClientHeight: 94, ClientWidth: 360, Color: clBtnFace, Position: poMainFormCenter Форма – контейнер
btnCansel: TBitBtn Caption: Отмена, Kind: bkCancel Кнопка «Отмена» для отмены выбранного действия и закрытия окна «Ввод числа цветов k»
btnSet: TBitBtn Caption: Задать, Kind: bkOK Кнопка «Задать» для задания числа цветов k и закрытия окна «Ввод числа цветов k»
ComboBox: TComboBox Список для выбора пользователем числа цветов k для раскраски графа
StaticText: TStaticText Caption: Задайте число цветов для раскраски графа Метка для размещения в окне надписи «Задайте число цветов для раскраски графа»

 

6.3.5.3 Процедуры модуля

Процедура btnSetClick – устанавливает значение k при нажатии на кнопку «Задать».

Процедура btnCancelClick – игнорирует ввод k при щелчке по кнопке «Отмена».

Процедура ComboBoxChange – осуществляет проверку по числу вершин.

Процедура FormActivate – обнуляет поле ввода ComboBox при запуске формы ввода числа цветов.

 

 

Модуль uHelp

Модуль обеспечивает отображение справочной информации и окна о программе.

 

6.3.6.1 Основные переменные, константы и типы модуля

fmHelp: TfmHelp – форма для файла справки;

HelpFileName: string = 'coloring.hlp' – имя файла справки.

 

6.3.6.2 Компоненты модуля

Компоненты модуля uHelp представлены в таблице 4.

Таблица 4

Компонент Свойства, отличные от свойств по умолчанию Функции
fmHelp: TForm AutoSize: True, BorderStyle: bsDialog, Caption: Помощь, Color: clBtnFace, ClientHeight: 569, ClientWidth: 537, Color: clBtnFace, Position: poMainFormCenter Форма – контейнер
Panel: TPanel BevelOuter: bvLowered Панель для создания рельефного прямоугольника в клиентской области формы
RichEdit: TRichEdit Align: alClient, BorderStyle: bsNone, Color: clCream, HideScrollBars: False, ReadOnly: True, ScrollBars: ssVertical Окно для отображения содержимого файла справки и информации о программе

 

6.3.6.3 Процедуры модуля

Процедура FormActivate – производит настройку внешнего вида и заполнение окна отображения текстом из файла справки или информацию о программе.

Процедура FormDeactivate – восстанавливает стандартный шрифт.

 


Поделиться:



Популярное:

  1. Введение алгоритма конфронтации
  2. Введение алгоритма противостояния варварскому нападению и манипуляции
  3. Гражданский подвиг фотографа Д. Ф. Онохина (выставка и альбом фронтовых фотографий 1941–1945 гг. в фондах Кировского областного краеведческого музея)
  4. заданного алгоритма устройства
  5. Изобретение кинематографа. Первые шаги (Т.Эдиссон, Патэ, Ж. Мельес, братья Люмьер и др.). Немое американское кино (Д. Гриффит, Ч. Чаплин, Б. Китон и др.). Становление жанров.
  6. Концепция контроля качества авиационных услуг. Детализация показателей качества, их структуризация и ранжирование.
  7. Место кино в современной системе средств массовых коммуникаций. Сущность, функции и основные виды кинематографа.
  8. Назовите лексикографа – исследователя диахронных процессов в лингвистике (в т.ч. и стилистике) конца ХХ века.
  9. Некоторые модификации алгоритма
  10. Понятие алгоритма и программы. Свойства алгоритма.
  11. Применение осциллографа при выполнении наладочных операций


Последнее изменение этой страницы: 2016-06-05; Просмотров: 779; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.069 с.)
Главная | Случайная страница | Обратная связь