
- •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. Примеры
- •Литература
- •Алфавитный указатель функций
3.5. Таблицы связей с весами вершин, класс graph_v
Для представления взвешенных по вершинам графов предусмотрен класс graph_v, который образуется путем наследования из базового классаgraph. Весовая функция - целочисленная, область значений соответствует типуint. Ниже приводится текст объявления классаgraph_v.
class graph_v: public graph
{ public:
int* wv; // веса вершин
};
3.6. Таблицы связей с весами ребер, класс graph_r
Для представления взвешенных по ребрам графов предусмотрен класс graph_r, который образуется путем наследования из базового классаgraph. Весовая функция - целочисленная, область значений соответствует типуint. Ниже приводится текст объявления классаgraph_r.
class graph_r: public graph
{ public:
int nr; // число ребер
int* wr; // веса ребер
};
3.7. Таблицы связей с весами вершин и ребер, класс graph_vr
Для представления графов, взвешенных как по вершинам, так и по ребрам, предусмотрен класс graph_vr, который образуется путем множественного наследования из базовых классовgraph_vиgraph_r. Обе весовые функции - целочисленные, области их значений соответствует типуint. Ниже приводится текст объявления классаgraph_vr.
class graph_vr: public graph_v, public graph_r
{
};
3.8. Таблицы связей с координатами вершин, класс imgraph
Класс imgraphпредставляет рисунок (точнее - геометрический образ) графа в 2-х или 3-х мерном пространстве. Фактически это взвешенный по вершинам граф, в котором в качестве весов используются координаты вершин. Классimgraphявляется параметризованным, в качестве параметра-шаблона используется целое число - размерность пространства геометрического образа (dim). Этот параметр может принимать значения 2 или 3.
Ниже приведен текст объявления класса imgraph.
template <int dim>
class imgraph: public graph
{ public:
};
3.9. Класс pinv
Класс pinvпредставляет упорядоченный вектор степеней вершин графа - один из простых инвариантов на множестве графов. Он может использоваться для построения процедур распознавания изоморфности графов как инструмент предварительного сравнения графов. Степени вершин упорядочиваются по убыванию. Объект классаpinvсодержит следующую информацию:
- число вершин графа nv;
- упорядоченный вектор степеней вершин v.
Ниже приводится текст объявления класса pinvс комментариями.
class pinv
{ public:
int nv; // число вершин
vert* v; // вектор степеней вершин
pinv(); // конструктор без параметров
pinv(const pinv&); // конструктор копирования
~pinv(); // деструктор
pinv& operator=(const pinv&); // перегрузка присваивания
pinv& operator=(const graph&); // присваивание с преобразованием
pinv& operator=(int); // создание pinv-значения для
}; // безреберного графа
Конструктор без параметров pinv() создает упорядоченный вектор степеней вершин пустого графа.
Конструктор копирования pinv(const pinv&)создает копиюpinv-объекта.
Задачей деструктора ~pinv()является удаление динамической компонентыpinv-объекта при его уничтожении.
Функция класса pinv& operator = (const pinv&) реализует операцию динамического присваивания дляpinv-объектов.
Функция класса pinv& operator =(graf&)перегружает операцию присваивания с преобразованием видаpinv=graf. Операция используется для ролучения упорядоченного вектора степеней вершин графа по его таблице связей.
Функция класса pinv& operator = (int)создаетpinv-значение для безреберного графа с заданным числом вершин.