Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LabyInf2010221.doc
Скачиваний:
31
Добавлен:
26.02.2016
Размер:
3.42 Mб
Скачать

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

<номер_начальной_вершины> <номер_конечной_вершины> [<вес_ребра>]

В качестве примера приведем списки ребер (дуг), задающие те же три графа с рисунка 3.5, рисунка 3.6 и рисунка 3.7.

Таблица 3.5. Примеры списков ребер (дуг)

a b

a c

b c

b d

c d

c f

f d

b f

1 2

1 4

3 1

3 2

3 5

4 3

a b 1

a c 10

b c 2

b d 10

c d 3

Если задается ориентированный граф, то номера вершин понимаются как упорядоченная пара, а если граф неориентированный - как неупорядоченная.

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

<номер_начальной_вершины>: <номера_смежных_вершин>

Наиболее естественно применять этот способ для задания орграфов, однако и для остальных вариантов он тоже подходит.

В качестве примера приведем списки смежности, задающие все те же три графа, изображенные на рисунке 3.5, рисунке 3.6 и рисунке 3.7.

Таблица 3.6. Примеры списков смежности

a: b c

b: c d f

c: d f

d: f

1: 2 4

3: 1 2 5

4: 3

b: a 1 c 2 d 10

c: a 10 d 3

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

Дерево - это частный случай графа, наиболее широко применяемый в программировании.

Существует довольно много равносильных определений деревьев, вот лишь некоторые из них.

  1. Дерево - это связный граф без циклов.

  2. Дерево - это связный граф, в котором при N вершинах всегда ровно N-1 ребро.

  3. Дерево - это граф, между любыми двумя вершинами которого существует ровно один путь.

Аналогичным образом определяется и ориентированное дерево - как орграф, в котором между любыми двумя вершинами существует не более одного пути.

Таблица 3.7. Примеры деревьев

Дерево

Вершины

Ребра (дуги)

Армия

Солдаты и офицеры

Иерархия (командир - подчиненный)

Династия (родословная по мужской4 линии)

Монархи

Отношение "отец - сын"

Рисунок 3.8. Корневое дерево высоты 3

Мы будем изучать и использовать только один частный случай ориентированных деревьев - корневые деревья (рисунок 3.8).

Корневое дерево - это ориентированное дерево, в котором можно выделить вершины трех видов: корень, листья (другое их название: терминальные вершины) и остальные вершины (нетерминальные); причем должны выполняться два обязательных условия:

  1. из листьев не выходит ни одна дуга; из других вершин может выходить сколько угодно дуг;

  2. в корень не заходит ни одна дуга; во все остальные вершины заходит ровно по одной дуге.

Традиционно в математике и в родственных ей науках (в том числе и в теоретическом программировании) деревья «растут» вниз головой: это делается просто для удобства наращивания листьев в случае необходимости. Таким образом, на рисунках корень дерева оказывается самой верхней вершиной, а листья - самыми нижними.

Предок вершины v - это вершина, из которой исходит дуга, заходящая в вершину v. Потомок вершины v - это вершина, в которую заходит дуга, исходящая из вершины v. В этих терминах можно дать другие определения понятиям корень и лист: у корня нет предков, у листа нет потомков.

Бинарное дерево - это корневое дерево, каждая вершина которого имеет не более двух потомков. В таком случае иногда говорят о левом потомке и правом потомке для текущей вершины.

Высота корневого дерева - это максимальное количество дуг, отделяющих листья от корня. Если дерево не взвешенное, то его высота - это просто расстояние от корня до самого удаленного листа.

Поскольку любое дерево является графом, то его можно задавать любым из способов, перечисленных выше.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]