Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа №1.DOC
Скачиваний:
46
Добавлен:
02.05.2014
Размер:
97.28 Кб
Скачать

Список смежности и список инцидентности -

----------------------------------------------

Список смежности представляет собой список из n строк, ( n - количество вершин), где в i - ой строке записываются номера вершин, смежных с ершиной под номером i. Как мы видим, этот список тем больше, чем больше связей между вершинами графа.

Список инцидентности задается аналогично списку смежности, только с одной лишь разницей, что в i - ой строке записываются номера ребер ( или дуг ), инцидентных данной ( i - ой ) вершине.

Задание графов такими способами позволяет более экономно расходовать память, однако они несколько сложнее при реализации и обработке. Из-за того, что строки в списках переменной длины, появляется необходимость в использовании динамических переменных и указателей. Рассмотрим наболее тривиальную реализацию списка смежности:

Пусть задан граф на n вершинах и требуется создать некоторую структуру переменных в памяти ЭВМ, отображающую список смежности, составленный для данного графа. Для начала выясним, что будет представлять собой данная структура. Так как строка списка содержит номера вершин, то естественно предположить, что мы должны иметь некоторую цепочку динамических переменных целочисленного типа, связанных между собой. Такая связь обеспечивается использованием указателей, обьединенных вместе с целочисленной переменной в запись ( Pascal: record ). Для того, чтобы обеспечить хранение входных указателей в такие цепочки, используется одномерный массив указателей, имеющий длину, равную количеству вершин графа. Признаком конца цепочки можно использовать каое либо значение, не допускаемое при нумерации вершин ( например - "0" ), занесенное в целочисленную переменную последнего блока.

Для созданя такой структуры предварительно необходимо сделать объявления такого рода:

Type

BlockPtr = ^BlockType;

BlockType = record

Number :integer;

Point :BlockPtr;

end;

Var

In_Ptr :array [1..TopsCount] of BlockPtr;

Создание цепочки в памяти осуществляется при вводе списка смежности при помощи процедуры New (BlockPtr_Type_Variable), где BlockPtr_Type_Variable - переменная типа BlockPtr.

Задание

1. Разработать процедуры ввода графа в виде матрицы инцидентности, матрицы смежности и списка смежности с возможностью корректировки введенных данных.

2. Разработать процедуры преобразования различных форм хранения графа:

-- из матрицы смежности в список смежности и обратно;

-- из матрицы инцидентности в список смежности и обратно;

3. Используя указанные выше процедуры, получить программу, выполняющую следующие функции:

-- ввод графа в любой из трех форм представления (по требованию пользователя) с возможностью коррекции данных;

-- хранение введенного графа в памяти ЭВМ в виде списка смежности;

-- вывод информации о графе в любом из трех видов ( также по требованию пользователя ) на дисплей;