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

41. Способы задания графов

Сущесвует два основных способа задания графов:

геометрический;

аналитический.

Аналитический способ разделяется на два вида:

1) Граф задается с помощью двух множеств: множество вершин и множество ребер, а также предиката, который указывает, какие вершины соединены с какими ребрами.

G(X; V)

X{X1; X2;...Xn}

V{V1; V2...Vm}

P{Xi; Vt; Xj}

Этот способ не является формализованным.

2) Граф задается матрицей.

Существует несколько матриц:

матрица смежности ,матрица инцидентнсти и другие;

Матрица смежности представляет собой квадратную матрицу n на n, где n- количество вершин графа.

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

При более подробном рассмотрении можно заметить, что в случае графа без петель матрица имеет ряд особенностей:

главная диагональ матрицы всегда заполнена нулями, так как вершина не может быть смежна сама себе;

если наш граф неориентированный - то часть матрицы под главной диагональю и над ней абсолютно идентичны.

На Pascal-е матрица смежности чаще всего задается при помощи двумерного массива:

Matr_Sm: array [1..TopsCount,1..TopsCount] of byte,

либо

Matr_Sm:array [1..TopsCount,1..TopsCount] of boolean;

Матрица инцидентности

представляет собой матрицу m на n, где m - количество ребер или дуг графа (орграфа), а n - количество вершин. На пересечении i - ой строки и j - ого столбца проставляются значения по следующему правилу:

"1" - если i - ое ребро и j - ая вершина инцидентны (для орграфа - если i - ая дуга "входит" в j - ую вершину);

"0" - если i - ая дуга и j - ая вершина не инциндентны;

"-1" - только в случае орграфа: если i - ая дуга "выходит" из j - ой вершины);

«1» применяют для невзвешенного графа, для взвешенного графа применяют вес ребра.

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

Типичный пример задания матрицы инцидентности на языке Pascal - при помощи двумерного массива m на n:

Matr_Ints: array [1..TopsCount, 1..LinksCount] of integer;

42. Задание графа матрицей Инцидентности.

Матрица инцидентности

представляет собой матрицу m на n, где m - количество ребер или дуг графа (орграфа), а n - количество вершин. На пересечении i - ой строки и j - ого столбца проставляются значения по следующему правилу:

"1" - если i - ое ребро и j - ая вершина инцидентны (для орграфа - если i - ая дуга "входит" в j - ую вершину);

"0" - если i - ая дуга и j - ая вершина не инциндентны;

"-1" - только в случае орграфа: если i - ая дуга "выходит" из j - ой вершины);

«1» применяют для невзвешенного графа, для взвешенного графа применяют вес ребра.

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

Типичный пример задания матрицы инцидентности на языке Pascal - при помощи двумерного массива m на n:

Matr_Ints: array [1..TopsCount, 1..LinksCount] of integer;