- •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. Примеры
- •Литература
- •Алфавитный указатель функций
Int cmp(const pinv& a, const pinv& b)
Лексикографическое сравнение двух -инвариантов (упорядоченных векторов степеней вершин). Возвращаемое значение:
-1, если a<b,
0, если a=b,
1, если a>b.
int cmpl(const graph& g, int i, int k)
Лексикографическое сравнение двух строк таблицы связей графа gс номерамиi,k. Возвращаемое значение формируется по тому же правилу, что и для функцииcmp.
int iso(const graph& A, const graph& B)
Проверить, являются ли графы A,Bизоморфными.Используется ПНВ-алгоритм [12].
int isos(const graph& A, const graph& B, int* p)
Получить изоморфную подстановку графа Aна графB. Если изоморфных подстановок несколько, функция находит одну из них. Найденная подстановка размещается в массивеp. Если подстановка найдена (т.е. графы изоморфны), функция возвращает 1, в противном случае - 0, при этом массивpобнуляется. Использован ПНВ-алгоритм [12].
int isulamequ(const graph& A, const graph& B)
Проверить, являются ли графы A,BУлам-эквивалентными.
ulong nisos(const graph& A, const graph& B)
Найти количество изоморфных подстановок графа Aна графB. ЕслиA=B, функция возвращает количество автоморфизмов графа А. Использован ПНВ-алгоритм[12].
12. Поиск клик, подграфов и компонентов графа
int cliq(const graph& g, vert* e)
Найти максимальную клику в графе g. Функция применима только в том случае, еслиg.form()=0 (неориентированный граф без петель и кратных ребер). ИспользуетсяVP-алгоритм. Вершины найденной клики заносятся в массивe. Возвращаемое значение - плотность графаg(число вершин найденной клики).
int findcycl(const graph& g, int j, int L, vert* e)
Найти цикл в графе g, который проходит через вершинуjи имеет длинуL. Найденный цикл заносится в массивe. Возвращаемое значение: 0 - если цикл не найден, 1 - если цикл найден. Если цикл не найден, массивeобнуляется.
int hamilt_c(const graph& g, int* e)
Найти гамильтонов цикл в графе g. Найденный цикл заносится в массивe. Возвращаемое значение: 0 - если цикл не найден, 1 - если цикл найден. Если цикл не найден, массивeобнуляется.
graph neib(const graph& g, int k)
Получить граф, который является подграфом ближайших соседей вершины номер kв графеg.
13. Другие функции и процедуры библиотеки
char* about_algraph()
Возвращает указатель на строку символов, которая содержит информацию о библиотеке Algraph. Например, выполнение строки
cout << about_algraph;
выводит на экран следующую информацию:
VP/C++ Library, ALGRAPH unit, rel. 08.2003
Computing on Graphs
V.P.Pinchuk, ZNTU, Ukraine
ph.(0612)636800, e-mail: vpinchuk@zntu.edu.ua
int ver(const graph& g)
Проверить правильность таблицы связей графа.
void one_two(int k, int& i, int& j);
По заданному номеру бита kбинарного кода находит индексы соответствующего элемента матрицы смежностиi,j.
int two_one(int i, int j);
По заданным индексам элемента матрицы смежности i,jнаходит и возвращает номер соответствующего бита бинарного кода.
14. Утилиты
Программа verr.exeосуществляет проверку целостности и правильностиr-файла. Выполняются следующие проверки:
- соответствие числа графов, указанного в заголовке r-файла, фактическому количеству графов, записанных вr-файле;
- соответствие контрольной суммы, указанной в заголовке r-файла, фактической контрольной суммеr-файла;
- имеют ли графы, представленные в r-файле, одинаковое число ребер.
Имя проверяемого r-файла должно быть указано в командной строке.
15. Компиляция программ
Модуль algraph.hможет использоваться совместно с пакетамиBorland5.xиBuilder4.0/5.0/6.0. Компиляция программ осуществляется с применением проектов. Для начала работы с системойalgraphнеобходимо выполнить копирование файловsyst.hиalgraph.hв системный п/каталогBC5 \INCLUDEи файлаalgraph.libв п/каталогBC5 \LIB.
Компиляция программы выполняется в следующей последовательности.
1. Создать или загрузить в рабочее окно исходный файл (например, test.cpp).
2. Создать проект путем выбора в главном меню п. FileNewProject. В окне
New Target установить:
Project Path and Name - d:\vp\test.ide
Target Model - Console
Libraries - Static
и нажать ОК.
3. В появившемся окне проекта Project:d:\vp\test.ideудалить узлыtest.defиtest.rc(это файл определений и файл ресурсов, присутствие их не обязательно, для удаления использовать правую кнопку мыши).
4. Щелкнуть правой кнопкой мыши на узле test.exe, выбратьAddnode. В появившемся окне, в окошкеFilenameнабратьalgraph.lib, нажать кнопкуOpen. В окне проекта должен появиться узелalgraph.lib, подключенный к узлуtest.exe.
5. Выполнить компиляцию программы путем выбора из главного меню п. ProjectBuildallили использовать соответствующую пиктограмму.
6. Если компиляция программы успешно завершена и работа с проектом далее не предполагается, закрыть все окна в оболочке Borlandи закрыть проект путем выбора п.ProjectClose.
7. Удалить файлы с расширениями .dsw, .mbt, .mrt, .obj.