5. Представяне на граф. Обхождане на граф

Дефиниции [5.1, стр. 247]

graph
* Връх, възел (vertex, node), дъга, ребро (arc, edge), n върха, m ребра
* Ориентиран и неориентиран граф
, претеглен граф, компоненти на свързаност
* Път в граф, напр. 10-11-6-3-2
*
Цикъл, напр. 5-7-6-3-2-5
* Свързан граф,

* Мултиграф
(повторение на ребра)
* Предшественици и наследници, инцидентност, съседност, степен на връх
* Пълен граф, двуделен граф
, подграф
* Дърво (неориентиран свързан граф без цикли), кореново дърво, покриващо дърво

Представяне [5.2]

graph2

* Списък на ребрата [5.2.1]
Пример:
(1,2), (2,4), (2, 5), (3, 4), (3, 5), (4, 5)
памет O(m), съседни ребра O(m) или O(log m)

* Матрица на съседство (достижимост) [5.2.2]
Пример:
  1 2 3 4 5
1 0 1 0 0 0
2 1 0 0 1 1
3 0 0 0 1 1
4 0 1 1 0 1
5 0 1 1 1 0

памет O(n2), съществуване на ребро между два върха O(1), наследници на връх O(n)

* Списък на наследниците [5.2.3]
Пример:
1 -> 2
2 -> 1, 4, 5
3 -> 4, 5
4 -> 2, 3, 5
5 -> 2, 3, 4
памет O(m), наследници на връх O(1), ребро между два върха O(бр.насл.) или O(log бр.насл.)

* Матрица на инцидентност връх - дъга [5.2.4]
Пример:
       1 2 3 4 5
(1,2)  1 1 0 0 0
(2,4)  0 1 0 1 0
(2,5)  0 1 0 0 1
(3,4)  0 0 1 1 0
(3,5)  0 0 1 0 1
(4,5)  0 0 0 1 1
памет O(m.n), ребро между два върха O(m)

Обхождане [5.3]

graph3

*Обхождане в ширина (BFS) [5.3.1] лекция в MIT
Пример:
1; 2; 3,4,5; 7,6,12; 10; 11

*Обхождане в  дълбочина (DFS) [5.3.2]
Пример:
1,2,4,12,6,7,5; 10,11; 3
1,2,3,4,10,11;6,12,4; 3

*Най-кратък път между два върха по брой на върховете [5.4.1]
Пример:
1, 2, 4, 12, 6 (път)
1 2, 3, 6
(най-кратък път)

*Проверка за цикличност [5.4.1]

*Намиране на всички прости пътища между два върха [5.4.1]
Пример:
1, 2, 4, 12, 6
1 2, 3, 6
1, 2, 5, 7, 6


Домашно - задачи 5 и 6.