Curs14 Grafuri

S-ar putea să vă placă și

Sunteți pe pagina 1din 12

1 Notiuni de teoria grafurilor

1.1 Notiunile de graf, subgraf, graf partial. Gradul unui


vrf
Denitia 1 Numim graf neorientat o pereche ordonata de multimi G =
(V; E); unde V este o multime nita si nevida iar E este o multime de perechi
neordonate de elemente din V:

Elementele lui V se numesc vrfuri, iar elementele (i; j) 2 E se numesc


muchii ale lui G:

Fig 1. graf neorientat

Vom reprezenta vrfurile unui graf ca puncte n plan, iar muchiile prin seg-
mente. Daca ntre dou
a vrfuri i; j 2 V exist
a o muchie, spunem c
a vrfurile i; j
sunt adiacente, iar despre muchia (i; j); spunem c a este incident
a celor dou a
vrfuri.

Denitia 2 Numim graf orientat (digraf ) o pereche ordonata de multimi


G = (V; E); unde V este o multime nita si nevida iar E este o multime de
perechi ordonate de elemente din V:
Elementele lui V se numesc vrfuri, iar elementele (i; j) 2 E se numesc
arce ale lui G:

Pentru un arc (i; j); vrful i se numeste extremitate initial


a, iar j; extremitate
nal
a. Cele doua vrfuri se vor numi adiacente, iar arcul (i; j); incident celor
dou
a vrfuri.
Arcele unui graf orientat, le vom marca prin s ageti.

1
Fig. 2. graf orientat

Conventie: n cele ce urmeaz a, vom considera doar grafuri f


ar
a muchii/arce
care s
a se repete (1-grafuri), si f
ar
a muchii/arce de forma (i; i) (f
ar
a bucle).

Prin graf partial al unui graf G = (V; E); se ntelege orice graf obtinut prin
suprimarea unor muchii/arce ale lui G:
Un subgraf al grafului G = (V; E) este un graf obtinut prin suprimarea
unor vrfuri ale lui G si a muchiilor/arcelor incidente acelor vrfuri.

Denitia 3 1. Prin gradul unui vrf v al unui graf, ntelegem numarul


muchiilor/arcelor incidente cu v: Gradul lui v se noteaza cu d(v):
2. ntr-un graf orientat, numim:

(a) gradul exterior al unui vrf v; si notam cu d+ (v); numarul arcelor


au pe v ca extremitate initiala.
(b) gradul interior al unui vrf v; si notam cu d (v); numarul arcelor
au pe v ca extremitate nala.

De exemplu, n graful din Fig. 2, avem d+ (1) = 1 (doar arcul (1,2) pleac a
din 1), d (v) = 2 (arcele (2,1) si (5,1) au pe 1 ca extremitate nal
a) si d(1) =
1 + 2 = 3:

Propozitia 4 Daca un graf are m muchii/arce, atunci suma gradelor vrfurilor


sale este X
d(v) = 2m:
v2V

2
Justicarea armatiei de mai sus const a n faptul c
a ecare arc(/muchie)
este num arat de dou
a ori atunci cnd socotim suma gradelor vrfurilor (o dat a
cnd socotim gradul extremit atii initiale, si nc
a o dat
a, n gradul extremit
atii
nale). Printr-un rationament asem an ator, deducem

Propozitia 5 Daca un graf orientat are m arce, atunci


X X
d+ (v) = m; d (v) = m:
v2V v2V

Exemplu: Numim graf complet, un graf n care orice dou a vrfuri sunt
adiacente.
Daca un graf neorientat cu n vrfuri este complet, atunci:
- gradul ec
arui vrf este d(v) = n 1;
1P (n 1)n
- numarul muchiilor grafului este m = d(v) = :
2 v2V 2

Fig.3. Graf complet

Un vrf al c
arui grad d(v) este 0, se numeste vrf izolat.

Exercitii:

1. S
a se arate c
a orice graf neorientat cu n 2 vrfuri contine cel putin dou
a
vrfuri care au acelasi grad.

2. Determinati: a) num arul grafurilor neorientate/orientate cu n vrfuri; b)


numarul grafurilor partiale ale unui graf neorientat/orientat cu m muchii/arce.

3
1.2 Lant, drum, ciclu, circuit
A. Fie G = (V; E) un graf neorientat.

Denitia 6 Numim:

lant, o succesiune de vrfuri L = [vi1 ; vi2 ; :::; vik ] cu proprietatea ca orice


