Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Data Structures and Algorithms in C++ 2e (На ру...docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.37 Mб
Скачать

13.1. Графы 599

13.1.1 Граф ADT

В этой секции мы вводим упрощенный абстрактный тип данных (ADT) графа, который

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

Как абстрактный тип данных, граф - коллекция элементов, которые сохранены в положениях графа - его вершины и края. Следовательно, мы можем сохранить элементы в графе или на его краях или на его вершинах (или оба). Граф ADT определяет два типа, Вершину и Край. Это также обеспечивает два типа списка для хранения списков вершин и краев, названных VertexList и EdgeList, соответственно.

Каждый объект Вершины u поддерживает следующие операции, которые обеспечивают доступ к элементу вершины и информации относительно краев инцидента и смежного ver-tices.

оператор* (): Возвратите элемент, связанный с u. incidentEdges (): Возвратите список края из инцидента краев на u. isAdjacentTo (v): Тест, смежны ли вершины u и v.

Каждый объект Края e поддерживает следующие операции, которые обеспечивают доступ к вершинам конца края и информации относительно отношений уровня края.

оператор* (): Возвратите элемент, связанный с e.

endVertices (): Возвратите список вершины, содержащий вершины конца e.

напротив (v): Возвратите вершину конца края e отличный от вершины v;

ошибка происходит, если e не инцидент на v.

isAdjacentTo (f): Тест, смежны ли края e и f.

isIncidentOn (v): Тест, является ли e инцидентом на v.

Наконец, полный граф, ADT состоит из следующих операций, которые обеспечивают

доступ к спискам вершин и краев, и обеспечивает функции для изменения графа.

вершины (): Возвратите список вершины всех вершин графа.

края (): Возвратите список края всех краев графа.

insertVertex (x): Вставьте и возвратите новый элемент хранения вершины x.

insertEdge (v, w, x): Вставьте и возвратите новый ненаправленный край с вершинами конца

v и w и элемент хранения x.

eraseVertex (v): Удалите вершину v и все ее края инцидента.

eraseEdge (e): Удалите край e.

600

13.2

Глава 13. Алгоритмы графа

Классы VertexList и EdgeList поддерживают стандартные операции по списку, как описано в Главе 6. В частности мы предполагаем, что каждый обеспечивает iterator (Раздел 6.2.1), который мы называем VertexItor и EdgeItor, соответственно. Они также обеспечивают, функции начинаются и заканчиваются, которые возвращают iterators к началу и концу их соответствующих списков.

Структуры данных для графов

В этой секции мы обсуждаем три популярных способа представлять графы, которые обычно упоминаются как структура списка края, структура списка смежности и матрица смежности. Во всех трех представлениях мы используем коллекцию, чтобы сохранить ver-tices графа. Относительно краев есть принципиальное различие между первыми двумя структурами и последним. Структура списка края и структура списка смежности только хранят края, фактически существующие в графе, в то время как матрица смежности хранит заполнителя для каждой пары вершин (есть ли край быть - подросток их или не). Как мы объясним в этой секции, это различие подразумевает, что, для графа G с n вершинами и m краями, списком края или смежностью перечисляют representa-tion, использует O (n + m) пространство, тогда как представление матрицы смежности использует O (n2) пространство.

13.2.1 Структура списка края

Структура списка края является возможно самой простой, хотя не самое эффективное, репутация -

resentation графа G. В этом представлении вершина v G хранение элемента x явно представлено объектом вершины. Все такие объекты вершины хранятся в коллекции V, такой как список узла или вектор. Если V вектор, например, то мы естественно думаем о вершинах, как пронумерованных.

Объекты вершины

У объекта вершины для вершины v хранение элемента x есть членские переменные для:

• Копия x

• Положение (или вход) объекта вершины в коллекции V

Отличительный признак структуры списка края не то, как это представляет вершины,

но путь, которым это представляет края. В этой структуре край e G хранение элемента x явно представлено объектом края. Объекты края хранятся в коллекции E, который, как правило, был бы список узла или вектор.

Объекты края

У объекта края для края e хранение элемента x есть членские переменные для: