Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АиПА / include / algraph.doc
Скачиваний:
16
Добавлен:
07.02.2016
Размер:
582.14 Кб
Скачать

4. Форматы данных и преобразование форматов

4.1. Нумерация вершин графа

Компоненты классов и другие объекты и функции, связанные с графами, предусматривают нумерацию вершин, начиная с нуля. Это соответствует традициям языка С и позволяет более экономно использовать память. В то же время для внешнего представления графов используется более привычная для публикаций нумерация вершин графа, начиная с единицы. При выполнении операций, представленных средствами библиотеки Algraph/C++, переход от одного способа нумерации к другому выполняется автоматически. Например, при выводе значения типаgraph(таблица связей графа) на экран или в текстовый файл будет выполнен переход от внутренней нумерации вершин к внешней.

4.2. Представление графов

Для представления графов могут использоваться следующие форматы:

- graph(таблица связей, невзвешенные неориентированные или ориентированные графы, графы с петлями и кратными ребрами);

- graph_v(то же самое, но для графов взвешенных по вершинам);

- graph_r(то же самое, но для графов взвешенных по ребрам);

- graph_vr(то же самое, но для графов взвешенных и по вершинам и по ребрам);

- matad(матрица смежности, невзвешенные неориентированные или ориентированные графы, графы с петлями и кратными ребрами);

- int(безреберные графы);

- бинарные коды (невзвешенные неориентированные графы без петель и кратных ребер), сохраняются в строках типа word* или в файлах .bicили .rтипа.

При выполнении операции присваивания формат представления графа в некоторых случаях преобразуется автоматически, при этом используется набор функций, перегружающих операцию присваивания. Возможные варианты такого преобразования показаны в таблице 2. Тип левого операнда операции присваивания указан в первой колонке таблицы, тип правого операнда - в первой строке.

Таблица 2. Возможные преобразования форматов представления графов при выполнении операции присваивания

graph

graph_v

graph_r

graph_vr

imgraph

matad

int

graph

+

+

+

+

+

+

+

graph_v

+

+

-

+

-

+

+

graph_r

+

-

+

+

-

+

+

graph_vr

+

-

-

+

-

+

+

imgraph

+

-

-

-

+

+

+

matad

+

+

+

+

+

+

+

int

+

+

+

+

+

+

+

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

matad M;

graph_r gr;

int n = 20;

M = n;

gr = n;

переменная Mбудет представлять матрицу смежности 20-вершинного безреберного графа (все элементы матрицы будут равны нулю), а переменнаяgrбудет содержать таблицу связей 20-вершинного безреберного графа и пустой (не имеющий ни одного элемента) массив весов его ребер.

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

Соседние файлы в папке include