doua vrfuri consecutive ale lui L sunt adiacente;
lant elementar, un lant L = [vi1 ; vi2 ; :::; vik ] cu proprietatea ca orice
doua vrfuri ale acestuia sunt distincte;
ciclu, un lant L = [vi1 ; vi2 ; :::; vik ] pentru care primul si ultimul vrf co-
incid: vi1 = vik si muchiile (vih ; vih+1 ) sunt doua cte doua distincte;
ciclu elementar, un ciclu L n care toate vrfurile, cu exceptia primului
si a ultimului, sunt distincte.

Fig. 4

n Fig. 4, f1; 6; 8; 7; 6; 1; 10; 2g este un lant, ns


a nu este un lant elementar,
deoarece el trece prin vrfurile 1 si 6 de cte dou a ori; f1; 6; 7; 3; 4; 9; 10; 2g este
un lant elementar; f1; 2; 3; 4; 5; 3; 7; 6; 1g este un ciclu (nsa nu este elementar,
deoarece trece de dou a ori prin 6}, iar f1; 2; 3; 7; 6; 1g este un ciclu elementar.

Un ciclu care parcurge toate muchiile unui graf cte o singur a data, poart
a
numele de ciclu eulerian, iar un graf care contine un ciclu eulerian, se numeste
graf eulerian.
Se poate demonstra urm atoarea teorem a:

Teorema 7 Un graf neorientat fara vrfuri izolate este eulerian daca si numai
daca:

4
Figure 1: Fig. 5. Graf eulerian

1. ntre orice doua vrfuri ale grafului exista un lant (i.e., graful este conex)
si
2. gradele tuturor vrfurilor sunt numere pare.

De exemplu, graful (complet) din Fig. 5 este eulerian, deoarece toate vr-
furile au gradul 4. Un ciclu eulerian este, de exemplu, f1; 4; 2; 5; 3; 1; 5; 4; 3; 2; 1g:

Un ciclu elementar care contine toate vrfurile unui graf se numeste ciclu
hamiltonian. Un graf care contine un ciclu hamiltonian, se numeste graf
hamiltonian.
Observatie: Grafurile complete sunt hamiltoniene.
De exemplu, graful din Fig. 5 este hamiltonian. Un ciclu hamiltonian este
f1; 2; 3; 4; 5; 1g:

Nu se cunosc conditii necesare si suciente pentru ca un graf sa e hamil-


tonian. Se cunosc ns
a conditii suciente, una din ele este urm
atoarea:

Teorema 8 (Dirac, 1952): Daca un graf neorientat are n 3 vrfuri, iar


gradul ecarui vrf v satisface inegalitatea
n
d(v) ;
2
atunci graful este hamiltonian.

B. Pentru grafuri orientate, se denesc notiuni analoage celor de lant,


lant elementar, ciclu si, respectiv, ciclu elementar. Anume:

Denitia 9 ntr-un graf orientat G = (V; E); numim:

5
drum - o succesiune de vrfuri D = [vi1 ; vi2 ; :::; vik ] cu proprietatea ca n-
tre orice doua vrfuri consecutive vih ; vih+1 ale lui D exista arcul (vih ; vih+1 );
drum elementar, un drum D = [vi1 ; vi2 ; :::; vik ] cu proprietatea ca orice
doua vrfuri ale acestuia sunt distincte;
circuit, un drum D = [vi1 ; vi2 ; :::; vik ] pentru care primul si ultimul vrf
coincid: vi1 = vik si muchiile (vih ; vih+1 ) sunt doua cte doua distincte;
circuit elementar, un circuit D n care toate vrfurile, cu exceptia
primului si a ultimului, sunt distincte.

Exercitii:

1. Ar
atati c
a, dac
a ntr-un graf exist
a un lant/drum ntre dou
a vrfuri i si j;
atunci ntre cele doua vrfuri exist
a un lant elementar/drum elementar.

2. Determinati toate grafurile hamiltoniene cu n = 4 vrfuri.


3. Determinati toate grafurile euleriene cu 4 vrfuri.
4. Dati exemple de grafuri care:

(a) S
a e euleriene, dar s
a nu e hamiltoniene;
(b) s
a e hamiltoniene, dar s
a nu e euleriene;
(c) s
a e si hamiltoniene si euleriene;
(d) s
a nu e nici hamiltoniene, nici euleriene.

5. Adaugati un numar minim de muchii grafului din gura de mai jos, astfel
nct el s
a devin
a eulerian:

