- •1. Введение
- •2. Модуль общего назначения syst.H
- •2.1. Общие сведения
- •2.2. Системные функции и макрооперации
- •2.3. Операции ввода/вывода
- •2.4. Математические функции
- •2.5. Специальные классы. Класс Spline для интерполяции данных сплайнами
- •3. Представление графов, классы и граф-объекты
- •3.1. Представление графов
- •3.2. Таблица связей, класс graph.
- •3.3. Матрицы смежности, класс matad.
- •3.4. Бинарные коды
- •3.5. Таблицы связей с весами вершин, класс graph_v
- •3.6. Таблицы связей с весами ребер, класс graph_r
- •3.7. Таблицы связей с весами вершин и ребер, класс graph_vr
- •3.8. Таблицы связей с координатами вершин, класс imgraph
- •3.9. Класс pinv
- •4. Форматы данных и преобразование форматов
- •4.1. Нумерация вершин графа
- •4.2. Представление графов
- •Int biclen(int n)
- •Int bic_graph(const graph& g, word* bic)
- •Int bic_mat(const matad& m, word* bic)
- •5. Функции создания графа
- •Imgraph::imgraph()
- •Imgraph::imgraph(const imgraph&)
- •6. Операции над графами и граф-объектами
- •Void add_edge(graph& g, int I, int k)
- •7. Ввод/вывод и преобразование файлов
- •Int write_r(file*)
- •Int read_r(file*)
- •Int gt_r(file* in, file* out)
- •Int cmp(const pinv& a, const pinv& b)
- •16. Примеры
- •Литература
- •Алфавитный указатель функций
02.2005
В.П. Пинчук.
Вычисления на графах.
Библиотека программных компонентов Algraph /C++ .
Запорожье: ЗНТУ, 2005.
Содержание
1. Введение
2. Модуль общего назначения syst.h
2.1. Общие сведения
2.2. Системные функции и макрооперации
2.3. Операции ввода/вывода
2.4. Математические функции
2.5. Специальные классы. Класс Spline для интерполяции данных сплайнами
3. Представление графов, классы и граф-объекты
3.1. Представление графов
3.2. Таблица связей, класс graph.
3.3. Матрица смежности, класс matad.
3.4. Бинарные коды
3.5. Таблица связей с весами вершин, класс graph_v
3.6. Таблица связей с весами ребер, класс graph_r
3.7. Таблица связей с весами вершин и ребер, класс graph_vr
3.8. Таблица связей с координатами вершин, класс imgraph
3.9. Класс pinv
4. Форматы данных и преобразование форматов
4.1. Нумерация вершин графа
4.2. Представление графов
5. Функции создания графа
6. Операции над графами и граф-объектами
7. Ввод/вывод и преобразование файлов
8. Параметры граф-объекта, графа, его компонентов. Инварианты
9. Маршруты и метрика
10. Проверка наличия свойства или принадлежности к определенному виду
11. Сравнение и проверка эквивалентности
12. Поиск клик, подграфов и компонентов графа
13. Другие функции и процедуры библиотеки
14. Утилиты
15. Компиляция программ
16. Примеры
Литература
Алфавитный указатель
1. Введение
Библиотека Algraph/C++ была создана с целью расширения возможнгстей программирования при решении задач, связанных с вычислениями на графах. Описание первой ее реализации опубликовано автором в 1998 году [1].
В стандартном варианте поставки пакет Algraph/C++ включает в себя три основных файла:syst.h,algraph.h,algraph.lib. В расширенной варианте в пакет поставки включается дополнительно: библиотечный модульgraphbase.h, специальная база данныхGraphBase, модуль реализации функций обслуживания базы данныхgraphbase.lib.
Файл syst.hсодержит глобальные определения, процедуры и функции общего назначения. Представленные в нем средства просты и очень полезны. Этот файл является автономным библиотечным модулем: наряду с прототипами функций и классов, файл содержит также их полные определения. Последнее дает возможность использовать его самостоятельно. Этот модуль хорошо показал себя при программировании работ вычислительного характера, в том числе при построении компьютерных моделей различного назначения. В течение ряда лет модульsyst.hактивно используется также и в учебном процессе при изучении основ программирования на языках С и С++, методов вычислений, выполнении различного вида учебных заданий.
Заголовочный файл algraph.hи его файл реализацииalgraph.libсоставляют ядро библиотекиAlgraph/C++. Они содержат программные компоненты (определения классов, процедур, функций, макросов и других объектов), которые используются при программировании различных операций с графами.
Библиотека ориентирована на решение задач высокой вычислительной сложности и оптимизирована для сложных вычислений. Этим, в частности, обусловлен выбор принципа открытой архитектуры для основных классов системы: все компоненты классов (включая и данные и функции) имеют атибут доступа public. С целью эффективного использования памяти все классы построены как динамические.
Все компоненты библиотеки соответствуют стандарту языка С++ ANSI/ISO.
2. Модуль общего назначения syst.H
2.1. Общие сведения
Файл syst.hрассчитан на компиляцию программ под 32-битовую платформу, используется, главным образом, для создания консольных приложений. Он содержит подключения наиболее часто используемых стандартных библиотечных модулей, а также ряд макросов, определений, функций и процедур общего назначения. Является простым и удобным средством для проблемного программирования в области научных и инженерных расчетов и компьютерного моделирования. Адаптирован к работе с потоками и библиотекой шаблоновSTL. Предназначен для работы с компиляторами, совместимыми с языком и библиотеками, соответствующими стандартуANSI/ISOC++.
Файл syst.hявляется автономным библиотечным модулем, он он содержит полные определения функций и процедур, а не только их прототипы и не имеет соответствующего файла реализации. Для работы файлsyst.hжелательно разместить в подкаталогеINCLUDEиспользуемой системы программирования. Модульsyst.hподключается директивой
#include <syst.h>
При этом расширение .hможно опускать:
#include <syst>
Для правильной работы некоторых функций из syst.hнеобходимо установить опцию:
Options Project Compiler Code Generation unsigned characters
Далее, при описании процедур и функций модуля syst.hсловоTypeявляется параметром шаблона и обозначает некоторый произвольный тип.
В модуле syst.hпредусмотрено подключение ряда наиболее часто используемых стандартных библиотечных модулей. Ниже приведен фрагмент текста модуляsyst.h, который выполняет подключение указанных библиотек.
#include <dos.h> // системные функции
#include <stdio.h> // функции ввода/вывода
#include <stdlib.h> // стандартные функции
#include <conio.h> // консольный ввод/вывод
#include <time.h> // операции со временем
#include <math.h> // математические функции
#include <string> // работа со строками STL
#include <fstream.h> // работа с потоками
using namespace std; // расширяет пространство имен для // работы с библиотекой шаблонов STL
В модуле syst.hсодержится ряд макроопределений #define:
pi- константа. Это имя действует наряду с системным именем этой константыM_PI, которое определено в стандартном библиотечном модулеmath.h. Значение этой контанты (также, как и других) представлено с точностью, соответствующей вещественному типуlongdouble;
sqr(x)- макрос-функция для возведения в квадрат;
cub(x)- такая же макрос-функция для возведения в куб;
ln(x)- более привычное имя функции - натурального логарифма (системное имяlog(x));
lg(x)- логарифм десятичный (то же, что иlog10(x));
tg(x)- тангенс (то же, что иtan(x)).
pause- макроопределение, которое может использоваться для создания паузы до нажатия произвольной клавиши. Пауза создается путем вызова функцииgetkey()из модуляsyst.h. Например, оператор
pause;
создаст паузу до нажатия клавиши. Этот оператор удобно использовать при отладочных пусках программы из инструментальной оболочки для удержания рабочего экрана после завершении работы программы.
С помощью оператора typedefопределены более короткие имена (byte,word,uint,ulong) для целых типов:
typedef unsigned char byte;
typedef unsigned short word;
typedef unsigned int uint;
typedef unsigned long ulong;
Модуль syst.hсодержит определения нескольких глобальных переменных и констант:
double CPU_Frequency = 2600; // Мгц
Значение этой переменной используется функцией stimer(микросекундный таймер). Для правильной работы этой функции в программе необходимо предусмотреть присвоение глобальной переменнойCPU_Frequency значения фактической тактовой частоты используемого процессора (в МГц).
const ulong RAND_MAXL = 0x80000000;
Используется для генерации случайных чисел (функции random,frand).
clock_t START_TIME;
Используются функциями таймера runtimerиtimer.