
- •1. Графы: определения и примеры Неориентированные графы
- •Ориентированные графы
- •Взвешенные графы
- •2. Способы представления графов
- •Матрица смежности
- •Список ребер
- •Списки смежности
- •3. Деревья
- •Основные определения
- •4. Способы представления деревьев
- •5. Дерево двоичного поиска
- •7. Обходы графа
- •7.1 Процедура поиска в ширину
- •7.2 Процедура поиска в глубину
2. Способы представления графов
Существует довольно большое число разнообразных способов представления графов. Однако мы изложим здесь только самые полезные с точки зрения программирования.
Матрица смежности
Матрица смежности Sm - это квадратная матрица размером NxN (N - количество вершин в графе), заполненная единицами и нулями по следующему правилу:
Если в графе имеется ребро e, соединяющее вершины u и v, то Sm[u,v] = 1, в противном случае Sm[u,v] = 0.
Заметим, что данное определение подходит как ориентированным, так и неориентированным графам: матрица смежности для неориентированного графа будет симметричной относительно своей главной диагонали, а для орграфа - несимметричной.
Задать взвешенный граф при помощи матрицы смежности тоже возможно. Необходимо лишь внести небольшое изменение в определение:
Если в графе имеется ребро e, соединяющее вершины u и v, то Sm[u,v] = ves(e), в противном случае Sm[u,v] = 0.
Это хорошо согласуется с замечанием, сделанным в предыдущем пункте: невзвешенный граф можно интерпретировать как взвешенный, все ребра которого имеют одинаковый вес 1.
Небольшое затруднение возникнет в том случае, если в графе разрешаются ребра с весом 0. Тогда придется хранить два массива: один с нулями и единицами, которые служат показателем наличия ребер, а второй - с весами этих ребер.
В качестве примера приведем матрицы смежности для трех графов, изображенных на рис. 5, рис. 6 и рис. 7 (см. табл. 8).
Таблица 8. Примеры матриц смежности |
||||||||||||||||
|
a |
b |
c |
d |
f |
|
1 |
2 |
3 |
4 |
5 |
|
a |
b |
c |
d |
a |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
a |
0 |
1 |
10 |
0 |
b |
1 |
0 |
1 |
1 |
1 |
2 |
0 |
0 |
0 |
0 |
0 |
b |
1 |
0 |
2 |
10 |
c |
1 |
1 |
0 |
1 |
1 |
3 |
1 |
1 |
0 |
0 |
1 |
c |
10 |
2 |
0 |
3 |
d |
0 |
1 |
1 |
0 |
1 |
4 |
0 |
0 |
1 |
0 |
0 |
d |
0 |
10 |
3 |
0 |
f |
0 |
1 |
1 |
1 |
0 |
5 |
0 |
0 |
0 |
0 |
0 |
|
|
|
|
|
Удобство матрицы смежности состоит в наглядности и прозрачности алгоритмов, основанных на ее использовании. А неудобство - в несколько завышенном требовании к памяти: если граф далек от полного, то в массиве, хранящем матрицу смежности, оказывается много "пустых мест" (нулей). Кроме того, для "общения" с пользователем этот способ представления графов не слишком удобен: его лучше применять только для внутреннего представления данных.