6
1.3 Reprezentarea grafurilor n memoria calculatorului.
Parcurgerea grafurilor
Pentru reprezentarea grafurilor n memoria sistemelor de calcul, exist a mai
multe metode, alegerea acestora facndu-se de obicei n functie de problema
de rezolvat.

Fie G = (V; E) un graf, cu n vrfuri si m muchii/arce.

1) Matricea de adiacent
a A = (aij )i;j=1;n este o matrice cu n linii si n
coloane, denit
a astfel:

1 daca (i; j) 2 E
aij =
0:::::^{n caz contrar:

Pentru grafuri neorientate, matricea de adiacent


a este simetric
a.

2) Liste de adiacent a - pentru ecare vrf i se construieste o list


a Li a
succesorilor s
ai (i.e., a v
arfurilor j 2 V pentru care (i; j) 2 E):

vrf succesori
i j1 ; j2 ; :::

Listele de adiacent
a se pot reprezenta si cu ajutorul unor tablouri. Anume,
denim o matrice T cu 2 linii si :

n + 2m coloane n cazul grafurilor neorientate;


n + m coloane n cazul grafurilor orientate,

astfel:
n primele n coloane, scriem pe pozitia T (1; i) vrfurile grafului, iar pe pozitia
T (2; i); num arul coloanei j a lui T la care ncepem enumerarea succesorilor lui
i: Dac a i nu are succesori, atunci T (2; i) se va completa cu 0.
Pe urm atoarele coloane, vom scrie pe pozitia T (1; j); unde j = T (2; i); primul
element al listei succesorilor lui i; apoi, pe pozitia T (2; j); num
arul k al coloanei
unde g asim urm atorul element al listei succesorilor lui i: Apoi, T (1; k) va
urm atorul element al listei Li ; iar T (2; k) va indica num arul coloanei lui T
pe care vom trece urm atorul element al lui Li etc. n momentul n care lista
succesorilor se ncheie, scriem 0 pe linia a doua a coloanei respective.

3) Matricea de incident a:
Presupunem c a graful neorientat G are n vrfuri, numerotate de la 1 la n, si
m muchii, notate e1 ; :::; em :
A0 este o matrice de tip n m; denit a astfel:

1 daca muchia ej este incidenta v^


arf ului i
a0ij := :
0 ^{n caz contrar

7
Pentru grafuri orientate, matricea de incident
a va indica si dac
a un arc are
drept extremitate initial
a sau nal
a un anumit vrf:
8
< 1 daca arcul ej iese din v^ arf ul i
a0ij := 1 daca arcul ej intra ^{n v^arf ul i :
:
0 ^{n caz contrar
4) Lista de incident a (vectorul muchiilor/arcelor) este un vector al
c
arui num ar de elemente este egal cu num arul m al muchiilor/arcelor grafului.
Elementele listei de incident a sunt perechi de vrfuri (i; j); unde i si j reprez-
int
a extremitatile initial
a, respectiv,
nal
a, ale muchiei.

Exemplu: Consider
am graful orientat

Fig. 6
Pentru graful din Fig. 6, avem:
matricea de adiacent
a:
0 1
0 1 0 0 0 0
B 1 0 0 0 0 0 C
B C
B 0 0 0 1 0 1 C
A=B
B
C
C
B 0 1 0 0 0 1 C
@ 0 0 1 0 0 1 A
0 1 0 0 0 0

listele de adiacent
a:
i Li
1 2
2 1
3 4; 6
4 2; 6
5 3; 6
6 2

8
respectiv,
!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
)T = 1 2 3 4 5 6 2 1 4 6 2 6 3 6 2
7 8 9 11 13 15 0 0 10 0 12 0 14 0 0

matricea de incident
a
0 1
1 1 0 0 0 0 0 0 0
B 1 1 1 1 0 0 0 0 0 C
B C
B 0 0 0 0 0 1 1 1 0 C
I=B B 0
C
C
B 0 1 0 1 1 0 0 0 C
@ 0 0 0 0 0 0 0 1 1 A
0 0 0 1 1 0 1 0 1

si vectorul arcelor,

e = f(1; 2); (2; 1); (2; 4); (2; 6); (4; 6); (4; 3); (3; 6); (5; 3); (5; 6)g:

Pornind de la matricea de adiacent a a unui graf G = (V; E) cu jV j = n; se


poate construi asa-numita matrice a drumurilor grafului, M 2 Mn n (f0; 1g);
dat
a prin
1 daca exista drum de la i la j
mij =
0:::::^{n caz contrar:

Algoritmul de determinare a matricii drumurilor unui graf part a numele


de algoritmul Roy-Warshall, si el const a n transform
ari succesive asupra
elementelor matricii de adiacent a A; astfel: efectu
am n pasi, la ecare pas,
dac
a vrfurile i si j pot conectate prin adaugarea arcelor (i; k) si (k; j) la
drumurile deja socotite, elementul mij va deveni 1:

Pasul 1 (initializarea elementelor lui M )


Pentru i = 1; n execut a
Pentru j = 1; n execut a
m(i; j) := a(i; j)
sfrsit_pentru
sfrsit_pentru
Pasul 2
Pentru k = 1; n execut a
Pentru i = 1; n execut a
Pentru j = 1; n execut a
dac
a min(m(i; k); m(k; j)) = 1; atunci m(i; j) := 1
sfrsit_pentru
sfrsit_pentru
sfrsit_pentru
Pasul 3. Stop.

9
Exercitiu: Determinati matricea drumurilor pentru graful din Fig. 6: a)
direct; b) folosind algoritmul Roy-Warshall.
Pentru parcurgerea grafurilor, exist
a dou
a metode clasice: parcurgerea n
atime (Breadth First Search) si parcurgerea n adncime (Depth First
l
Search), pe care le prezentam pe scurt n cle ce urmeaz
a.

