Professional Documents
Culture Documents
10. Графови
1
за интерна употреба
2
за интерна употреба
3
за интерна употреба
Граф G се дефинира како двојка (V, E), каде што V е множество темиња,
а E е множество ребра при што на секое ребро е придружен пар темиња
преку така наречената функција на соседство E → V×V. Темињата u и v
во реброто e = (u, v) E, се нарекуваат краеви на реброто. Доколку
двојките на темињата се разгледуваат како неподредени, т.е. кога (u, v) =
(v, u), графот се нарекува неориентиран. Кога ребрата на графот се
разгледуваат како подредени двојки, т.е. кога (u, v) ≠ (v, u), графот се
нарекува ориентиран граф или орграф. Тогаш ребрата ги нарекуваме
ориентирани ребра. Во случај на ориентиран граф, темето u во реброто
(u, v) се нарекува почеток, а темето v крај на реброто.
4
за интерна употреба
5
за интерна употреба
d (v ) 2 V
vV
и d
vV
iz (v ) d vl (v ) V
Матрица на соседство
Матрицата на соседство е веројатно најчесто користениот начин на
претставување на графовите. Матрицата на соседство е матрица A = [ai,j]
од ред |V|×|V| каде што ai,j=1 ако имаме ребро од темето vi до темето vj,
т.е. ако (vi, vj)E и ai,j=0 во спротивниот случај. Кај неориентираните
графови матрицата на соседство е симетрична, па е доволно да се
чуваат само елементите од горниот триаголник. Графовите од сл. 10.5а
и 10.5б се претставуваат со следниве матрици:
6
за интерна употреба
0 1 0 0 0 0 1 0 0 0
1 0 1 1 1 0 0 0 1 0
Aa 0 1 0 2 0 , Aб 0 1 0 2 0
0 1 2 0 1 0 0 0 0 1
0 1 0 1 1 0 1 0 0 1
Кога графот е со тежински ребра, бројот ai,j е тежина на реброто (vi, vj).
Оваа тежина обично претставува растојание, цена на чинење или
профит. Доколку тежината може да има вредност „0“ треба да се воведе
некоја друга ознака за непостоечките ребра, на пример ai,j = ∞ или ai,j =
−∞, за да се разликува реброто со тежина 0 од непостоење на ребро. Во
случај на тежински граф, паралелните ребра не можат соодветно да се
прикажат. Тежинскиот граф од слика 10.7б, може да се претстави со
следнава матрица:
2
2 8 7 1
Ar 8 0;6 ,
7 0;6 2
1 2 16
Меморискиот простор кој треба да се искористи при репрезентацијата на
графот со n темиња со помош на матрица на соседство е n2. При
реализација на претстава на граф со матрици на соседност пристапот до
елементите е директен.
Листа на соседство
Листата на соседи за темето i е листа во која се наредени сите соседни
темиња за темето i, H[i]. За секое од темињата на графот се чува листа
во која секој од елементите претставува едно соседно теме. На сликата
10.8 е даден еден граф и неговата претстава со листа на соседи.
7
за интерна употреба
Список на ребра
Список на ребра е низа двојки темиња (u, v), u,vV што ги претставуваат
ребрата на графот. За графот од слика 10.5б (може да важи и за слика
10.5а), списокот на ребра е: (1, 2), (2,4), (3, 2), (3, 4), (3, 4), (4, 5), (5, 2),
(5, 5), каде што темињата се претставени со своите индекси. Во пракса
обично се користат две низи, едната за почетоците на ребрата, а другата
за краевите. Во тој случај би ги имале следниве две низи:
p = (1, 2, 3, 3, 3, 4, 5, 5)
q = (2, 4, 2, 4, 4, 5, 2, 5)
8
за интерна употреба
9
за интерна употреба
Секој пат е верига, а секоја верига е маршута. Секој пат е верига бидејќи
ако не се поминува два пати низ исто теме не е можно да се помине два
пати по исто ребро.
10
за интерна употреба
11
за интерна употреба
Јасно е дека постои само еден комплетен граф или орграф со n темиња.
Комплетниот граф со n темиња обично се означува со Kn.
12
за интерна употреба
14
за интерна употреба
15
за интерна употреба
procedure DFS(v)
//Za daden neorientiran graf G = (V,E) so n teminja i niza
VlSlTED(n) inicijalno postavena na nula, ovoj algoritam ke gi poseti site teminja dostapni od
temeto v. G i VISITED se globalni.//
VISITED (v) 1
for sekoe teme w sosedno na v do begin
if VISlTED(w) = 0 then call DFS(w)
end
end DFS
16
за интерна употреба
DFS(G)
1 for sekoe teme u V[G]
2 do color[u] ← WHITE
3 [u] ← NIL
4 time ← 0
5 for sekoe teme u V[G]
6 do if color[u] = WHITE
7 then DFS-VISIT(u)
DFS-Visit(u)
1 color[u] ← GRAY pronajdeno e belo teme u
2 d[u] ← time← time + 1
3 for sekoe v Adj[u] proveri ja vrskata (u,v)
4 do if color[v] = WHITE
5 then [v] ← u
6 DFS-Visit(v)
7 color[u] = BLACK crno u; zavrseno e
8 f[u] ← time← time + 1
17
за интерна употреба
BFS(G,s)
1 for ekoe teme u V[G] - {s}
2 do color[u] ← WHITE
3 d[u] ← ∞
4 [u] ← NIL
5 color[s] ← GRAY
6 d[s] ← 0
7 [s] ← NIL
8 Q ← {s}
9 while Q ≠
10 do u ← head[Q]
11 for sekoe v Adj[u]
12 do if color[v] = WHITE
13 then color[v] ← GRAY
14 d[v] ← d[u] + 1
15 [v] ← u
16 ENQUEUE(Q,v)
17 DEQUEUE(Q)
18 color[u] ← BLACK
19
за интерна употреба
20
за интерна употреба
21