1) Parcurgerea n l atime (BFS): Pornim cu un vrf i, apoi vizit am toti


vecinii j1 ; j2 ; ::: ai acestuia, apoi vecinii nevizitati ai acestora (ncepnd cu vecinii
lui j1 ; apoi vecinii lui j2 ) etc.
Pentru marcarea nodurilor deja vizitate, vom folosi un vector vizitat; cu
elementele
1 daca v^ arf ul i a f ost vizitat
vizitat(i) =
0:::::^{n caz contrar:

Vrfurile ai c
aror vecini urmeaz
a a vizitati le vom retine ntr-o coad
a C:

n pseudocod, algoritmul BFS este urm atorul:


Pasul 1. (Initializam toate vrfurile ca nevizitate):
Pentru i = 1; n execut a vizitat(i) := 0:
Pasul 2. (Vizitam primul vrf i si l adaugam la C)
Adaug a i la C
examineaz ai
vizitat(i) := 1
Pasul 3.
Ct timp C este nevid a, execut
a
retine primul element i := C(1);
elimin a i din C;
pentru toti vecinii nevizitati j ai lui i; execut
a
adaug a j la C
examineaz aj
vizitat(j) := 1
sfrsit_pentru
sfrsit_ct timp.
Pasul 4. Stop.

Exemplu: Pentru graful

10
Fig. 7

pornind din vrful i = 1; algoritmul BFS d a urmatoarea ordine de parcurg-


ere:
1; 2; 3; 4; 5; 6; 7; 8; 9; 10:
1) Parcurgerea n adncime (DFS): Pornim cu un vrf i, apoi vizit am
primul vecin j al acestuia, apoi primul vecin nevizitat al lui j etc. Apoi proced
am
la fel cu vrful j; trecnd la primul vrf nevizitat al acestuia.
Pentru marcarea nodurilor deja vizitate, vom folosi un vector vizitat; cu
elementele
1 daca v^ arf ul i a f ost vizitat
vizitat(i) =
0:::::^{n caz contrar:

Vrfurile ai c
aror vecini urmeaz
a a vizitati le vom retine ntr-o stiv
a S: n
momentul cnd ultimul element din stiv a nu mai are succesori, el va eliminat
din S:

n pseudocod, algoritmul DFS este urm atorul:


Pasul 1. (Initializam toate vrfurile ca nevizitate):
Pentru i = 1; n execut a vizitat(i) := 0:
Pasul 2. (Vizitam primul vrf i si l adaugam la S)
Adaug a i la S
examineaz ai
vizitat(i) := 1
Pasul 3.
Ct timp S este nevid a, execut
a
retine ultimul element i din S;
dac a i are cel putin un vecin nevizitat j; atunci
adaug a j la S;
examineaz a j;
vizitat(j) := 1

11
altfel elimin
a i din S
sfrsit_ct timp.
Pasul 4. Stop.

Pentru graful din Fig. 7, parcurgerea DFS va da:

1; 2; 3; 6; 7; 10; 8; 4; 5; 9:

12

S-ar putea să vă placă și