Sunteți pe pagina 1din 148

SILVIU BẬRZĂ

LUCIANA MARIA MOROGAN

ALGORITMICA GRAFURILOR
© Editura FundaŃiei România de Mâine, 2008
Editură acreditată de Ministerul EducaŃiei şi Cercetării prin
Consiliul NaŃional al Cercetării ŞtiinŃifice din ÎnvăŃământul Superior.

Descrierea CIP a Bibliotecii NaŃionale a României


BẬRZĂ, SILVIU
Algoritmica grafurilor / Silviu Bârză, `Luciana
Maria Morogan – Bucureşti: Editura FundaŃiei
România de Mâine, 2008
148p.;23,5 cm
Bibliogr.
ISBN 978-973-163-147-9

I. Morogan, Luciana Maria

004.421.2.519.17(075.35)

Reproducerea integrală sau fragmentară, prin orice formă şi prin mijloace


tehnice, este strict interzisă şi se pedepseşte conform legii.

Răspunderea pentru conŃinutul şi originalitatea textului revine exclusiv


autorului/autorilor
UNIVERSITATEA SPIRU HARET
FACULTATEA DE MATEMATICĂ INFORMATICĂ

SILVIU BẬRZĂ
LUCIANA MARIA MOROGAN

ALGORITMICA GRAFURILOR

EDITURA FUNDAłIEI ROMÂNIA DE MÂINE


Bucureşti, 2008
-
CUPRINS

Introducere ……………………………………………………….. 7
Capitolul I. INTRODUCERE ÎN TEORIA GRAFURILOR ….. 9
1.1. Grafuri neorientate ………………….…………………………......... 9
1.2. Grafuri orientate ………………………. …………………………… 17
Capitolul II. TIPURI PARTICULARE DE GRAFURI ..……… 25
2.1. Grafuri conexe ………… …………………………………………… 27
2.2. Grafuri complementare şi izomorfe ………………………………… 34
2.3. Grafuri ciclice ……………………………… ……………………… 37
Capitolul III. REPREZENTAREA GRAFURILOR …………… 46
3.1. Reprezentare grafuri neorientate ……………………………………. 46
3.2. Matrici asociate grafurilor orientate ……………………………….... 54
Capitolul IV. ARBORI ..…………………………………………. 62
4.1. Definire şi proprietăŃi ………………………………………….......... 62
4.2. Arbori parŃiali …………………………………………….................. 66
4.3. Algoritmul lui Kruskal ………………………………………............ 71
4.4. ArborescenŃe ………………………………………………............... 74
Capitolul V. GRAFURI HAMILTONIENE ŞI EULERIENE … 81
5.1. Grafuri Hamiltoniene ……………………………………………….. 81
5.2. Grafuri Euleriene ……………………………………………………. 83
Capitolul VI. ALGORITMI PENTRU DRUMURI ÎN
GRAFURI ORIENTATE ………………………… 88
6.1. Algoritmi de calcul direct …………………………………………... 88
6.2. Algoritmul Wharshal pentru drumuri minime în grafuri orientate …. 94
6.3. Algoritmul lui Dantzig pentru drumuri minime de extremitate
iniŃială dată …………………………………………………………. 98
6.4. Algoritmul Bellman-Kalaba pentru drumuri minime de extremitate
finală dată ………………………………………............................... 100
6.5. Algoritmii lui Ford şi Dijkstra pentru drumuri minime de extremităŃi
date ………………………………………….................................... 105
Capitolul VII. ALGORITMI PENTRU GRAFURI
HAMILTONIENE ŞI EULERIENE …………...... 112
7.1. Algoritmul lui Foulkes pentru drumuri hamiltoniene ………............ 112
7.2. Teorema lui Chen …………………………………………………… 115
7.3. Algoritmul înmulŃirii latine …………………………………............. 119
7.4. Algoritmul lui Fleury pentru drumuri euleriene ……………………. 121
7.5. Algoritmul lui Hierholzer pentru drumuri euleriene ………………... 124
5
Capitolul VIII. FLUX MAXIM ÎN REłELE DE TRANSPORT 126
8.1. ConsideraŃii generale ……………………………………………….. 126
8.2. Algoritmul Ford-Fulkerson …………………………………............ 129
8.3. Exemple …………………………………………………………….. 130
Capitolul IX. REłELE DE PROGRAMARE A
ACTIVITĂłILOR ………………………………... 136
9.1. Graful arc/activitate, metoda drumului critic ………………………. 137
9.2. Graful vârf/activitate, metoda potenŃialului ………………………… 144
Bibliografie………………………………………………………………. 148

6
INTRODUCERE

Prezentul material acoperă programa cursului de Algoritmica


grafurilor şi a fost redactată pornind de la dorinŃele autorilor de a prezenta
şi a exemplifica cât mai multe elemente ce Ńin de algoritmi de determinare
pornind de la teoria grafurîlor.

Sunt prezentate rezultate de bază din teoria grafurilor, atât în


domeniul orientat cât şi neorientat şi cei mai importanŃi algoritmi pentru
rezolvarea problemelor de grafuri. Gruparea materialelor s-a realizat pe
baza noŃiunilor manipulate.

Cartea cuprinde o largă exemplificare a noŃiunilor prezentate din


punct de vedere teoretic şi asupra modului de aplicare a algoritmilor
descrişi.

Autorii

7
8
I. INTRODUCERE ÎN TEORIA GRAFURILOR
1.1. Grafuri neorientate

DefiniŃie. Fie X o mulŃime finită şi nevidă şi U ⊂ {{x, y} x, y ∈ X } .


Numim graf (sau graf neorientat) perechea G = ( X , U ) . Elemente din mulŃimea
X se numesc noduri sau vârfuri, iar elementele din mulŃimea U poartă numele
de muchii ale grafului.

Un graf se reprezintă grafic printr-o mulŃime de puncte corespunzătoare
vârfurilor grafului şi o mulŃime de segmente corespunzătoare muchiilor. Dacă
pentru un graf există o reprezentare în care să nu existe două segmente care să se
intersecteze, atunci spunem că graful reprezentat este un graf planar.
Exemplul 1. Fie G = ( X , U ) , unde X = {1, 2,3, 4,5, 6,7} şi
U = {{1, 2} , {1,3} , {2, 4} , {2,5} , {3, 4} , {4,5} , {4, 6} , {5, 6} , {6,7}}
Am definit un graf neorientat. Acest graf poate avea reprezentarea grafică:
1 2

3
5
4

7 6

şi cum în această reprezentare nu există muchii care să se intersecteze, rezultă că


avem un graf planar.

Pornind de la definiŃie observăm că dacă X are n elemente, atunci U are
cel mult Cn2 elemente.
Dacă A este o mulŃime, vom nota prin A numărul de elemente ale
mulŃimii.

9
DefiniŃie. Fie G = ( X , U ) un graf şi x ∈ X un nod fixat. Prin gradul
nodului x înŃelegem numărul muchiilor incidente lui x şi notăm acest număr cu
d ( x ) . Dacă d ( x ) = 1 spunem că x este nod terminal. Dacă d ( x ) = 0 spunem
că x este nod izolat.

Exemplul 2. Pentru graful specificat în exemplul 1 gradele vârfurilor sunt
cele indicate în următorul tabel.
x 1 2 3 4 5 6 7
d ( x) 2 3 2 4 3 3 1
După cum se poate vedea în acest tabel, graful nu are vârfuri izolate şi
nodul 7 este nod terminal

PropoziŃia 1. Fie G = ( X , U ) un graf în care U = m . Atunci

∑ d ( x ) = 2m .
x∈ X

DemonstraŃie. Dacă { x, y} ∈ U , atunci intervine o contribuŃie unitară atât


în d ( x ) , cât şi în d ( y ) . Astfel, dacă se elimină muchia, obŃinând graful

(
G ′ = X , U \ {{ x, y}} , ) atunci în G′ vom avea d ′( x) = d ( x) −1 ,
d ′ ( y ) = d ( y ) − 1 şi pentru orice z ∈ X \ { x, y} , d ′ ( z ) = d ( z ) .
Pentru graful G ′ vom avea
∑ d ′( z ) = d′( x) + d ′( y ) + ∑ d ′( z ) =
z∈ X z∈ X \{x , y}

= d ( x) −1 + d ( y ) −1 + ∑
z∈ X \{ x , y}
d (z) = ∑ d ( z) − 2 = .
z∈ X

= 2m − 2 = 2 ( m − 1) = 2 U \ {{ x, y}}
Deoarece într-un graf G 0 = ( X , ∅ ) , în care toate vârfurile sunt izolate
avem d ( z ) = 0 pentru orice z ∈ X , putem scrie 0 = ∑ d (z) = 2⋅0 = 2 ∅ ,
z∈ X
iterând relaŃia de mai sus, demonstrăm egalitatea dată în anunŃ.

Exemplul 3. Pentru graful dat în exemplul 1, folosind gradele vârfurilor
date în tabelul din exemplul 2 avem
7

∑ d ( x ) = ∑ d ( x ) = 2 + 3 + 2 + 4 + 3 + 3 + 1 = 18 .
x∈ X x =1

Pe de altă parte U = 9 şi astfel se verifică relaŃia din propoziŃia 1.



10
PropoziŃia 2. Pentru orice graf G = ( X , U ) , numărul vârfurilor de grad
impar este par.
DemonstraŃie. Prin absurd considerăm că numărul de vârfuri cu grad
impar este impar. Fie {
X = X 1 ∪ X 2 , unde X 1 = x ∈ X d ( x ) impar } şi

{ }
X 2 = x ∈ X d ( x ) par . În mod evident X 1 ∩ X 2 = ∅
d1 = ∑ d ( x)
x∈ X1
este număr impar ca sumă impară de numere impare.

d2 = ∑ d ( x ) este număr par ca sumă de numere pare.


x∈ X 2

Deoarece X 1 ∩ X 2 = ∅ , rezultă că ∑ d ( x) = d
x∈ X
1 + d 2 şi astfel ∑ d ( x)
x∈ X
este număr impar ca sumă între un număr par şi unul impar. Dar din propoziŃia 1
avem ∑d ( x ) = 2 U , deci este număr par. ContradicŃie.
x∈ X

Exemplul 4. Pentru graful neorientat din exemplul 1, nodurile cu gradul
impar sunt 2, 5, 6 şi 7 şi astfel numărul lor este 4, deci număr par. Astfel se verifică
practic afirmaŃia făcută în propoziŃia 2.

DefiniŃie. Fie G = ( X , U ) un graf. Numim graf parŃial al lui G, graful
G′ = ( X , V ) , unde V ⊂ U .

Exemplul 5. Fie graful G = ( X , U ) , unde X = {1, 2, 3, 4,5, 6, 7} este
mulŃimea de vârfuri, iar mulŃimea muchiilor este
U = {{1, 2} , {1,3} , {2,3} , {2, 4} , {3, 6} , {3, 7} , {4, 5} , {5, 6} , {5, 7}} .
Considerăm graful G ′ = ( X , V ) , unde
U = {{1, 2} , {1, 3} , {2, 4} , {3, 7} , {4, 5} , {5, 6} , {5, 7}}
Astfel, G ′ = ( X , V ) este graf parŃial pentru graful G = ( X , U ) . Din punct
de vedere al reprezentării, graful G = ( X , U ) şi graful parŃial G ′ = ( X , V ) au
următoarele imagini:

11
1 7 1 7

2 2
3 3

4 5 4 5

6 6

graful G = ( X , U ) graful parŃial G ′ = ( X , V )



DefiniŃie. Fie G = ( X , U ) un graf. Numim subgraf în G, graful
G′′ = (Y , V ) , în care Y ⊂ X , iar V = {{x, y} ∈U x, y ∈ Y } .

Exemplul 6. Fie graful G = ( X , U ) dat în exemplul 5. Considerăm
mulŃimea Y = {2,3, 4, 5, 7} ⊂ X , care se obŃine din X prin eliminarea vârfurilor
1 şi 6. Eliminând din U toate muchiile care au una din extremităŃi vârfurile
{ }
eliminate obŃinem V = {2, 3} , {2, 4} , {3, 7} , {4, 5} , {5, 7} . ObŃinem astfel graful
G′′ = (Y , V ) care este subgraf pentru graful G = ( X , U ) .
Din punct de vedere al reprezentării avem următoarea pereche de imagini:

1 7 7

2 2
3 3

4 5 4 5

graful G = ( X , U ) subgraful G ′′ = (Y , V )

DefiniŃie. Fie G = ( X , U ) un graf cu n vârfuri ( X = n ). Spunem că G
este un graf complet , dacă oricare ar fi x, y ∈ X , avem { x, y} ∈ U (orice două
vârfuri din G sunt conectate sau adiacente).

12
Exemplul 7. Pentru graful G = ( X , U ) din exemplul 5 nu este complet
deoarece, de exemplu, {1, 7} ∉ U şi {4, 6} ∉ U .

Graful complet cu n vârfuri se notează prin K n
PropoziŃia 3. Numărul muchiilor lui K n este Cn2 .
DemonstraŃie. Deoarece K n este un graf complet şi astfel oricare ar fi
x, y ∈ X , avem { x, y} ∈U , rezultă că U conŃine toate submulŃimile cu două
elemente care se pot forma cu elemente în mulŃimea X .
Folosind noŃiuni de combinatorică, avem astfel că dintr-o mulŃime cu n
elemente se pot forma Cn2 submulŃimi cu două elemente. Astfel, dacă
K n = ( X , U ) , cu n = X , atunci U = Cn2 .

Exemplul 8. Să construim K 5 , deci graful K 5 = ( X , U ) , unde
5i4
X = {1, 2, 3, 4,5} . Numărul de muchii este, conform propoziŃiei 3, C52 = = 10 .
1i2
MulŃimea de muchii este astfel:
U = {{1, 2} , {1,3} , {1, 4} , {1,5} , {2,3} , {2, 4} , {2, 5} , {3, 4} , {3, 5} , {4, 6}}
Graful K 5 astfel definit are reprezentarea:

1
4
3

5

DefiniŃie. Fie G = ( X , U ) un graf. Dacă există X 1 şi X 2 astfel încât
X 1 ∩ X 2 = ∅ şi X = X 1 ∪ X 2 ( X admite o partiŃie din două blocuri X 1 şi X 2 )
şi orice muchie din G uneşte un nod din X 1 cu unul din X 2 (oricare ar fi
e = { x, y} ∈ U , dacă x ∈ X 1 , atunci y ∈ X 2 ) spunem că G este graf bipartit.

13
Exemplul 9. Considerăm graful neorientat G = ( X , U ) , în care mulŃimea
de vârfuri este X = {1, 2, 3, 4,5, 6, 7} şi mulŃimea de muchii este
U = {{1, 2} , {1, 6} , {2, 3} , {2, 7} , {4, 5} , {4, 6} , {5, 7}} .
Se observă că putem realiza partiŃia X = X 1 ∪ X 2 , X 1 ∩ X 2 = ∅ , cu
X 1 = {1,3, 4, 7} şi X 2 = {2, 5, 6} , deoarece pentru orice muchie { x, y} ∈ U avem
x ∈ X 1 şi y ∈ X 2 .
Graful considerat are următoarea reprezentare:

1
2

5
4

6
7


DefiniŃie. Fie G = ( X , U ) un graf bipartit cu partiŃiile X 1 şi X 2 . Dacă
X 1 = p şi X 2 = q şi dacă fiecare vârf din X 1 este adiacent cu toate vârfurile
din X 2 (pentru orice x ∈ X 1 şi orice y ∈ X 2 avem { x, y} ∈U ) spunem că G
este un graf bipartit complet, notat K p ,q .

Exemplul 10. Pentru graful bipartit din exemplul 9 se observă că el nu este
un graf bipartit complet, deoarece, de exemplu, nu conŃine muchia {3,5} şi nici
muchia {2, 4}

PropoziŃia 4. Graful bipartit complet K p ,q are pq muchii.
DemonstraŃie. Considerăm K p ,q = ( X ,U ) , X = X1 ∪ X 2 ,
X 1 ∩ X 2 = ∅ , X 1 = p şi X 2 = q .

14
Conform definiŃiei pentru orice x ∈ X 1 şi orice y ∈ X 2 avem
{ x, y} ∈U . Dacă fixăm x ∈ X 1 , atunci pentru fiecare y ∈ X 2 avem { x, y} ∈ U ,
deci numărul de muchii pentru x ∈ X 1 fixat este egal cu X 2 = q .
Fiecare vârf x ∈ X 1 poate fi ales, fixat în X 1 = p . Astfel, numărul
total de muchii este pq .

Exemplul 11. Considerăm că mulŃimea de vârfuri X = {1, 2, 3, 4,5, 6, 7}
este partiŃionată prin mulŃimile X 1 = {1,3, 4, 7} şi X 2 = {2, 5, 6} (are loc
X = X 1 ∪ X 2 şi X 1 ∩ X 2 = ∅ ). Având p = X 1 = 4 şi q = X 2 = 3 , putem
construi un graf bipartit K 4,3 = ( X , U ) , unde mulŃimea de muchii este:
U = {{1, 2} , {1, 5} , {1, 6} , {2, 3} , {2, 4} , {2, 7} ,
{3,5} , {3, 6} , {4, 5} , {4, 6} , {5, 7} , {6, 7}}
şi avem U = 12 ceea ce corespunde enunŃului propoziŃiei 4.
Acest graf are următoarea reprezentare

1
2

5
4

6
7


DefiniŃie. Fie G = ( X , U ) un graf. Numim lanŃ în G o succesiune de
vârfuri L = ( x0 , x1 ,..., xr ) = x0 x1...xr , astfel încât pentru orice i = 0,1,..., r − 1 ,
xi xi +1 ∈ U (adică o succesiune în care oricare două vârfuri vecine din lanŃ sunt
adiacente).

15
Fie G = ( X , U ) este un graf şi L = x0 x1...xr un lanŃ în G . Vârfurile x0 şi
xr se numesc extremităŃile lanŃului L , iar r se numeşte lungimea lanŃului L ,
notată l ( L ) = r (lungimea unui lanŃ este dată de numărul muchiilor sale sau de
numărul vârfurilor mai puŃin unul).
Exemplul 12. Considerăm graful G = ( X , U ) care corespunde următoarei
reprezentări:

1 6

2 3

5
4

Fie succesiunea de vârfuri L1 = [1, 2, 4,1,3, 6] . Se formează un lanŃ în G


deoarece perechile {1, 2} , {2, 4} , {4,1} , {1,3} , {3, 6} sunt muchii în U . Acest
lanŃ este de extremităŃi 1 şi 6 iar deoarece numărul vârfurilor din lanŃ este egal cu 6
avem l ( L ) = 5 . Acest lanŃ poate fi dat şi prin muchiile sale sub forma
L1 = {1, 2} , {2, 4} , {1, 4} , {1,3} , {3, 6}
Fie succesiunea de vârfuri L2 = [1, 2, 4,3, 5] . Această succesiune nu
descrie un lanŃ deoarece graful considerat nu conŃine nicio muchie între vârfurile 3
şi 5.

DefiniŃie. Fie G = ( X , U ) un graf. LanŃul L din G se numeşte lanŃ
elementar dacă pentru orice 0 ≤ i, j ≤ r , i ≠ j , avem xi ≠ x j (lanŃul trece prin
noduri distincte).

Exemplul 13. LanŃul L1 = [1, 2, 4,1,3, 6] din exemplul 12 are în poziŃiile 1
şi 4 vârful 1 şi astfel nu este un lanŃ elementar (trece de două ori prin vârful 1)
În graful din exemplul 12, un lanŃ elementar este L3 = [1, 2, 4,3, 6 ]

16
DefiniŃie. Fie G = ( X , U ) un graf. LanŃul L din G se numeşte lanŃ
simplu dacă pentru orice 0 ≤ i, j ≤ r − 1 , i ≠ j , avem { xi , xi +1} ≠ x j , x j +1 (toate{ }
muchiile sale sunt distincte).

Exemplul 14. LanŃurile L1 = [1, 2, 4,1,3, 6] şi L2 = [1, 2, 4,3, 5] din
exemplul 12 şi L3 = [1, 2, 4,3, 6 ] din exemplul 13 sunt toate lanŃuri simple. Cel mai
bine se observă acest lucru la exprimarea lanŃurilor prin muchiile lor, aşa cum este
cazul pentru lanŃul L1 = [1, 2, 4,1,3, 6] , care în exemplul 12 este exprimat şi prin
muchii prin L1 = {1, 2} , {2, 4} , {1, 4} , {1,3} , {3, 6} .
În graful din exemplul 12 putem considera şi lanŃul
L4 = {2,1, 4, 3,1, 4, 5}
care nu este un lanŃ simplu deoarece conŃine de două ori muchia {1, 4} .

PropoziŃia 5. Fie G = ( X , U ) un graf şi L un lanŃ în G . Dacă L este
lanŃ elementar, atunci L este lanŃ simplu.
DemonstraŃie. Prin absurd, L nu este lanŃ simplu. Atunci există
0 ≤ i, j ≤ r − 1 , i ≠ j astfel încât { xi , xi +1} = { x j , x j +1} . Astfel avem fie xi = x j ,
fie xi = x j +1 , de unde rezultă că L nu este lanŃ elementar. ContradicŃie.

1.2. Grafuri orientate

DefiniŃie. Fie X o mulŃime finită şi nevidă. Numim graf orientat (digraf)


orice pereche G = ( X , U ) în care U ⊂ X × X este o mulŃime finită de perechi
ordonate cu componente din X ( U este o relaŃie binară pe X ).

Elementele mulŃimii X vor fi numite vârfuri sau noduri. Elementele
mulŃimii U se numesc arce.
Orice arc are forma ( a, b ) , în care a se numeşte extremitate iniŃială, iar
b se numeşte extremitate finală a arcului ( a, b ) .
Exemplul 15. Considerăm mulŃimea X = {1, 2,3, 4, 5, 6, 7,8,9} şi
mulŃimea U ⊂ X × X ,
U = {(1, 2 ) , (1,3) , (1, 6 ) , ( 2,3 ) , ( 2, 9 ) , ( 3, 4 ) ,
( 4,5 ) , ( 4,9 ) , ( 5, 6 ) , ( 6,8 ) , ( 7, 6 ) , ( 8, 7 ) , ( 9,8 )}
17
Dacă luăm arcul ( 4,9 ) , spunem că 4 este extremitatea iniŃială a arcului, iar
9 este extremitatea finală a arcului.
Graful descris are următoarea reprezentare

1
6

2 3
7
5
4

8
9

Un graf orientat se reprezintă grafic printr-o mulŃime de puncte
corespunzătoare vârfurilor şi printr-o mulŃime de segmente orientate (săgeŃi)
corespunzătoare arcelor. O săgeată este orientată de la extremitatea iniŃială spre
extremitatea finală a arcului pe care îl reprezintă.
Dacă u = ( x, y ) ∈ U spunem că x şi y sunt adiacente în G şi că
nodurile x şi y sunt incidente arcului u sau că arcul u este incident nodurilor x
şi y . Mai exact, spunem că u este incident exterior nodului x ( u pleacă sau iese
din x ) şi că u este incident interior nodului y ( u ajunge sau intră în y ). Arcul
( x, y ) ∈ U se mai notează şi prin xy .
DefiniŃie. Fie G = ( X , U ) un graf orientat şi x ∈ X un nod fixat.
a) Numim grad interior al lui x , numărul arcelor incidente interior lui x ,
adică mărimea d − ( x ) = {( y, x ) ∈U y∈ X . }
b) Numim grad exterior al lui x , numărul arcelor incidente exterior lui x ,
adică mărimea d + ( x ) = {( x, y ) ∈U y∈ X . }
c) Prin gradul nodului x înŃelegem numărul total al arcelor incidente lui x ,
adică mărimea d ( x ) = d − ( x ) + d + ( x ) .
d) Dacă d ( x ) = 0 spunem că x ∈ X este vârf izolat.
e) Dacă d − ( x ) = 1 şi d + ( x ) = 0 spunem că x ∈ X este vârf terminal; dacă
d − ( x ) = 0 şi d + ( x ) = 1 spunem că x ∈ X este vârf iniŃial.

18
Exemplul 16. Pentru graful din exemplul 15 putem rezuma valorile pentru
gradul interior, gradul exterior şi gradul fiecărui vârf în următorul tabel:
x 1 2 3 4 5 6 7 8 9
d− ( x ) 0 1 2 1 1 3 1 2 2
d+ ( x ) 3 2 1 2 1 1 1 1 1
d ( x) 3 3 3 3 2 4 2 3 3

DefiniŃie. Fie G = ( X , U ) un graf orientat şi A ⊂ X o mulŃime de
vârfuri.
a) Gradul interior lui A este numărul arcelor ce intră în A şi care au nodul
iniŃial în afara lui A, adică mărimea
d − ( A) = {( y, x ) ∈U y ∉ A, x ∈ A .}
b) Gradul exterior lui A este numărul arcelor ce ies din A şi au nodul
terminal în afara lui A, adică mărimea
d + ( A) = {( x, y ) ∈U x ∈ A, y ∉ A} .
c) Gradul total al lui A este d ( A ) = d − ( A ) + d + ( A ) .

Exemplu 17. Considerăm graful din exemplul 15 şi mulŃimea
A = {3, 4, 6, 7} . Avem d − ( A) = 5 , d + ( A) = 3 . Astfel d ( A ) = 8 .

ObservaŃii
1) Evident, pentru orive A ⊂ X avem d − ( A ) ≤ ∑ d ( x) ,
x∈ A
− deoarece s-ar

putea ca anumite arce care ies din A să aibă extremitatea finală tot în A ,
arce care nu se numără la determinarea valorii d + ( A ) .
2) Evident, pentru orice A ⊂ X avem d + ( A ) ≤ ∑ d ( x) ,
x∈ A
+ deoarece s-ar

putea ca anumite arce care intră în A să aibă extremitatea iniŃială tot în A ,


arce care nu se numără la determinarea valorii d − ( A ) .
Din 1) şi 2) rezultă că d ( A ) ≤ ∑ d ( x) .
x∈ A

DefiniŃie. Fie G = ( X , U ) un graf orientat. Numim graf orientat parŃial


al lui G graful orientat G = ( X , V ) în care V ⊂ U .

19
Exemplul 18. Fie graful orientat G = ( X , U ) , unde mulŃimea de vârfuri
este X = {1, 2,3, 4,5, 6} şi mulŃimea de arce este
U = {(1, 2 ) , (1,5 ) , (1, 6 ) , ( 2,3) , ( 2, 4 ) , ( 4,3) , ( 6, 4 ) , ( 6,5 )}
{ }
Dacă G ′ = ( X , V ) , unde V = (1, 2 ) , (1,5 ) , ( 2, 4 ) , ( 6, 4 ) , ( 6,5 ) , este un
graf orientat parŃial al grafului G .
Grafurile G şi G ′ au reprezentarea următoare:

1 1

6 6
2 2
5 5

3 3

4 4

Graful orientat G = ( X , U ) Graful orientat parŃial G ′ = ( X , V )


Facem observaŃia că în graful G ′ s-a obŃinut un vârf izolat, vârful 3 (nu
există niciun arc care să-l aibă ca extremitate).

Un graf orientat parŃial al lui G se obŃine prin suprimarea anumitor arce
ale lui G .
DefiniŃie. Fie G = ( X , U ) un graf orientat. Numim subgraf orientat al
lui G , graful orientat H = (Y , V ) în care Y ⊂ X , iar V = {( x, y ) ∈U x, y ∈ Y }
(mulŃimea tuturor arcelor lui G cu ambele extremităŃi în Y ).

Exemplul 19. Considerăm graful G = ( X , U ) din exemplul 18. Fie
Y = {2,3, 4,6} ⊂ X , care se obŃine prin eliminarea vârfurilor 1 şi 5 din X .
Eliminăm din U toate arcele care au ca extremitate pe 1 sau pe 5 şi obŃinem
U = {( 2,3 ) , ( 2, 4 ) , ( 4,3) , ( 6, 4 )} . Graful G′′ = (Y , V ) astfel obŃinut este subgraf
al lui G .
Grafurile G şi G ′′ au următoarea reprezentare:

20
1

6 6
2 2
5

3 3

4 4

Graful orientat G = ( X , U ) Graful orientat parŃial G ′′ = (Y , V )



Un subgraf orientat se obŃine suprimând anumite vârfuri din G şi
eliminând toate arcele incidente vârfurilor suprimate.
DefiniŃie. Fie G = ( X , U ) un graf orientat. Dacă pentru orice x, y ∈ X
avem ( x, y ) ∈ U sau ( y, x ) ∈ U spunem că G este graf orientat complet.

Un graf orientat complet cu n vârfuri se notează cu K n .
Exemplul 20. Să considerăm X = {1, 2,3, 4,5} şi să construim
K 5 = ( X ,U ) , un graf orientat complet cu 5 vârfuri. Să considerăm mulŃimea de
arce
U = {(1, 2 ) , (1, 4 ) , (1,5 ) , ( 2, 4 ) , ( 3,1) , ( 3, 2 ) , ( 4,3) , ( 4,5 ) , ( 5, 2 ) , ( 5,3)}
Graful obŃinut are reprezentarea

2 4

3 5
Fie mulŃimea
V = {(1, 2 ) , (1,5 ) , ( 2,3 ) , ( 2, 4 ) , ( 3,1) , ( 3, 4 ) , ( 4,1) , ( 4,5 ) , ( 5, 2 ) , ( 5,3)}
Se formează astfel K 5′ = ( X , V ) care este tot un graf orientat complet. El diferă de
K 5 descris mai sus prin orientarea arcelor şi are reprezentarea
21
1

2 4

3 5
De asemenea, putem considera drept mulŃime de arce, mulŃimea
W = {(1, 2 ) , (1, 4 ) , (1,5 ) , ( 2,1) , ( 2, 4 ) , ( 3,1) ,
( 3, 2 ) , ( 4, 2 ) , ( 4, 3) , ( 4, 5) , ( 5, 2 ) , ( 5, 3)}
şi se formează acum un graf K 5′′ = ( X , W ) care este graf orientat complet. Acesta
diferă de K 5 prin faptul că unele vârfuri sunt unite de perechi de arce în ambele
sensuri. Graful K 5′′ are ca reprezentare imaginea:

2 4

3 5

ObservaŃie. În cazul grafurilor neorientate, pentru un n ∈ ℕ , n ≥ 2 ,
există un singur graf complet cu n vârfuri, notat K n . În cazul grafurilor orientate
pentru un n ∈ ℕ , n ≥ 2 dat, există mai multe grafuri orientate complete cu n
vârfuri, ele diferind fie prin orientarea arcelor, fie prin numărul de arce ce unesc
două vârfuri, număr ce poate fi 1 sau 2.

22
DefiniŃie. Fie G = ( X , U ) un graf orientat. Numim drum în G o
succesiune de vârfuri d = ( x0 , x1 ,..., xr ) astfel încât pentru orice i = 0,1,..., r − 1 ,
xi xi +1 ∈ U (sau o succesiune de arce care au acelaşi sens, d = ( u1 , u1 ,..., u p ) , cu
proprietatea că pentru orice i = 1, 2,..., p − 1 , ui şi ui +1 au o extremitate comună,
mai exact extremitatea finală a lui ui coincide cu extremitatea iniŃială a lui ui +1 .

Fie d = ( x0 , x1 ,..., xr ) un drum în graful G = ( X , U ) . x0 se numeşte
extremitatea iniŃială, iar xr extremitatea finală a drumului d .
Exemplul 21. Fie X = {1, 2,3, 4,5, 6} şi graful G = ( X , U ) , unde
U = {(1, 2 ) , (1,5 ) , (1, 6 ) , ( 2,3) , ( 2, 4 ) , ( 3, 6 ) , ( 4,3) , ( 5,3) , ( 6, 4 ) , ( 6,5 )}
care are reprezentarea

6
2
5

Succesiunea de vârfuri d = (1, 2,3, 6,5 ) este un drum deoarece există


succesiunea de arce (1, 2 ) , ( 2,3) , ( 3, 6 ) şi ( 6,5 ) .
Extremitatea iniŃială a drumului este 1, extremitatea sa finală este 5

DefiniŃie. Drumul d = ( x0 , x1 ,..., xr ) din graful G = ( X , U ) se numeşte
elementar dacă pentru orice i, j = 0,1,..., r , i ≠ j , avem xi ≠ x j (drumul trece
prin noduri distincte).

Exemplul 22. Drumul d = (1, 2,3, 6,5 ) dat în exemplul 21 este un drum
elementar pentru că trece o singură dată prin fiecare din vârfurile 1, 2, 3, 5 şi 6.

23
DefiniŃie. Fie G = ( X , U ) un graf orientat. Numim lanŃ în G , o secvenŃă
de noduri L = [ x0 , x1 ,..., xr ] cu proprietatea că pentru orice i = 0,1,..., r − 1 avem
( xi , xi +1 ) ∈U sau ( xi +1 , xi ) ∈U (sau o succesiune de arce
L = u1 , u2 ,..., u p  astfel încât pentru orice i = 1, 2,..., p − 1 , arcele ui şi ui +1 au
o extremitate comună – nu se mai pune condiŃia ca arcele să aibă acelaşi sens, ca
la drumuri).

ObservaŃie. Din definiŃie rezultă imediat că orice drum care este într-un
graf orientat este, în acelaşi timp, şi lanŃ în graful orientat respectiv.
Exemplul 23. Conform observaŃiei de mai sus, cum d = (1, 2,3, 6,5 ) din
exemplul 21 este un drum, l = [1, 2,3, 6,5] este şi lanŃ.
Tot în graful din exemplul 21 avem drept lanŃ succesiunea de vârfuri
l ′ = [3, 6,1, 2, 4] deoarece în U avem arcele ( 3, 6 ) , (1, 6 ) , (1, 2 ) şi ( 2, 4 ) .

DefiniŃie. Fie G = ( X , U ) un graf orientat. Pentru orice x, y ∈ X
spunem că y este accesibil din x sau y este atins din x dacă şi numai dacă
există d = ( x0 , x1 ,..., xr ) un drum de capete x şi y .

Exemplul 24. Drumul d = (1, 2,3, 6,5 ) dat în exemplul 21 este un drum
care are extremitatea iniŃială 1 şi cea finală 5. Astfel vârful 5 este accesibil din
vârful 1.
Tot în graful din exemplul 21 avem că vârful 1 nu este accesibil din niciun
alt vârf deoarece nu poate exista niciun drum cu extremitatea finală 1. Acest lucru
este adevărat deoarece d − (1) = 0 (în 1 nu intra niciun arc).

24
II. TIPURI PARTICULARE DE GRAFURI

DefiniŃie. Se numeşte multigraf un graf neorientat în care cel puŃin două


vârfuri sunt unite prin muchii multiple.

Exemplul 1. Graful din imaginea de mai jos este un multigraf.

1 5
3

4
2
O problemă pentru multigrafuri este de specificare a muchiilor care, aşa
cum s-a văzut până acum, sunt mulŃimi de două elemente. Dacă va fi cazul, pentru
muchiile multiple din multigrafuri vom folosi o indiciere în exteriorul mulŃimii
care specifică muchia. Astfel, pentru multigraful de mai sus avem G = ( X , U ) ,
unde X = {1, 2,3, 4,5} şi
U = {{1, 2} , {2, 3}1 , {2, 3}2 , {3, 4}1 , {3, 4}2 , {3, 5}}

DefiniŃie. Graful orientat G = ( X , U ) se numeşte reflexiv (nereflexiv,
simetric, antisimetric, total, tranzitiv) dacă şi numai dacă relaŃia binară U este
relaŃie binară reflexivă (nereflexivă, simetrică, antisimetrică, totală, tranzitivă).

Exemplul 2. Să considerăm o mulŃime de 5 elemente X = {1, 2,3, 4,5} şi
cazul unei relaŃii simetrice definite pe X , şi anume următoarea submulŃime a
produsului cartezian X × X :
U = {(1, 2 ) , (1, 4 ) , ( 2,1) , ( 2,3) , ( 3, 2 ) , ( 4,1) , ( 4,5 ) , ( 5, 4 )}
Se poate observa că pentru orice x, y ∈ X avem că ( x, y ) ∈ U dacă şi
numai dacă ( y, x ) ∈ U de unde rezultă că U defineşte o relaŃie simetrică.

25
Pe de altă parte dacă considerăm graful G = ( X , U ) , cu X şi U definite
ca mai sus, atunci spunem că graful G este simetric. Graful are imaginea:

2
5

3
4

DefiniŃie. Fie G = ( X , U ) un graf orientat. Dacă pentru fiecare x ∈ X
se asociază o etichetă pentru identificare spunem că G este un graf orientat
etichetat.

Observăc că la toate grafurile de mai sus am folosit o numerotare a
vârfurilor. Numerele folosite pot fi considerate etichete pentru vârfuri şi astfel
grafurile pot fi considerate drept grafuri etichetate.
DefiniŃie. Fie G = ( X , U ) un graf orientat. G se numeşte graf orientat
marcat sau reŃea dacă fiecărui u ∈ U i se asociază o marcă mu . În acest caz,
U ⊂ X × M × X , M fiind mulŃimea mărcilor asociate arcelor. Dacă
( x, m, y ) ∈ X × M × X , atunci arcul x → y se marchează cu m şi se reprezintă
prin x 
m
→y.

Exemplul 3. Considerăm dată mulŃimea X = {1, 2,3, 4,5, 6} şi mulŃimea
U = {(1,3) , (1, 6 ) , ( 2, 4 ) , ( 2,5 ) , ( 3, 2 ) , ( 3, 6 ) , ( 4,1) , ( 4,5 ) , ( 5, 6 ) , ( 6, 2 )}
Am definit astfel graful orientat G = ( X , U ) a cărui imagine este

1 4

2 5

3 6

26
Considerăm acum că fiecărei muchii îi asociem o literă. Putem considera
că M = {a, b, c, d , e, f , g , h, i, j} şi că U ⊂ X × M × X este mulŃimea
U = {(1, a, 3) , (1, j , 6 ) , ( 2, b, 4 ) , ( 2, i,5 ) , ( 3, c, 2 ) , ( 3, h, 6 ) , ( 4, d ,1) ,
( 4, g , 5) , ( 5, e, 6 ) , ( 6, f , 2 )}
şi astfel se obŃine un graf orientat marcat pentru care avem reprezentarea

d
1 4
b g
e
i
2 5
a
j f
c h
3 6

DefiniŃie. Numim reŃea etichetată un graf orientat marcat şi etichetat.

De fapt, graful din exemplul anterior, având vârfurile numerotate şi
muchiile marcate, poate fi considerat şi un exemplu de reŃea etichetată.
2.1. Grafuri conexe

DefiniŃie. Graful neorientat G = ( X , U ) se numeşte conex dacă şi numai


dacă oricare ar fi două noduri x, y ∈ X , x ≠ y , există cel puŃin un lanŃ în G ,
L = ( x0 , x1 ,..., xr ) de extremităŃi x şi y .

DefiniŃie. Fie G = ( X , U ) un graf neorientat. Numim componenta
conexă a lui G , un subgraf conex C = ( Y , V ) al său, şi pentru orice x ∈ Y ,
subgraful obŃinut, luând mulŃimea de vârfuri Y \ { x} , nu este conex (subgraful C
este maximal în raport cu proprietatea de conexitate).

Exemplul 4. Considerăm graful neorientat G = ( X ,U ) , unde
X = {1, 2,3, 4,5, 6,7} şi
U = {{1, 2} .{1,3} , {2,3} , {4,5} , {5,1} , {6,7}}
Se poate observa că mulŃimea de vârfuri se poate partaja în două
submulŃimi între care nu există nicio muchie şi anume X 1 = {1, 2,3, 4,5} şi

27
X 2 = {6, 7} . În urma acestei partiŃii se produce şi o partiŃie a mulŃimii de muchii
în
U1 = {{1, 2} .{1,3} , {2,3} , {4,5} , {5,1}}
şi U 2 = {{6, 7}} .
Deoarece nu există muchii între elementele lui X 1 şi X 2 , înseamnă că nu
pot exista lanŃuri între x ∈ X 1 şi y ∈ X 2 şi de aici rezultă că G nu este un graf
conex. Subgrafurile G1 = ( X 1 , U1 ) şi G2 = ( X 2 , U 2 ) sunt grafuri conexe şi astfel
reprezintă componentele conexe ale grafului G .
Imaginea grafului G este:

5
1
G1
4
2
G2
6
3 7

Fie G = ( X , U ) un graf neorientat. Pentru x, y ∈ X spunem că x este
conectat cu y dacă există un lanŃ ce le uneşte, adică există un lanŃ
L = ( x0 , x1 ,..., xr ) de extremităŃi x şi y
Pe mulŃimea X definim relaŃia binară ~ ⊂ X × X , dată prin x ~ y dacă
şi numai dacă ( x = y sau x este conectat cu y ).
PropoziŃia 1. RelaŃia " ~ " definită mai sus este o relaŃie de echivaleŃă
DemonstraŃie.
• reflexivitate – pentru orice x ∈ X deoarece x = x , rezultă că x ~ x .
• antisimetrie – considerăm că x ~ y şi y ~ x . Din x ~ y avem x = y sau
x este conectat cu y , adică există un lanŃ L = ( x0 , x1 ,..., xr ) de
extremităŃi x şi y .
Putem presupune că lanŃul este elementar şi că x = x0 şi y = xr . Din
y ~ x avem x = y sau y este conectat cu x , adică există un lanŃ
L′ = ( y0 , y1 ,..., yq ) de extremităŃi y şi x .

28
Putem presupune că lanŃul este elementar şi că y = y0 şi x = yq .
Presupunem că avem x ≠ y . Atunci rezultă că relaŃiile au loc doar prin
conectare. Fie astfel lanŃul format din concatenarea lanŃurilor L şi L′ şi
astfel x este conectat cu x de unde x ≠ x . ContradicŃie.
• tranzitivitate – deoarece x ~ y avem x = y sau x este conectat cu y ,
adică există un lanŃ L = ( x0 , x1 ,..., xr ) de extremităŃi x şi y . Dacă
x = y , rezultă că în y ~ z putem înlocui y cu x şi rezultă x ~ z .
Deoarece y ~ z avem y = z sau y este conectat cu z , adică există un
( )
lanŃ L′ = y0 , y1 ,..., yq de extremităŃi y şi z .
Dacă y = z , atunci în afirmaŃia „există un lanŃ L = ( x0 , x1 ,..., xr ) de
extremităŃi x şi y ” putem înlocui y cu z şi rezultă „există un lanŃ
L = ( x0 , x1 ,..., xr ) de extremităŃi x şi z ” astfel că rezultă x ~ z .
Dacă nu are loc relaŃia y = z, fie lanŃul
L′′ = ( x0 , x1 ,..., xr = y0 , y1 ,..., yq ) obŃinut prin concatenarea lanŃurilor L
şi L′ . Atunci lanŃul L′′ este de extremităŃi x şi z şi astfel avem că x este
conectat cu z , deci x ~ z .

PropoziŃia 2. Fie G = ( X , U ) un graf în care X = n , U = m şi n ≥ 2 .
Dacă G este conex, atunci m ≥ n − 1 .
DemonstraŃie. Pentru n = 2 , deoarece G este conex rezultă că între cele
două vârfuri există o muchie între ele şi astfel m ≥ 1 .
Presupunem că relaŃia este adevărată pentru un graf cu X = n vârfuri. Fie
H = (Y ,V ) un graf pentru care Y = n + 1 şi fie V = m . Considerăm z ∈ Y şi
subgraful G = ( X ,U ) unde X = Y \ { z} , deci putem scrie că
X = Y − 1 = n + 1 − 1 = n . Putem alege z astfel încât G să fie conex.
Deoarece H este conex, rezultă că există x ∈ X astfel încât { z , x} ∈V ,
deci m = V ≥ U + 1 .
Pentru G conex, din ipoteza de inducŃie rezultă U ≥ X − 1 = n − 1 .
Înlocuind în relaŃia de mai sus obŃinem m = V ≥ U + 1 ≥ n − 1 + 1 = n .
Datorită principiului inducŃiei complete, din cele de mai sus rezultă că
relaŃia din enunŃ este adevărată pentru orice graf conex G .

29
Considerând graful din exemplul 4 în care X = 7 şi U = 6 , deci nu are
loc relaŃia m ≥ n − 1 , ceea ce, reprezentând o negare a propoziŃiei 2, implică faptul
că graful G nu este unul conex, ceea ce este adevărat conform exemplului
considerat.
NoŃiunea de graf conex este valabilă şi pentru grafurile orientate. DefiniŃia
este următoarea:
DefiniŃie. Graful orientat G = ( X , U ) se numeşte conex dacă şi numai
dacă oricare ar fi două noduri x, y ∈ X , x ≠ y , există cel puŃin un lanŃ în G ,
L = ( x0 , x1 ,..., xr ) de extremităŃi x şi y .

Dacă în definiŃia grafului conex pentru grafuri orientate înlocuim condiŃia
de existenŃă a unui lanŃ cu cea de existenŃă a unui drum se obnŃine următoarea
noŃiune.
DefiniŃie. Graful orientat G = ( X , U ) se numeşte tare conex dacă şi
numai dacă oricare ar fi două noduri x, y ∈ X , x ≠ y , există cel puŃin un drum în
G , d = ( x = x0 , x1 ,..., xr = y ) de extremităŃi x şi y .

Exemplul 5. Considerăm un graf orientat G = ( X ,U ) , unde
X = {1, 2,3, 4,5} şi
U = {(1, 2 ) , (1,3) , ( 2,3 ) , ( 2, 4 ) , ( 2,5 ) , ( 3, 4 ) , ( 4,1) , ( 5,1) , ( 5,3) , ( 5, 4 )}
Putem vedea că există un lanŃ:
L = (1, 2 ) , ( 2, 3) , ( 3, 4 ) , ( 5, 4 )  = [1, 2,3, 4,5]
care conŃine toate vârfurile şi astfel se poate ajunge între oricare două vârfuri prin
lanŃuri. Astfel, rezultă că graful orientat G este conex.
Să considerăm vârful 1. Putem forma următoarele drumuri cu extremitatea
iniŃială 1: D1,1 = (1, 2, 4,1) , D1,2 = (1, 2 ) , D1,3 = (1, 2,3) , D1,4 = (1, 2, 4 ) şi
D1,5 = (1, 2,5 ) .
Pentru vârful 2, considerat ca extremitate iniŃială se formează:
D2,1 = ( 2, 4,1) , D2,2 = ( 2, 4,1, 2 ) , D2,3 = ( 2,3) , D2,4 = ( 2, 4 ) , D2,5 = ( 2,5 ) .
Similar, pentru vârful 3 avem: D3,1 = ( 3, 4,1) , D3,2 = ( 3, 4,1, 2 ) ,
D3,3 = ( 3, 4,1, 2,3) , D3,4 = ( 3, 4 ) , D3,5 = ( 3, 4,1, 2,5 ) .
Pentru vârful 4 putem construi: D4,1 = ( 4,1) , D4,2 = ( 4,1, 2 ) ,
D4,3 = ( 4,1,3) , D4,4 = ( 4,1, 2, 4 ) , D4,5 = ( 4,1, 2,5 ) .

30
În fine, folosind ca extremitate iniŃială vârful 5 construim drumurile:
D5,1 = ( 5,1) , D5,2 = ( 5,1, 2 ) , D5,3 = ( 5,3) , D5,4 = ( 5, 4 ) , D5,5 = ( 5,1, 2,5 ) .
Am arătat astfel că din orice x ∈ X se poate ajunge printr-un drum la orice
y ∈ X şi astfel, graful G este tare conex.
Imaginea grafului este

2 3
5

4

O posibilitate de a determina dacă un graf neorientat este conex, sau
determinarea efectivă a componentelor conexe (sau problemele similare pentru
grafurile orientate) constă în aplicarea unui algoritm de tip greede.
Să considerăm întâi problema determinării conexităŃii unui graf neorientat
G = ( X ,U ) .
Algoritm 1.
1. Se consideră Y = X , V = U şi se alege orice x ∈ X pentru care
considerăm B = { x} .
2. Dacă B = ∅ , atunci algoritmul se termină generând un răspuns astfel:
a. Dacă V = ∅ , atunci graful este conex
b. Dacă V ≠ ∅ , atunci graful nu este conex (în plus se poate spune
că mulŃimea X \ Y reprezintă componenta conexă din care face
parte şi nodul x considerat la 1).
Altfel se continuă.
3. Se alege orice y ∈ B .
4. Pentru fiecare z ∈ Y \ B astfel încât { y, z} ∈V considerăm B = B ∪ { z}
şi V = V \ {{ y, z}}
5. Considerăm B = B \ { y} şi reluăm de la 2.

31
Exemplul 6. Se consideră graful din următoarea figură.

5
1

4
2

6
3 7
Folosind algoritmul 1 să determinăm dacă graful considerat este sau nu
conex
Din pasul 1 al algoritmului se fac iniŃializările Y = X = {1, 2,3, 4,5, 6, 7}
şi
V = U = {{1, 2} , {1,3} , {1,5} , {1,6} , {2,3} , {4,5} , {6, 7}} .
Alegem vârful 6 şi considerăm B = {6} .
Deoarece B ≠ ∅ se realizează o primă aplicare a paşilor 3, 4 şi 5 cu
{ }
alegerea 6 ∈ B , rezultând B = {1, 7} şi V = {1, 2} , {1,3} , {1,5} , {2,3} , {4,5} .
În continuare B ≠ ∅ , la a doua aplicare, cu alegerea 7 ∈ B nu există
muchii cu extremitatea 7 şi astfel nu se modifică decât B care devine B = {1}
Pentru a treia aplicare nu putem face decât alegerea 1 ∈ B pentru care va
{
rezulta B = {2,3,5} şi V = {2,3} , {4,5} . }
Putem continua cu alegerea 3 ∈ B pentru care nu avem în V muchii între
3 şi vârfurile din mulŃimea {1, 4, 6, 7} şi astfel se ajunge la B = {2,5} cu V
nemodificat.
A cincea aplicare se poate face cu alegerea 5 ∈ B pentru care efectul este
{
B = {2, 4} şi V = {2,3} . }
În continuare, selectând 2 ∈ B vom obŃine B = {3, 4} şi V = ∅ .
Următoarele aplicaŃii, două la număr sunt în aceeaşi situaŃie ca la a doua
aplicare a algoritmului şi se produc eliminările celor două elemente din B care
ajunge mulŃime vidă.
Cum avem şi V = ∅ , suntem în cazul (a) al răspunsului, deci graful
considerat este unul conex.

Aşa cum se vede din pasul 2, algoritmul prezentat dă răspunsul la
întrebarea „Este G un graf conex?”.

32
De asemenea, se poate determina componenta conexă a grafului G din
care face parte un anumit nod specificat. Acest lucru crează premizele realizării
algoritmului de determinare a componentelor conexe, plecând de la algoritmul 1.
Algoritm 2.
1. Se consideră Y = X , V = U k = 0 .
2. Dacă V = ∅ , atunci algoritmul se termină şi componentele conexe ale
k
grafului G sunt A1 , A2 , ..., Ak . Vârfurile care nu sunt în ∪A k sunt
i =1
vârfuri izolate şi formează fiecare în parte câte o componentă conexă a
grafului G (în plus valoarea pentru k arată dacă graful G este sau nu
conex. Astfel pentru k = 1 şi A1 = X graful este conex, altfel G nu este
conex).
3. Alegem orice x ∈ Y . Fie k = k + 1 , Ak = ∅ , B = { x} .
4. Dacă B = ∅ se trece le 8, altfel se continuă.
5. Se alege orice y ∈ B .
6. Pentru fiecare z ∈ Y \ B astfel încât { y, z} ∈V considerăm B = B ∪ { z}
şi V = V \ {{ y, z}} .
7. Considerăm B = B \ { y} , Ak = Ak ∪ { y} . Se trece la 4.
8. Se elimină din V orice muchie {a, b} pentru care a, b ∈ Ak . Se trece la
2.

Exemplul 7. Considerăm graful de la exemplul 4, deci cu imaginea

5
1

4
2

6
3 7
Să aplicăm algoritmul 2 pentru a determina componentele conexe ale
acestui graf G = ( X , U ) .
Pasul 1 realizează iniŃializările Y = X = {1, 2,3, 4,5, 6, 7} , k = 0 şi
V = U = {{1, 2} , {1,3} , {1,5} , {2,3} , {4,5} , {6,7}}
şi cum V ≠ ∅ rezultă că se continuă cu pasul 3.

33
Să alegem 5 ∈ Y . Avem k = 1 , B = {5} şi A1 = ∅ şi deoarece B ≠ ∅ se
continuă cu paşii 5, 6 şi 7, în urma cărora se ajunge la B = {1, 4} , A1 = {5} şi
V = {{1, 2} , {1,3} , {2,3} , {6, 7}}
Se continuă cu aceeaşi paşi deoarece din nou B ≠ ∅ , şi alegând în prima
iteraŃie vârful 4 şi apoi vârful 1 obŃinem B = {2,3} , A1 = {1, 4,5} şi
V = {{2,3} , {6, 7}} .
Din nou B ≠ ∅ şi după realizarea a încă trei iteraŃii cu ordinea de alegere
2, 3 şi 2 pentru vârfuri se ajunge la situaŃia B = ∅ , A1 = {1, 2,3, 4,5} şi
V = {{6, 7}} . Deoarece nu sunt muchii între nodurile lui A1 din pasul 8 se trece la
pasul 2 care impune reluarea paşilor 3, 4, 5, 6, 7 deoarece V ≠ ∅ . Se consideră
astfel k = 2 şi A2 = ∅
Prin următoarele două iteraŃii se ajunge în starea B = ∅ , V = ∅ ,
A2 = {6, 7} şi la revenirea la pasul 2 cu V = ∅ algoritmul se opreşte.
Deoarece X = A1 ∪ A2 , rezultă că s-a format o partiŃie reprezentând
componentele conexe ale grafului G şi acestea sunt subgrafurile G1 = ( A1 , U1 ) şi
G2 = ( A2 ,U 2 ) , unde U 2 = {{6, 7}} şi
U 2 = {{1, 2} , {1,3} , {1,5} , {2,3} , {4,5}} .

2.2. Grafuri complementare şi izomorfe

DefiniŃie. Fie G = ( X , U ) un graf neorientat, numim complementarul lui


G (graf complementar lui G ), graful CG = ( X , CU ) , în care { x, y} ∈ CU
dacă şi numai dacă { x, y} ∉ U .

DefiniŃie. Fie G = ( X , U ) şi G ′ = ( X ′, U ′ ) două grafuri neorientate.
Spunem că G şi G ′ sunt izomorfe, notăm G ≅ G ′ , dacă există o funcŃie bijectivă
{ }
f : X → X ′ astfel încât { x, y} ∈ U dacă şi numai dacă f ( x ) , f ( y ) ∈ U ′ .

Din definiŃie rezultă că două grafuri sunt izomorfe dacă au acelaşi număr
de vârfuri şi se poate obŃine unul din celălalt printr-o renumerotare a vârfurilor.
DefiniŃii similare celor de mai sus sunt valabile pentru grafurile orientate.
Ele se obŃin înlocuind muchiile cu arce.

34
Exemplul 8. Fie un graf neorientat G = ( X , U ) cu
X = {1, 2,3, 4,5}
şi
U = {{1, 2} , {1,3} , {1, 4} , {2,5} , {4,5}} .
Cum U = 5 şi numărul maxim de muchii este 10 rezultă că graful
complementar are 5 muchii şi astfel avem
V = CU = {{1,5} , {2,3} , {2, 4} , {3, 4} , {3,5}} ,
obŃinându-se graful
CG = ( X , CU ) .
Grafurile din acest exemplu au următoarele imagini:

1 1

3 3
2 2
5 5

4 4

G = ( X ,U ) CG = ( X , CU )

Exemplul 9. Fie un graf orientat G = ( X , U ) cu
X = {1, 2,3, 4,5}
şi
U = {(1, 2 ) , (1,3) , (1, 4 ) , ( 2, 4 ) , ( 2,5 ) , ( 3, 2 ) , ( 3,5 ) , ( 4, 2 ) , ( 4,5 ) , ( 5,1) , ( 5,3)} .
Deoarece numărul total de muchii posibile într-un graf orientat este egal cu
aranjamente de numărul de vârfuri luate câte două, deci 20, şi U = 11 , rezultă că
în graful complementar avem 9 arce şi astfel
CU = {(1,5 ) , ( 2,1) , ( 2,3) , ( 3,1) , ( 3, 4 ) , ( 4,1) , ( 4,3) , ( 5, 2 ) , ( 5, 4 )} .
În acest mod se obŃine graful
CG = ( X , CU ) .
Grafurile orientate din acest exemplu au următoarele reprezentări:

35
1 1

3 3
2 2
5 5

4 4

G = ( X ,U ) CG = ( X , CU )

PropoziŃia 3. Fie G = ( X , U ) şi G′ = ( X ′,U ′ ) două grafuri orientate.
Atunci G ≅ G ′ dacă şi numai dacă CG ≅ CG ′ .
DemonstraŃie. Verificarea concluziei propoziŃiei este imediată folosind
definiŃiile date pentru izomorfismul de grafuri şi pentru graful complementar. De
exemplu, să considerăm implicaŃia ⇒ .
Avem că G ≅ G ′ şi fie f : X → X ′ izomorfismul de la G la G ′ . Astfel
f este o funcŃie bijectivă pentru care are loc enunŃul { x, y} ∈ U dacă şi numai
dacă { f ( x ) , f ( y )} ∈U ′ .
Fie { x, y} ∈ CU . Rezultă, conform definiŃiei grafurilor complementare, că
{ x, y} ∉U . Din G ≅ G′ , se ajunge la { f ( x ) , f ( y )} ∉ G′ de unde obŃinem
{ f ( x ) , f ( y )} ∈ CG′ . De aici obŃinem că f este şi izomorfism de la CG la
CG′ , deci CG ≅ CG′ .

Exemplul 10. Se consideră grafurile G din exemplul 8 şi graful
H = (Y ,V ) , unde
V = {{1, 2} , {1,3} , {2, 4} , {2,5} , {3, 4}}
Considerăm funcŃie f : X → Y , dată prin tabelul
x 1 2 3 4 5
f ( x) 2 4 5 1 3
Ca funcŃie definită pe mulŃimi finite cu acelaşi număr de elemente şi pentru
care observăm că este injectivă, rezultă că f este o funcŃie bijectivă Se poate
observa, de asemenea, că ( x, y ) ∈ U dacă şi numai dacă ( f ( x ) , f ( y ) ) ∈V şi
astfel f este un izomorfism de la G la H . Astfel avem G ≅ H .
Grafurile au următoarea reprezentare:
36
1 2

3 5
2 4
5 3

4 1

G = ( X ,U ) H = (Y , V )

2.3. Grafuri ciclice

DefiniŃie. Fie G = ( X , U ) un graf neorientat. Numim ciclu în G un lanŃ


L = [ x0 , x1 ,..., xr ] în care x0 = xr (în care extremităŃile coincid).

DefiniŃie. Fie G = ( X , U ) un graf neorientat şi L = [ x0 , x1 ,..., xr ] un
ciclu. Spunem că L este ciclu elementar dacă pentru orice 0 ≤ i, j ≤ r − 1 , i ≠ j ,
avem xi ≠ x j (toate vârfurile sale, exceptând extremităŃile, sunt distincte două
câte două) .

DefiniŃie. Fie G = ( X , U ) un graf neorientat şi L = [ x0 , x1 ,..., xr ] un
ciclu. Spunem că L este ciclu simplu daca pentru orice 0 ≤ i, j ≤ r − 1 , i ≠ j ,
{ }
avem { xi , xi +1} ≠ x j , x j +1 (toate muchiile sale sunt distincte două câte două).

Exemplul 11. Fie un graf neorientat G = ( X ,U ) , unde
X = {1, 2,3, 4,5, 6} şi
U = {{1, 2} , {1,3} , {1,5} , {1, 6} , {2,3} , {3, 4} , {4,5} , {4, 6}} .
Pentru acest graf putem da ca exemplu de ciclu lanŃul închis
L1 = [1, 2,3,1,5, 4, 6,1]
Acest ciclu poate fi scris şi ca o succesiune de muchii prin
L1 = {1, 2} , {2,3} , {3,1} , {1,5} , {5, 4} , {4, 6} , {6,1}
Din scrierea ciclului prin vârfuri se poate vedea că ciclul trece de două ori
prin vârful 1 şi astfel nu este un ciclu elementar.

37
Din scrierea ciclului prin muchiile prin care trece se vede că fiecare muchie
apare o singură dată şi astfel ciclul este un ciclu simplu.
Un exemplu de ciclu elementar este L2 = [1, 2,3, 4, 6,1] , în care, cu
excepŃia extremităŃilor, se trece o singură dată prin fiecare vârf
Acest graf are reprezentarea

1
6

2
5

4
În reprezentarea de mai sus am îngroşat muchiile care formează ciclul
elementar L2 .

DefiniŃiile de mai sus continuă să fie valabile şi pentru grafurile orientate.
Suplimentar intervin definiŃiile care urmează.
DefiniŃie. Fie G = ( X , U ) un graf orientat. Numim circuit în G un drum
C = ( x0 , x1 ,..., xr ) în care x0 = xr (în care extremităŃile coincid).

DefiniŃie. Fie G = ( X , U ) un graf orientat şi C = ( x0 , x1 ,..., xr ) un
circuit. Spunem că C este circuit elementar dacă pentru orice 0 ≤ i, j ≤ r − 1 ,
i ≠ j , avem xi ≠ x j (toate vârfurile sale, exceptând extremităŃile, sunt distincte
două câte două) .

DefiniŃie. Fie G = ( X , U ) un graf orientat şi C = ( x0 , x1 ,..., xr ) un ciclu.
Spunem că C este circuit simplu daca pentru orice 0 ≤ i, j ≤ r − 1 , i ≠ j , avem
( xi , xi +1 ) ≠ ( x j , x j +1 ) (toate arcele sale sunt distincte două câte două).

38
Exemplul 12. Considerăm graful orientat G = ( X ,U ) , unde
X = {1, 2,3, 4,5, 6} şi
U = {(1, 2 ) , (1,5 ) , ( 2,3) , ( 3,1) , ( 4,3) , ( 4, 6 ) , ( 5, 4 ) , ( 6,1)} .
Graful considerat, anulând orientarea arcelor, conduce la graful neorientat
din exemplul 11 şi astfel, în graful considerat, L1 = [1, 2,3,1,5, 4, 6,1] este un ciclu
simplu, în timp ce L2 = [1, 2,3, 4, 6,1] este un ciclu elementar. Scrierea ciclului L1
prin arce este
L1 = (1, 2 ) , ( 2,3) , ( 3,1) , (1,5 ) , ( 5, 4 ) , ( 4, 6 ) , ( 6,1)  .
Din această scriere se observă că în ciclul L1 toate arcele sunt în sensul de
la extremitatea stângă la cea dreaptă şi astfel L1 este şi un circuit în G . Deoarece
în L1 fiecare arc intervine o singură dată, rezultă că L1 este un circuit simplu.
Putem astfel scrie
L1 = (1, 2,3,1,5, 4, 6,1)
sau
L1 = ( (1, 2 ) , ( 2,3) , ( 3,1) , (1,5 ) , ( 5, 4 ) , ( 4,6 ) , ( 6,1) ) .
Considerăm în G lanŃul L3 = (1,5, 4,3,1) care este un ciclu elementar
deoarece trece o singură dată prin fiecare vârf şi, în plus, având arcele în sensul
scrierii lanŃului, este şi drum. Astfel, L3 este un circuit elementar în G .
Graful considerat are reprezentarea:

1
6

2
5

şi în aceasta am îngroşat arcele ce formează circuitul L3 .


39
DefiniŃie. Graful neorientat G = ( X , U ) se numeşte ciclic dacă G
conŃine cel puŃin un ciclu şi se numeşte aciclic în caz contrar.

`Exemplul 13. Graful neorientat din exemplul 11 este un graf neorientat
ciclic deoarece conŃine cel puŃin un ciclu (de fapt, am dat exemplu de două cicluri
în graful considerat).

DefiniŃie. Fie G = ( X , U ) un graf orientat. Spunem că G este aciclic
dacă G nu conŃine niciun circuit şi ciclic în caz contrar.

Exemplul 14. Considerăm graful dat în exemplul 12. Deoarece în acest
graf orientat am detectat circuitul L3 , astfel graful este un graf orientat ciclic.

PropoziŃia 4. Fie G = ( X , U ) un graf neorientat. Dacă U ≥ X , atunci
G este ciclic.
DemonstraŃie. Fie X = n , U = m , deci m ≥ n .
Dacă G nu este conex, fie G1 , G2 , ..., Gk . Dacă există un ciclu L în G ,
atunci există 1 ≤ k ≤ r astfel încât L este ciclu în Gx , deoarece în caz contrar ar
exista o muchie între două componente conexe şi astfel cele două componente
conexe coincid. Putem presupune că L este ciclu în G1 şi că pentru orice
2 ≤ i ≤ r , Gi nu conŃine cicluri şi astfel numărul de muchii din componenta
conexă Gi este mai mic decât numărul de vârfuri din Gi .
Prin sumare şi deoarece m ≥ n rezultă că numărul de muchii din
componenta conexă G1 trebuie să fie mai mare decât numărul de vârfuri din
componentă. Astfel, putem presupune că G este conex.
Conform propoziŃiei 2, G conex implică m ≥ n − 1 . Dacă m ≥ n
presupunem că G nu este ciclic. G fiind conex rezultă că pentru orice x, y ∈ X
există doar un drum elementar de la capete x şi y . Atunci, prin eliminarea unei
muchii, graful obŃinut nu mai este conex şi astfel obŃinem un graf neconex pentru
m = n − 1 . ContradicŃie.
Considerăm acum că m = n − 1 şi graful este ciclic. Fie C = [ x0 , x1 ,..., xr ]
un ciclu în G . Atunci putem elimina una din muchiile adiacente cu x0 pentru a
obŃine drumul C = [ x1 ,..., xr ] sau C = [ x0 , x1 ,..., xr −1 ] şi astfel să se păstreze
conexitatea. Rezultă astfel un graf conex pentru care m ≥ n − 2 . ContradicŃie.

40
DefiniŃie. Fie G = ( X , U ) un graf neorientat având k ≥ 1 componente
conexe. Se numeşte punte în G o muchie m ∈ U pentru care graful parŃial
( )
G′ = X ,U \ {m} are numărul de componente conexe mai mare decât k .

Exemplul 15. Considerăm graful neorientat G = ( X ,U ) , unde
X = {1, 2,3, 4,5, 6,7} şi
U = {{1, 2} , {1,3} .{2,3} , {2, 4} , {3, 4} , {3,5} , {5, 6} , {5,7} , {6, 7}}
G are reprezentarea:

1
7
2

3
4

6
5

Şi din reprezentarea grafului se observă că prin eliminarea muchiei {3,5}


conduce la apariŃia componentelor conexe C1 = {1, 2,3, 4} şi C2 = {5, 6, 7} , deci
două componente conexe.
Deoarece graful G este unul conex, numărul componentelor conexe
iniŃiale este 1.
Deoarece eliminarea muchiei {3,5} produce creşterea numărului de
componente conexe, rezultă că muchia {3,5} este o punte.

PropoziŃia 5. Fie G = ( X , U ) un graful neorientat şi m ∈ U . m este
punte, dacă şi numai dacă oricare ar fi ciclul C = [ m1 , m2 ,..., mr ] în G dat prin
muchiile sale, m ≠ mi pentru orice 1 ≤ i ≤ r .

41
DemonstraŃie

Considerăm că m este punte şi că numărul de componente conexe este
egal cu 1. Acest lucru nu reduce generalitatea, deoarece raŃionamentul care
urmează este valabil doar în componenta conexă care conŃine muchia m .
Presupunem că există un ciclu C = [ m1 , m2 ,..., mr ] în G dat prin muchiile
sale astfel încât există i , 1 ≤ i ≤ r , pentru care m = mi .
Fie x, y ∈ G . G fiind conex rezultă că există un lanŃ L = e1 , e2 ,..., e p 
în G , dat prin muchiile sale, de extremităŃi x şi y.
Dacă pentru orice j = 1, 2,..., p , m ≠ e j , atunci L este lanŃ şi în graful
G′ = ( X ,U \ {m} ) ., deci eliminarea muchiei nu întrerupe conectarea dintre x şi y.
Dacă există j, 1≤ j ≤ p , considerăm
lanŃul L′ = e1 ,..., e j −1 , mi +1 ,..., mr , m1 ,..., mi −1 , e j +1 , e p  care are extremităŃile x şi y
şi nu conŃine muchia m şi astfel este lanŃ în graful G ′ = X , U \ {m} . ( )
Din cele de mai sus rezultă că graful G ′ = X , U \ {m} ( ) este conex şi
astfel m nu este punte. ContradicŃie.

Putem presupune, fără a reduce generalitatea, că G este un graf conex.
Altfel, eliminarea unei muchii afectează eventual doar componenta conexă în care
muchia se găseşte, celelalte componente conexe rămânând neschimbate, deci şi
numărul lor. Astfel, dacă G nu este conex, putem reduce raŃionamentul la
subgraful lui G corespunzător componentei conexe în care există muchia m .
Presupunem că oricare ar fi un ciclu C =  m1 , m2 ,..., m p  , avem m ≠ mi
pentru orice 1 ≤ i ≤ p . Atunci, prin eliminarea muchiei m , toate aceste cicluri
rămân valabile.
Dacă presupunem că m uneşte două cicluri, atunci prin eliminare cele
două cicluri devin separate, deci pot intra în două componente conexe diferte.
Dacă m uneşte un vârf de un ciclu, prin eliminare vârful şi ciclul devin
separate, deci pot intra în două componente conexe diferite.
Dacă m se găseşte pe un lanŃ care nu face parte dintr-un ciclu, prin
eliminare se obŃin două componente separate şi deci posibil din două componente
conexe.
Astfel, eliminarea lui m produce apariŃia a două componente conexe în
G , de unde, conform definiŃiei, m este punte.

42
PropoziŃia 6. Fie G = ( X , U ) un graf orientat. G este tare conex dacă şi
numai dacă există un circuit C care conŃine toate vârfurile grafului.
DemonstraŃie

Conform definiŃiei, dacă G este conex, atunci pentru orice x1 , x2 ∈ X
există un drum d1,2 care să aibă extremitatea iniŃială x1 şi extremitatea finală x2 .
Din acelaşi motiv există un drum d 2,1 care să aibă extremitatea iniŃială x2 şi
extremitatea finală x1 . Putem forma astfel un circuit C1 = d1,2 , d 2,1 . ( )
Dacă C1 conŃine toate vârfurile din G , atunci C = C1 este circuitul căutat.
Presupunând că C1 nu conŃine toate vârfurile grafului G , fără a reduce
generalitatea, considerăm că celelalte vârfuri sunt cuprinse în circuitul C2 .
Fie x3 un vârf care se găseşte pe circiutul C2 . Deoarece G este tare
conex, rezultă că există un drum d3 de la x1 la x3 şi există un drum d 4 de la x3
la x1 .
Considerând C2 scris ca drum de la x3 la x3 , formăm astfel un circuit nou
C = ( d1,2 , d 2,1 , d 3 , C2 , d 4 ) care este un circuit ce conŃine toate vârfurile lui G .

Presupunând că în G există un circuit C care conŃine toate vârfurile,
atunci pentru orice x, y ∈ X există un drum d ⊂ C care să fie de extremităŃi x şi
y , deci G este tare conex.

DefiniŃie. Fie G = ( X ,U ) un graf orientat. Definim
V = {( x, y ) ∈ U ∃C circuit in G cu ( x, y ) ∈ C} . Graful parŃial H = ( X ,V ) se
numeşte graful orientat ciclu al lui G .

Exemplul 16. Se consideră un graf orientat G = ( X , U ) cu
X = {1, 2,3, 4,5, 6,7}
şi
U = {(1, 2 ) , ( 2, 4 ) , ( 3,1) , ( 3, 2 ) , ( 3,5 ) , ( 5, 6 ) , ( 6, 7 ) , ( 7,5 )}

43
Graful considerat are reprezentarea

1
7
2

3
4

6
5

În graful G putem identifica circuitele C1 = ( 2, 4,3, 2 ) , C2 = (1, 2, 4,3,1)


şi C3 = ( 5,6, 7,5 ) . Considerând arcele din aceste circuite şi mulŃimea U se vede
că există muchia ( 3,5) care nu face parte din niciun circuit din G . Putem
considera astfel graful parŃial G ′ = ( X , V ) în care
V = {(1, 2 ) , ( 2, 4 ) , ( 3,1) , ( 3, 2 ) , ( 5, 6 ) , ( 6, 7 ) , ( 7,5 )}
Graful G ′ este graful orientat ciclu al grafului G şi are reprezentarea

1
7
2

3
4

6
5

PropoziŃia 7. Fie G = ( X , U ) un graf orientat şi H = ( X , V ) graful
ciclu al lui G . Fie Y ⊂ X şi G ′ = ( Y , W ) subgraf. Atunci G ′ componentă tare
conexă în G dacă şi numai dacă G ′ componentă tare conexă în H .

44
DemonstraŃie

Folosind propoziŃia 6, dacă G ′ este componentă tare conexă a lui G
atunci există un circuit C care conŃine toate vârfurile din Y şi orice x ∈ X \ Y nu
se formează circuite cu x şi vârfuri din Y . Astfel, W ⊂ V şi deci G ′ este subgraf
în H .
C conŃine toate vârfurile din Y şi este circuit maximal în H , de unde
rezultă că G ′ este componentă tare conexă a lui H .

Se repetă în sens invers raŃionamentul de mai sus.

DefiniŃie. Fie G = ( X , U ) un graf orientat şi C1 , C2 , ..., Ct
componentele tari conexe ale lui G . Fie
Y = {C1 , C2 ,..., Ct }
şi
{ }
V = ( Ci , C j ) ∃x ∈ Ci , ∃y ∈ C j cu ( x, y ) ∈ U ⊂ Y × Y .
Graful H = (Y , V ) se numeşte graful condensat al lui G .

ObservaŃie. Graful condensat al oricărui graf orientat este aciclic.
Exemplul 17. Să considerăm din nou graful orientat din exemplul 16. Am
văzut în exemplul 16 că există două circuite, C2 = (1, 2, 4,3,1) şi C3 = ( 5,6, 7,5 ) ,
care sunt circuite care cuprind toate vârfurile din graful orientat ciclic. Astfel am
obŃinut: graful G are două componente tare conexe, corespunzătoare celor două
circuite.
Deoarece în graful G există arcul ( 3,5 ) între vârful 3 care este în
componenta tare conexă C1 şi vârful 5 din componenta tare conexă C2 . Putem
constitui astfel mulŃimea Y = {C1 , C2 } şi V = {( C , C )}
1 2 pentru a forma graful
orientat Gc = (Y , V ) care este astfel graful orientat condensat a grafului G .
Reprezentarea grafului condensat este

C1 C2

45
III. REPREZENTAREA GRAFURILOR
3.1. Reprezentare grafuri neorientate

Forma uzuală de reprezentare a grafurilor neorientate este prin asocierea


unei valori logice pentru existenŃa sau nu a unei muchii între două noduri.
Astfel, dacă G = ( X , U ) este un graf neorientat, atunci pentru orice
x, y ∈ X , considerăm
1 pentru { x, y} ∈ U
m ( x, y ) =  .
 0 pentru { x , y} ∉ U
DefiniŃie. Fie G = ( X , U ) un graf neorientat cu X = n şi presupunem
că X = { x1 , x2 ,..., xn } . Definim matricea AG = ai , j( ) 1≤ i , j ≤ n
∈ M n ({0,1} ) , definită

( )
prin aij = m xi , x j . Matricea AG se numeşte matricea de adiacenŃă asociată
grafului G .

ObservaŃie. Dacă G = ( X , U ) este un graf neorientat şi AG este matricea
sa de adiacenŃă, atunci AG este simetrică, deoarece muchia xi , x j { } este tot una cu
{
muchia x j , xi . }
ObservaŃie. Deoarece am presupus că pentru grafurile studiate nu avem
bucle (muchii de forma { x, x} ), matricea de adiacenŃa AG pentru orice graf
neorientat G = ( X , U ) are diagonala principală formată doar cu valoarea zero.
Atunci când nu există posibilitatea de confuzie, vom nota AG prin A .
Exemplul 1. Fie G = ( X , U ) un graf neorientat cu X = {1, 2,3, 4,5} şi
U = {{1, 2} , {1, 4} , {2,3} , {2, 4} , {3,5} , {4,5}}
Să determinăm matricea de adiacenŃă a grafului.
Graful are imaginea:

46
1

2 3 4

Construim tabelul definiŃie elementelor m ( x, y ) şi obŃinem:


y
1 2 3 4 5
x
1 0 1 0 1 0
2 1 0 1 1 0
3 0 1 0 0 1
4 1 1 0 0 1
5 0 0 1 1 0
Matricea de adiacenŃa este astfel:
0 1 0 1 0
 
1 0 1 1 0
AG =  0 1 0 0 1
 
1 1 0 0 1
0 0 1 1 0 


Dacă G = ( X , U ) este un graf neorientat, atunci pentru orice x, y ∈ X ,
considerăm
1 ∃ L = [ x = x0 , x1 ,..., xr = y ] ˆin G
l ( x, y ) = 
0 altfel
DefiniŃie. Fie G = ( X , U ) un graf neorientat cu X = n şi presupunem

( )
că X = { x 1 , x2 ,..., xn } . Definim matricea LG = lij
1≤i , j ≤ n
∈ M n ({0,1} ) , definită

( )
prin lij = l xi , x j . Matricea LG se numeşte matricea lanŃurilor grafului G .

47
ObservaŃie. Matricea lanŃurilor LG este o matrice simetrică deoarece dacă
există un lanŃ L = [ x = x0 , x1 ,..., xr = y ] de la x la y , atunci există şi un lanŃ de la
y la x şi anume lanŃul L′ = [ y = xr ,..., x1 , x0 = x ] care este chiar lanŃul
L = [ x = x0 , x1 ,..., xr = y ] dar sub o altă scriere (cu nodurile scrise în ordine
inversă).
Exemplul 2. Se consideră graful din exemplul 1 şi dorim să-i scriem
matricea lanŃurilor. Pentru aceasta se observă că avem lanŃurile {1, 2} , {1, 2,3} ,
{1, 4} , {1, 4,5} , {2,3} , {2, 4} , {2,3,5} , {3,5, 4} , {3,5} şi {4,5} care
demonstrează că există lanŃuri între oricare două vârfuri ale grafului (graful este
conex). Astfel, matricea lanŃurilor va fi
1 1 1 1 1
 
1 1 1 1 1
LG = 1 1 1 1 1
 
1 1 1 1 1
1 1 1 1 1


Definim următoarele operaŃii:
• Adunarea logică, + : {0,1} × {0,1} → {0,1} , definită prin a + b = a ∨ b ,
pentru orice a, b ∈ {0,1} , unde ∨ este operaŃia uzuală de disjuncŃie logică
(sau logic);
• ÎnmulŃirea logică i : {0,1} × {0,1} → {0,1} , definită prin
ab = a ib = a ∧ b , pentru orice a, b ∈ {0,1} , unde ∧ este operaŃia uzuală
de conjuncŃie logică (şi logic).
Folosind aceste operaŃii drept operaŃii uzuale, A fiind o matrice cu valori
booleene, are loc următorul rezultat.
PropoziŃia 1. Fie G = ( X , U ) un graf neorientat, A matricea sa de
adiacenŃă şi L matricea lanŃurilor lui G . Atunci are loc relaŃia:
n −1
L = ∑ Ak
k =1

calculele fiind realizate folosind operaŃiile + şi i .

48
DemonstraŃie. Să considerăm întâi că în G avem muchiile {x , x }
i j şi

{x , x } . Atunci în matricea
j k A avem aij = a ji = 1 şi a jk = akj = 1 . În matricea
A = B = (b )
2
avem
ij 1≤i , j ≤ n

n n n
bik = ∑ ais i ask = aij i a jk + ∑ ais i ask = 1 + ∑ ais i ask = 1
s =1 s =1 s =1
s≠ j s≠ j

şi, de asemenea, avem un lanŃ de la xi la xk şi anume lanŃul  xi , x j , xk  .

( )
Similar se poate arăta că dacă în A p = B′ = bij′
avem un lanŃ de la
1≤i , j ≤ n

x la x (deci b′ = 1 ) şi în G avem muchia { x , x } (deci a = 1 ) (ceea ce nu


i j ij j k jk

produce un lanŃ de la x la x ), atunci în A = B′′ = ( b′′ )


i k
p +1
avem b′′ = 1 . ij 1≤i , j ≤ n ik

Folosind acum teorema inducŃiei complete rezultă că în


A n −1
= C = ( cij ) avem cij = 1 dacă şi numai dacă în G există un lanŃ de la
1≤i , j ≤ j

xi la x j şi astfel cij = lij . Acest lucru implică L = An −1 .



Exemplul 3. Pentru graful G = ( X , U ) din figura de mai jos, să calculăm
matricea lanŃurilor folosind formula din propoziŃia 1. Avem n = X = 5

1 5 4

3 2
Matricea de adiacenŃă a grafului este
0 1 0 1 0

0 0 1 0 0
0 0 0 1 A = 1

1 0 0 0 0
0 1 0 0  1

Trebuie să calculăm L = A4 . Pentru A2 = A i A avem:

49
0 0 1 0 1 0 0 1 0 1 1 0 1 0 1
     
0 0 0 1 0 0 0 0 1 0 0 1 0 0 0
A = 1 0 0 0
2
1 i 1 0 0 0 1 = 1 0 1 0 1 ,
     
0 1 0 0 0 0 1 0 0 0 0 0 0 1 0
1 0 1 0 0  1 0 1 0 0   1 0 1 0 1 
 
Pentru A = A2 i A avem
3

1 0 1 0 1 0 0 1 0 1 1 0 1 0 1
     
0 1 0 0 0 0 0 0 1 0  0 0 0 1 0
A = 1 0 1 0
3
1 i 1 0 0 0 1 = 1 0 1 0 1
     
0 0 0 1 0 0 1 0 0 0  0 1 0 0 0
1 0 1 0 1  1 0 1 0 0   1 0 1 0 1 
 
4 3
şi A = A i A conduce la
1 0 1 0 1 0 0 1 0 1 1 0 1 0 1
     
0 0 0 1 0 0 0 0 1 0 0 1 0 0 0
A = 1 0 1 0
4
1 i 1 0 0 0 1 = 1 0 1 0 1
     
0 1 0 0 0 0 1 0 0 0 0 0 0 1 0
1 0 1 0 1  1 0 1 0 0   1 0 1 0 1 
 
Adunând cele 4 matrici avem
1 0 1 0 1
 
0 1 0 1 0
L = 1 0 1 0 1
 
0 1 0 1 0
1 0 1 0 1 


PropoziŃia 2. Fie G = ( X , U ) un graf neorientat şi L matricea lanŃurilor
sale. Graful G este conex dacă şi numai dacă lij = 1 , pentru orice 1 ≤ i, j ≤ n .
DemonstraŃie. G este conex dacă şi numai dacă pentru orice xi , x j ∈ X
există un lanŃ de la xi la x j , dacă şi numai dacă lij = 1 , pentru orice 1 ≤ i, j ≤ n .

ObservaŃie. Dacă G = ( X , U ) este un graf neorientat neconex, având k
componente conexe, atunci putem face o partiŃie a lui X bazată pe componentele
conexe, X = X 1 ∪ X 2 ∪ ... ∪ X k , X i ∩ X j = ∅ pentru orice 1 ≤ i, j ≤ k , i ≠ j ,
50
cu proprietatea că fiecare X i reprezintă nodurile unei componente conexe a lui G .
În plus, există o permutare a nodurilor din X astfel încât indicii nodurilor dintr-o
componentă conexă să fie consecutivi.
DefiniŃie. Fie A o matrice pătrată de ordin n . Dacă
 Bi1 0 ⋯ 0 
 
 0 Bi2 ⋯ 0 
A= 
 ⋮ ⋮ ⋱ ⋮ 
 0 0 ⋯ Bik 
 
unde 0 reprezintă matrici cu toate elementele egale cu zero, B j este o matrice
pătrată de ordin j cu o proprietate dată şi i1 + i2 + ... + ik = n , spunem că A este
matrice bloc diagonală.

PropoziŃia 3. Există o permutare a numerotării nodurilor unui graf
neorientat G = ( X , U ) astfel încât matricea lanŃurilor să fie de formă bloc
diagonală cu blocurile formate doar cu valoarea 1. Blocurile diagonale corespund
componentelor conexe ale grafului.
DemonstraŃie. Este suficient să arătăm că propoziŃia are loc pentru un graf
neconex cu două componente conexe, deoarece pentru un graf conex se foloseşte
propoziŃia 2 pentru a scrie L = Bn , cu X = n şi Bn are toate elementele egale
cu 1.
Datorită observaŃiei făcute mai sus, există o permutare a numerotării
{ } {
indicilor astfel încât X 1 = x1 ,..., xi , X 2 = xi +1 ,..., xi
1 1 2
} cu i1 + i2 = n şi

X = X 1 ∪ X 2 , X 1 ∩ X 2 = ∅ şi subgrafurile de noduri X 1 = x1 ,..., xi1 { } şi

{ }
X 2 = xi1 +1 ,..., xi2 corespund componentelor conexe ale lui G .
Deoarece subgraful G1 = ( X 1 , V1 ) corespunzător lui X 1 este conex, avem
LG1 = Bi1 . Similar, pentru subgraful G2 = ( X 2 ,V2 ) avem LG2 = Bi2 . Cum nu
există muchii între nodurile din X 1 şi nodurile din X 2 , rezultă că lij = 0 pentru
orice 1 ≤ i ≤ i1 şi orice i1 + 1 ≤ j ≤ i2 .
Astfel obŃinem
 Bi1 0 
LG =  .
 0 Bi2 

51
Exemplul 4. Considerăm graful G = ( X , U ) din exemplul 3 pentru care
am calculat matricea lanŃurilor:
1 0 1 0 1
 
0 1 0 1 0
LG =  1 0 1 0 1
 
0 1 0 1 0
1 0 1 0 1 

Cel mai simplu mod de a determina permutarea σ care aplicată lui X să
conducă la un graf pentru care matricea lanŃurilor să fie în format matrice bloc
diagonală este de a realiza o renumerotare a vârfurilor astfel încât vârfurile dintr-o
componentă conexă să fie numerotate cu valori consecutice.
Plecând de la graful G , prin renumerotarea vârfurilor putem obŃine graful
H = ( X ,V ) :

4 5 1

3 2

1 2 3 4 5
pentru care permutarea aplicată este σ =  . (Deoarece
 4 2 3 1 5
σ : X → X este o permutare, deci o funcŃie bijectivă şi se păstrează muchiile,
rezultă că G ≅ H , adică cele două grafuri sunt izomorfe)..
Prin aplicarea permutării la liniile şi coloanele matricii LG se obŃine
matricea
1 1 0 0 0
 
1 1 0 0 0
LH =  0 0 1 1 1
 
0 0 1 1 1
0 0 1 1 1 

care este o matrice bloc diagonală, în care
 1 1
B1 =  
 1 1
şi

52
 1 1 1
 
B2 = 1 1 1 .
1 1 1
 

ObservaŃie. Permutarea care transformă un graf într-un graf izomorf cu
matricea lanŃurilor bloc diagonală nu este unică. Acest lucru reiese din exemplul
următor.
Exemplul 5. Considerăm tot graful din exemplul 3. De această dată
transformăm graful în graful J = ( X , W ) din imaginea:

1 2 4

3 5

1 2 3 4 5 
pentru care permutarea aplicată vârfurilor este π =  .
1 5 3 4 2 
Matrica lanŃurilor pentru acest graf este

1 1 1 0 0
 
1 1 1 0 0
LJ =  1 1 1 0 0 .
 
0 0 0 1 1
0 0 0 1 1 

Care are ca blocuri diagonate pe
 1 1 1
 
B1 =  1 1 1
 1 1 1
 
şi
1 1
B2 =  .
1 1
Se poate observa că matricile LH şi LJ sunt formate din aceleaşi blocuri
diagonale, dar scrise în altă ordine.

53
Prin generalizare putem considera că matricea de adiacenŃă este şi matricea
lanŃurilor de lungime 1. PropoziŃia 2 ne dă modul de determinare a matricii tuturor
lanŃurilor. Din demonstraŃia propoziŃiei 2 putem trage concluzia că Ak dă matricea
lanŃurilor elementare de lungime exact k , pe care o putem nota prin L(G ) şi relaŃia
k

L(Gk ) = Ak este valabilă pentru orice k ∈ ℕ dacă notăm A0 = 0 , matricea cu toate


elementele egale cu zero.
3.2. Matrici asociate grafurilor orientate

DefiniŃie. Fie G = ( X ,U ) un graf orientat cu X =n şi


X = { x1 , x2 ,..., xn } . Matricea AG = ( aij )1≤i , j ≤ n ∈ M n ({0,1}) dată prin
1
 pentru ( xi , x j ) ∈ U
aij =  , orice 1 ≤ i, j ≤ n
0 pentru ( xi , x j ) ∉ U
se numeşte matricea de adiacenŃă a grafului G .

După cum se poate observa, noŃiunea este similară celei de la grafurile


neorientate. De această dată, însă, matricea de adiacenŃă asociată unui graf nu mai
este o matrice simetrică. De asemenea, matricea de adiacenŃă poate conŃine valori 1
pe diagonala principală, dacă graful orientat conŃine arce de forma ( x, x ) ∈ U
(bucle).
DefiniŃie. Fie G = ( X ,U ) un graf orientat cu X =n şi
X = { x1 , x2 ,..., xn } . Matricea C = ( cij )1≤i , j ≤ n ∈ M 2 ({−1, 0,1} ) dată prin
1 pentru ( xi , x j ) ∈ U


{ }
cij = 0 pentru ( xi , x j ) , ( x j , xi ) ∩ U = ∅ , orice 1 ≤ i, j ≤ n

−1 pentru ( xi , x j ) ∉ U si ( x j , xi ) ∈ U
se numeşte matricea de conectare a grafului G .

Exemplul 6. Fie graful G = ( X , U ) pentru care X = {1, 2, 3, 4,5} şi
U = {(1, 2 ) , ( 2, 4 ) , ( 3,1) , ( 3, 2 ) , ( 3, 4 ) , ( 5, 2 ) , ( 5, 5)} .
Graful considerat are următoarea reprezentare:

54
1
2

3 4
Matricea de adiacenŃă a grafului este
0 0 1 0 0
 
0 0 1 0 1
AG =  1 0 0 0 0 ,
 
0 1 1 0 0
0 0 0 0 1 

în timp ce matricea de comutare este
0 0 1 0 0
 
0 0 1 −1 1 
CG =  1 −1 0 −1 0  .
 
0 1 1 0 0
 0 −1 0 0 1 


DefiniŃie. Fie G = ( X , U ) un graf orientat cu X = n şi presupunem că
X = { x 1 , x2 ,..., xn } . Matricea LG = ( lij )1≤i , j ≤ n ∈ M n ({0,1} ) , definită prin
1 ∃  x i = y0 , y1 ,..., yr = x j  lant in G
lij =  , orice 1 ≤ i, j ≤ n
0 altfel
se numeşte matrica lanŃurilor grafului G .

Matricea lanŃurilor se defineşte, în mod similar, cu cea dată pentru grafurile
neorientate şi este o matrice simetrică..
Pentru orice matrice reală A = aij ( ) 1≤i ≤ n putem defini matricea valorilor
1≤ j ≤ m

absolute ale lui A , ca fiind matricea A• = aij ( ) 1≤ i ≤ n


1≤ j ≤ m
. Cu această notaŃie putem

scrie imediat următorul rezultat.

55
PropoziŃia 4. Fie G = ( X , U ) un graf orientat, C matricea sa de
conectare şi L matricea lanŃurilor lui G . Atunci are loc relaŃia:
n −1
L = ∑ C •k
k =1

calculele fiind realizate prin operaŃiile + şi i .


DemonstraŃie. Considerăm graful neorientat G ′ = ( X , V ) în care

{ x, y} ∈V dacă şi numai dacă {( x , x ) , ( x , x )} ∩ U ≠ ∅ (graful neorientat care


i j j i

se obŃine din G prin eliminarea orientării arcelor).


Dacă AG este matricea de adiacenŃă a grafului neorientat G ′ , atunci se
observă uşor că
A• = G′ .
n −1

∑( A )
k
Din propoziŃia 1 avem L = G′ •
şi folosind relaŃia anterioară avem
k =1
n −1
L = ∑ C •k
k =1

PropoziŃia 4 ne indică faptul că propoziŃiile 2 şi 3 enunŃate pentru grafuri
neorientate îşi păstrează enunŃul şi în condiŃiile grafurilor orientate, folosind
noŃiunile de graf conex şi componentă conexă date pentru grafurile orientate.
Exemplul 7. Să considerăm graful din exemplul 6. Pentru determinarea
matricii lanŃurilor avem de scris matricea C • care se obŃine din matricea CG ,
considerând toate elementele în modul. Se obŃine astfe matricea
00 1 0 0
 
00 1 1 1
C• =  1
1 0 1 0 .
 
01 1 0 0
01 0 0 1 

Ultima matrice corespunde grafului neorientat G ′ = ( X , V ) , unde ( x, y ) ∈ V dacă
şi numai dacă {( x, y ) , ( y, x )} ∩ U ≠ ∅ . Imaginea lui G′ este

56
1
2

3 4
Graful G ′ , ca şi graful G , este conex şi astfel matricea lanŃurilor în cele
două grafuri va avea toate elementele egale cu 1, deci
1 1 1 1 1
 
1 1 1 1 1
LG = LG ′ =  1 1 1 1 1 .
 
1 1 1 1 1
1 1 1 1 1


DefiniŃie. Fie G = ( X , U ) un graf orientat cu X = n şi presupunem că
X = { x 1 , x2 ,..., xn } . Matricea DG = ( dij )1≤i , j ≤ n ∈ M n ({0,1}) , definită prin

1 ∃ ( x i = y0 , y1 ,..., yr = x j ) drum in G


d ij =  , orice 1 ≤ i, j ≤ n
0 altfel
se numeşte matricea lanŃurilor grafului G .

DefiniŃie. Fie G = ( X , U ) un graf orientat cu X = n şi presupunem că
X = { x 1 , x2 ,..., xn } . Matricea NDG = ( nd ij )1≤i , j ≤ n ∈ M n ( ℕ ) , definită prin nd ij
este numărul drumurilor în G de la xi la x j , orice 1 ≤ i, j ≤ n , se numeşte
matricea numărului de drumuri din graf G .

PropoziŃia 5. Fie G = ( X , U ) un graf orientat, A matricea sa de
adiacenŃă. Atunci are loc relaŃia DG = A + A2 + ... + + An (pentru calcule se
utilizează operaŃiile + şi i )..
DemonstraŃie. Presupunem că ( x , x ) , ( x , x ) ∈U
i j j k şi astfel avem

aij = 1 şi a jk = 1 . Atunci aij i a jk = 1 şi astfel

57
n
bik = aij i a jk + ∑ ail i alk = 1 ,
l =1
l≠ j

unde A2 = ( bij ) . De aici rezultă că d ik = 1 Pe de altă parte din


1≤i , j ≤ n

( x , x ) , ( x , x ) ∈U , înseamnă că putem forma drumul ( x , x , x )


i j j k i j k în G deci
există drum de la xi la xk .
Asemănător, dacă există un drum (x i = y0 , y1 ,..., yk = x j ) în G de
lungime 1, deci în Ak = bij′ ( ) 1≤ i , j ≤ n
avem bij′ = 1 , şi ( x , x ) ∈ U , deci
j k a jk = 1 ,
atunci, pe de o parte, se formează în G drumul xi = y0 , y1 ,..., yk = x j , xk , iar, ( )
pe de altă parte, prin calcul similar celui din cazul A2 , pentru Ak +1 = ( b′′ )
ij 1≤ i , j ≤ n

obŃinem bik′′ = 1 .

Corolar. În condiŃiile propoziŃiei 5 avem
DG( k ) = Ak .
Calculele în această relaŃie se fac prin operaŃiile + şi i . Am notat
( 5)
cu DG = d ij ( ) (k )
1≤ i , j ≤ n
matricea drumurilor din G de lungime k , definită prin

1 ∃ ( x i = y0 , y1 ,..., yk = x j ) drum in G


d ij( ) =  , orice 1 ≤ i, j ≤ n .
k

0 altfel
DemonstraŃie. RelaŃia rezultă direct din demonstraŃia propoziŃiei 5.

Exemplul 8. Considerăm din nou graful din exemplul 7 pentru care am
scris matricea de adiacenŃă:
0 0 1 0 0
 
0 0 1 0 1
AG =  1 0 0 0 0
 
0 1 1 0 0
0 0 0 0 1 

Pentru A2 = A i A obŃinem

58
0 0 1 0 0  0 0 1 0 0 1 0 0 0 0
    
0 0 1 0 1  0 0 1 0 1 1 0 0 0 1
A = 1
2
0 0 0 0  1 0 0 0 0 = 0 0 1 0 0
    
0 1 1 0 0  0 1 1 0 0 1 0 1 0 1
0 0 0 0 1   0 0 0 0 1   0 0 0 0 1 

Din calculul pentru A3 = A2 i A avem
1 0 0 0 00 0 1 0 0 0 0 1 0 0
    
1 0 0 0 10 0 1 0 1 0 0 1 0 1
A3 =  0 0 1 0 0   1 0 0 0 0 = 1 0 0 0 0
    
1 0 1 0 10 1 1 0 0 1 0 1 0 1
0 0 0 0 10 0 0 0 1   0 0 0 0 1 
 
4 3
Pentru A = A i A rezultă matricea
 0 0 1 0 0  0 0 1 0 0 1 0 0 0 0
    
 0 0 1 0 1  0 0 1 0 1 1 0 0 0 1
A4 =  1 0 0 0 0  1 0 0 0 0 = 0 0 1 0 0
    
 1 0 1 0 1  0 1 1 0 0 1 0 1 0 1
 0 0 0 0 1  0 0 0 0 1   0 0 0 0 1 
 
Prin sumare rezultă matricea
1 0 1 0 0
 
1 0 1 0 1
DG =  1 0 1 0 0
 
1 1 1 0 1
0 0 0 0 1 


PropoziŃia 6. Fie G = ( X , U ) un graf orientat, A matricea sa de
adiacenŃă. Atunci are loc relaŃia
NDG = A + A2 + ... + An
(unde operaŃiile sunt cele uzuale, definite pe ℕ ).
DemonstraŃie. Se procedează în acelaşi mod ca în demonstraŃia
propoziŃiei 5, plecându-se de la presupunerea iniŃială că A conŃine de fapt numărul
de drumuri de lungime 1 din G .

59
Corolar. În condiŃiile din propoziŃia 6 avem
NDG( k ) = Ak .
Calculele se fac prin operaŃiile uzuale definite pe mulŃimea numerelor naturale
5
(
ℕ . Am notat NDG( ) = nd ij(
k)
)
1≤ i , j ≤ n
matricea numărului de drumuri de lungime k
(k )
din G , unde nd ij este numărul de drumuri de lungime exact k având
extremitatea iniŃială xi şi extremitatea finală x j .
DemonstraŃie. Proprietatea rezultă imediat din detalierea demonstraŃiei
propoziŃiei 6.

Exemplul 8. Considerăm din nou graful din exemplul 7 pentru care am
scris matricea de adiacenŃă:
0 0 1 0 0
 
0 0 1 0 1
AG =  1 0 0 0 0
 
0 1 1 0 0
0 0 0 0 1 

Pentru A2 = AA obŃinem
0 0 1 0 0  0 0 1 0 0 1 0 0 0 0
    
0 0 1 0 1  0 0 1 0 1 1 0 0 0 1
A = 1
2
0 0 0 0  1 0 0 0 0 = 0 0 1 0 0
    
0 1 1 0 0  0 1 1 0 0 1 0 1 0 1
0 0 0 0 1   0 0 0 0 1   0 0 0 0 1 

Din calculul pentru A3 = A2 A avem
1 0 0 0 00 0 1 0 0 0 0 1 0 0
    
1 0 0 0 10 0 1 0 1 0 0 1 0 1
A3 =  0 0 1 0 0   1 0 0 0 0 = 1 0 0 0 0
    
1 0 1 0 10 1 1 0 0 1 0 1 0 1
0 0 0 0 10 0 0 0 1   0 0 0 0 1 
 
4 3
Pentru A = A A rezultă matricea

60
0 0 1 0 0  0 0 1 0 0 1 0 0 0 0
    
0 0 1 0 1  0 0 1 0 1 1 0 0 0 1
A = 1
4
0 0 0 0  1 0 0 0 0 = 0 0 1 0 0
    
1 0 1 0 1  0 1 1 0 0 1 0 1 0 1
0  0
0 0 0 1  0 0 0 1   0 0 0 0 1 

Prin sumare rezultă matricea
2 0 2 0 0
 
2 0 2 0 4
NDG =  2 0 2 0 0
 
3 1 4 0 3
0 0 0 0 4 


PropoziŃia 7. Fie G = ( X , U ) un graf orientat cu DG = dij ( ) 1≤i , j ≤ n

matricea drumurilor şi NDG = ndij ( )1≤i , j ≤ n


matricea numărului de drumuri.
Atunci pentru orice 1 ≤ i, j ≤ n , d ij = 1 dacă şi numai dacă nd ij ≠ 0 .
DemonstraŃie. Rezultatul este imediat, deoarece este clar că d ij = 1 dacă şi
numai dacă există cel puŃin un drum de la xi la x j şi astfel nd ij ≠ 0 .

Trebuie să observăm faptul că discuŃia relativă la conexitate pentru grafuri
neorientate şi legătura acestei proprietăŃi cu matricea lanŃurilor are corespondent şi
pentru grafurile orientate când paralela se face între proprietatea de tare conexitate
şi matricea drumurilor. Din această cauză următoarele rezultate sunt date fără
demonstraŃii.
PropoziŃia 8. Fie G = ( X , U ) un graf orientat cu DG matricea
drumurilor. G este tare conex dacă şi numai dacă DG are toate elementele egale
cu 1.

PropoziŃia 9. Există o permutare a numerotării nodurilor unui graf
orientat G = ( X , U ) astfel încât matricea drumurilor să fie de formă bloc
diagonală cu blocurile formate doar cu valoarea 1. Blocurile diagonale corespund
componentelor tari conexe ale grafului.

61
IV. ARBORI
4.1. Definire şi proprietăŃi

DefiniŃie. Numim arbore orice graf neorientat conex şi fără cicluri.



Teorema 1. Fie G = ( X , U ) un graf neorientat. Următoarele afirmaŃii
sunt echivalente:
1. G este arbore.
2. G este aciclic maximal.
3. G este convex minimal.
DemonstraŃie
1⇒ 2
Din definiŃie rezultă că G este aciclic. În plus, deoarece G este şi conex,
conform propoziŃie 2 din capitolul 2, rezultă că U ≥ X − 1 .
Presupunem că adăugăm o muchie nouă. Astfel, dacă { x, y} ∉U ,
(
considerăm graful H = X , U ∪ {{ x, y}}) . Acest graf are acelaşi număr de vârfuri
şi cu 1 mai multe muchii, astfel încât are loc relaŃia U ∪ {{ x, y}} = X . Folosind
propoziŃia 4 din capitolul 2 rezultă că H este un graf ciclic.
Deoarece prin adăugarea oricărei muchii noi la graful G aciclic se obŃine
un graf ciclic, rezultă că G este maximal faŃă de proprietatea de a fi aciclic.
1⇒ 3
Din definiŃie rezultă că G este conex.
Considerăm o muchie oarecare { x, y} ∈U şi graful

( )
H = X , U \ {{ x, y}} pe care îl presupunem conex. Atunci există un lanŃ de
extremităŃi x şi y , L =  x = x0 ,..., x y = y  în H .
Deoarece { x, y} ∈U , considerând L′ =  L, { y, x} în G , avem de fapt
L′ = [ x = x0 ,..., xr = y, x ] , care, având acelaşi vârf la extremităŃi, este un ciclu
în G . ContradicŃie ( G este aciclic).

62
2 ⇒1
Avem ipoteza că G este un graf aciclic maximal. Considerăm că G nu
este conex şi astfel U < X − 1 .
Atunci există x, y ∈ X fără a putea fi conectate printr-un lanŃ. Astfel
pentru a conecta x şi y trebuie să adăugăm muchia { x, y} ∉ U şi astfel să putem
obŃine eventual un graf conex.
G fiind aciclic maximal, rezultă că adăugând o muchie graful devine ciclic
şi astfel obŃinem U + 1 ≥ X , sau altfel scris U ≥ X − 1 . ContradicŃie.
G fiind conex şi aciclic, rezultă că G este arbore.
3⇒1
Avem ipoteza că G este un graf conex minimal. Considerăm că G nu este
aciclic. Atunci există L = [ x = x0 ,..., xr = y, x ] un ciclu în G . Considerăm graful

(
G ′ = X , U \ {{ x, y}} . )
Fie a, b ∈ X . Deoarece G este conex rezultă că a şi b sunt conectate
printr-un lanŃ L′ =  y0 ,..., y p  în G .
Dacă muchia { x, y} nu apare în L′ , atunci L′ este lanŃ şi în G ′ , deci a
şi b sunt conectate în G ′ . Dacă { x, y} apare în L′ atunci pentru L′ avem
explicit
L′ =  y0 ,..., yi = x, y = yi +1 , y p  .
Considerăm lanŃul
L′ =  y0 ,..., yi = x = x0 ,..., xr = y = yi +1 , y p 
care este de extremităŃi a şi b şi este un lanŃ în G ′ , deci a şi b sunt conectate
în G ′ .
De mai sus rezultă că G ′ care se obŃine prin eliminarea unei muchii din G
este conex, şi astfel G nu este minimal la proprietatea de conexitate. ContradicŃie.
Am obŃinut astfel că G este aciclic şi fiind conex, rezultă că G este
arbore.

Corolar. Dacă G = ( X , U ) este arbore, atunci U = X − 1 .
DemonstraŃie. G fiind arbore este aciclic maximal. Cum un graf ciclic are
U ≥ X , rezultă că pentru un graf aciclic avem U < X . Din maximalitatea lui
G la proprietatea de a nu conŃine cicluri, rezultă că numărul de muchii este cel mai
mare care îndeplineşte relaŃia U < X şi astfel U = X − 1 .

63
Exemplul 1. Considerăm graful G = ( X , U ) , unde X = {1, 2,...,15}
(deci X = 15 ) şi care are reprezentarea

2 3 4

5 6 7 8 9

10 11 12 13 14 15
Din reprezentarea grafică se poate vedea că acest graf este conex şi că nu
conŃine cicluri şi astfel graful este un arbore. Avem de asemenea U = 14 şi astfel
este verificată relaŃia U = X − 1 .
Dacă la acest graf adăugăm o muchie, de exemplu {3,8} se obŃine
reprezentarea

2 3 4

5 6 7 8 9

10 11 12 13 14 15

64
se observă că se formează ciclul C = {1,3,8, 4,1} , astfel că noul graf este ciclic,
deci nu mai este un arbore.
Dacă se elimină o muchie, de exemplu {1, 4} , atunci se obŃine
reprezentarea

2 3 4

5 6 7 8 9

10 11 12 13 14 15
Se vede că am obŃinut astfel un graf neconex (de componente conexe
C1 = {1, 2,3,5, 6,10} şi C2 = {4, 7,8,9,11,12,13,14,15} şi deci graful nou nu este
arbore.

PropoziŃie 1. Dacă G = ( X , U ) este un arbore, atunci G are cel puŃin
două vârfuri terminale.
DemonstraŃie. Din propoziŃia 2, capitolul 1 avem că numărul nodurilor cu
gradul impar este par şi astfel trebuie să arătăm că dacă G este arbore atunci
conŃine cel puŃin un nod terminal.
Presupunem că G nu conŃine niciun nod terminal. Astfel, oricare ar fi
x ∈ X , d ( x) ≥ 2 .
Dacă x0 ∈ X , cum d ( x0 ) ≥ 2 , există x1 , x1′ ∈ X , astfel încât
{ x1 , x0 } , { x0 , x1′} ∈U , în plus, x0 , x1 şi x1′ sunt distincte două câte două, pentru
că altfel ar apare un ciclu. Putem forma astfel lanŃul elementar L1 = [ x1′, x0 , x1 ] .

65
Deoarece d ( x1 ) ≥ 2 şi { x0 , x1} ∈U , rezultă că există { x1 , x2 } ∈U . În
plus, trebuie să avem x2 ∉ { x1′, x0 , x1} , deoarece, în caz contrar, se formează un
ciclu. Astfel, putem forma lanŃul L2 = [ x1′, x0 , x1 , x2 ] şi procesul poate continua la
infinit, deci X este infinită. ContradicŃie.

4.2. Arbori parŃiali

DefiniŃie. Fie G = ( X , U ) un graf neorientat şi H = ( X , V ) un graf


parŃial al lui G . Dacă H este arbore spunem că H este un arbore parŃial (de
acoperire sau de traversare) al lui G .

ObservaŃie. Dacă un graf neorientat G = ( X , U ) are arbore parŃial, acesta
nu este unic.
Exemplul 2. Fie graful G = ( X , U ) cu X = 10 care are reprezentarea

1
6

2 3
7

4 5

10 8 9

şi astfel avem
U = {{1, 2} , {1, 4} , {2,3} , {2, 4} , {2,10} , {3,5} , {4, 6} ,
{4,8} , {4,9} , {5, 6} , {5, 7} , {5,10} ,{6, 7} ,{7, 9} , {9,10}}
Putem alege graful parŃial H1 = ( X , V1 ) , unde
V1 = {{1, 2} , {1, 4} , {2,3} , {3,5} , {4, 6} , {4,8} , {4,9} , {6, 7} , {9,10}}
Se poate arăta că graful H1 este un graf conex şi fără cicluri deci este un
arbore. Atunci este un alt arbore parŃial al grafului G .

66
Graful H1 are reprezentarea

1
6

2 3
7

4 5

10 8 9

Ca graf parŃial al grafului G se poate face şi alegerea H 2 = ( X , V2 ) , unde


V2 = {{1, 2} , {2,3} , {2, 4} , {2,10} , {4, 6} , {4,8} , {4,9} , {5, 6} , {6, 7}}
Şi pentru acest graf se poate demonstra că este conex şi aciclic şi astfel şi
H 2 este graf arbore parŃial pentru graful G .
Graful H 2 are reprezentarea

1
6

2 3
7

4 5

10 8 9

Se poate vedea că grafurile H1 şi H 2 sunt diferite şi acest lucru justifică


observaŃia făcută anterior. Se poate arăta că cei doi arbori parŃiali nu sunt nici
izomorfi.

67
DefiniŃie. Fie G = ( X , U ) un graf neorientat şi A = ( X , V ) un arbore
parŃial al lui G . Numim coarde ale lui H elementele mulŃimii U \ V , iar numărul
U \ V se numeşte numărul ciclomatic al lui G .

Exemplu 3. Pentru exemplul 2 se poate constata că U = 15 şi
V1 = V2 = 9 . Cum V1 ⊂ U , rezultă că U \ V1 = U − V1 = 15 − 9 = 6 şi deci,
numărul ciclomatic al grafului G este egal cu 6

Teorema 2. Fie G = ( X , U ) un graf neorientat. G este conex dacă şi
numai dacă G are arbore parŃial.
DemonstraŃie

Considerăm că G este conex. Dacă G este conex minimal, atunci G este
arbore şi astfel H = G este arbore parŃial al lui G .
Dacă G nu este minimal la proprietatea de conexitate, atunci putem
elimina succesiv muchii astfel încât să rămână valabilă proprietatea de conexitate.
Presupunem că obŃinem graful parŃial H = ( X , V ) conex şi astfel încât
dacă eliminăm o muchie din V , atunci graful obŃinut nu mai este conex. Rezultă
astfel că H este maximal la proprietatea de conexitate şi astfel H este un arbore.
Cum H se obŃine din G prin eliminarea de muchii, rezultă că H este graf parŃial
al lui G şi astfel H este arbore parŃial al lui G .

Fie H un arbore parŃial al lui G . H fiind arbore este graf conex.
Fie x, y ∈ X arbitrare. H fiind conex, rezultă că există
L =  m1 , m2 ,..., m p  un lanŃ în H de extremităŃi x şi y , unde pentru orice
i = 1, 2,..., p , mi ∈ V .
Cum V ⊂ U , rezultă că pentru orice i = 1, 2,..., p , mi ∈ U şi astfel
L =  m1 , m2 ,..., m p  este un lanŃ în G de extremităŃi x şi y . Astfel rezultă că G
este un graf conex.

DemonstraŃia de mai sus permite considerarea unui algoritm care să
conducă la determinarea unui arbore parŃial pentru un graf conex.

68
Algoritm 1
1. Fie V = U .
2. Dacă graful H = ( X , V ) nu conŃine cicluri, atunci algoritmul se termină şi
H este un arborele parŃial al lui G , altfel se continuă.
3. Se consideră un ciclu C =  e1 , e2 ,..., e p  în H

{ }
4. Se alege e ∈ e1 , e2 ,..., e p . Considerăm V = V \ {e} şi mergem la 2.

Exemplul 4. Considerăm din nou graful G = ( X , U ) din exemplul 2 şi
facem iniŃializarea
V = U = {{1, 2} , {1, 4} , {2,3} , {2, 4} , {2,10} , {3,5} , {4, 6} ,
{4,8} , {4,9} , {5, 6} , {5, 7} , {5,10} , {6, 7} ,{7, 9} , {9,10}}
Un ciclu din graful ( X , V ) este {1, 2, 4,1} . Pentru a elimina acest ciclu
putem presupune că eliminăm din V muchia {1, 2} şi se obŃine
V = {{1, 4} , {2,3} , {2, 4} , {2,10} , {3, 5} , {4, 6} , {4,8} ,
{4, 9} , {5, 6} , {5, 7} , {5,10} , {6, 7} , {7,9} , {9,10}}
În graful obŃinut se formează ciclul {2,3,5,10, 2} şi pentru a-l elimina
putem considera muchia {2,10} . Rezultatul eliminării ei este
V = {{1, 4} , {2,3} , {2, 4} , {3, 5} , {4, 6} , {4,8} , {4, 9} , {5, 6} , {5, 7} ,
{5,10} , {6, 7} , {7, 9} , {9,10}}
Tot pornind din vârful 2 se formează ciclul {2, 4, 6,5,3, 2} şi pentru
eliminarea lui folosim muchia {2, 4} , obŃinând
V = {{1, 4} , {2,3} , {3,5} , {4, 6} , {4,8} , {4, 9} , {5, 6} , {5, 7} ,
{5,10} , {6, 7} , {7, 9} , {9,10}}
În ultimul graf ( X , V ) se formează ciclul {4, 6, 7,9, 4} şi eliminăm
muchia {7,9} pentru a ajunge la
V = {{1, 4} , {2,3} , {3,5} , {4, 6} , {4,8} , {4,9} , {5, 6} , {5, 7} , {5,10} , {6, 7} , {9,10}}
Detectăm în continuare ciclul {4,9,10,5, 6, 4} şi îl eliminăm prin
excluderea muchiei {9,10} având ca rezultat
V = {{1, 4} , {2,3} , {3,5} , {4, 6} , {4,8} , {4,9} , {5, 6} , {5, 7} , {5,10} , {6, 7}}

69
Ultimul graf ( X ,V ) obŃinut conŃine ciclul {5, 6, 7,5} . Pentru a elimina
acest ciclu putem şterge muchia {6, 7} şi ajungem la
V = {{1, 4} , {2,3} , {3,5} , {4, 6} , {4,8} , {4,9} , {5, 6} , {5, 7} , {5,10}}
Graful obŃinut nu mai conŃine cicluri şi astfel algoritmul 1 pe care l-am
aplicat mai sus se opreşte, graful ( X , V ) fiind un arbore parŃial al grafului G .
Acest lucru este adevărat deoarece pe de o parte ( X , V ) este graf parŃial al lui G
şi, pe de altă parte, deoarece V = 9 = X − 1 , rezultă că ( X , V ) este un arbore.
Arborele parŃial ( X , V ) are reprezentarea

1
6

2 3
7

4 5

10 8 9


PropoziŃia 2. Fie G = ( X , U ) un graf neorientat conex. Atunci numărul
ciclomatic al lui G este U − X + 1 .
DemonstraŃie. Fie H = ( X , V ) arborele parŃial al lui G . Deoarece H
este arbore, rezultă că avem relaŃia V = X − 1 . Numărul ciclomatic al lui G este
prin definiŃie valoarea U \ V .
Din teoria mulŃimilor ştim că dacă V ⊂ U , atunci U \ V = U − V .
Înlocuind valoarea pentru V , pentru numărul ciclomatic al lui G obŃinem
U \ V = U − V = U − ( X − 1) = U − V + 1 .

70
PropoziŃia 3. Fie G = ( X , U ) un graf neorientat conex, A = ( X , V ) un
arbore parŃial al lui G şi e = { x, y} o coardă a lui A . Atunci graful
H = ( X , V ∪ {e}) conŃine exact un ciclu.
DemonstraŃie. Deoarece A este un arbore, deci este aciclic maximal şi H
se obŃine din A prin adăugarea de muchii, rezultă că H este un graf ciclic (deci
conŃine cel puŃin un ciclu)
Presupunem că H conŃine două cicluri diferite care trec prin muchia e
(dacă doar unul ar trece prin muchia e prin eliminarea acestei muchii se elimină un
singur ciclu şi astfel ar rezulta că A este ciclic, deci nu poate fi arbore).
Fie astfel C1 =  x = x0 , x1 ,..., x p = y , x  şi C2 = [ x = y0 , y1 ,..., yr = y, x ]
cele două cicluri. Putem forma ciclul
C =  x = x0 , x1 ,..., x p = y = yr ,..., y1 , y0 = x 
Care nu conŃine muchia e şi astfel este ciclu şi în A , care astfel nu este arbore.
ContradicŃie.

4.3. Algoritmul lui Kruskal

Problema arborelui parŃial de cost minim. Fie G = ( X , U ) un graf


neorientat conex, c : U → ( 0, ∞ ) o funcŃie, numită funcŃie cost a muchiilor lui G
şi H = ( X , V ) un graf parŃial al lui G . Numim costul lui H suma costurilor
tuturor muchiilor din V , adică valoarea c ( H ) = ∑ c ( u ) . Se pune problema
u∈U
determinării în G a unui graf parŃial conex de cost minim.
DefiniŃie. Fie G = ( X , U ) un graf neorientat conex, c : U → ( 0, ∞ )
funcŃia cost a muchiilor lui G şi Tcm = ( X , Vcm ) un arbore parŃial cu proprietatea
că pentru orice arbore parŃial T = ( X , V ) avem c (Tcm ) ≤ c (T ) . Atunci spunem
că Tcm este arbore parŃial de cost minim al lui G .

Teorema 3. Fie G = ( X , U ) un graf neorientat conex, c : U → ( 0, ∞ )
funcŃia cost a muchiilor lui G şi H = ( X , V ) un graf parŃial al lui G . Dacă H
este graf parŃial conex de cost minim, atunci H este arbore parŃial de cost minim.
DemonstraŃie. Presupunem că H nu este arbore parŃial, deci H nu este
arbore. Deoarece H este conex, ca H să nu fie arbore trebuie ca H să nu fie
aciclic. Astfel, există un ciclu C în H şi fie e o muchie a ciclului C .

71
( )
Considerăm graful H ′ = X , V \ {e} . Acest graf este conex, pentru că se
obŃine din H prin eliminarea unei muchii ce aparŃine unui ciclu. Din calculul
costurilor avem:
c ( H ) = ∑ c (u ) = c ( e) + ∑ c ( u ) > ∑ c ( u ) = c ( H ′)
u∈V u∈V \{e} u∈V \{e}

de unde rezultă că H nu este de cost minim. ContradicŃie.



Algoritmul 2. (Kruskal).
1. Considerăm că L ( i ) = i pentru fiecare i = 1, 2,..., X , construim M ( j ) ,
. j = 1, 2,..., U reprezentând muchiile lui G în ordinea crescătoare a
costurilor, considerăm k = 0 (pentru numărarea muchiilor selectate) şi
j = 1 (pentru parcurgerea lui M ). Fie V = ∅ .
2. Dacă k ≥ n − 1 , atunci algoritmul se opreşte, muchiile din V determină
arborele parŃial de cost minim, altfel se continuă.
3. Considerăm { p, q} = M ( j ) .
4. Dacă L ( p ) = L ( q ) , atunci punem j = j + 1 şi mergem la 3, altfel se
continuă.
5. Punem k = k + 1 şi V = V ∪ {{ p, q}} .
6. Dacă L ( p ) < L ( q ) , atunci înlocuim în L toate valorile L ( q ) prin
L ( p ) , altfel înlocuim în L toate valorile L ( p ) prin L ( q ) .
7. Punem j = j + 1 şi mergem la 2.

Exemplul 5. Fie un graf neorientat G = ( X , U ) cu X = {1, 2,3, 4,5, 6} şi
cu reprezentarea
5
1 2
1 3 4
2
3
5 4 6
3
2 4
1
3
în care valorile trecute pe muchii sunt valorile funcŃiei cost c : U → ℝ .

72
Dorim să determinăm un graf parŃial de cost minim al lui G . Pentru
aceasta vom folosi algoritmul lui Kruskal prezentat mai sus.
Conform primului pas generăm vectorul L = (1, 2,3, 4,5, 6 ) . Ordonăm
muchiile în ordine crescătoare şi ne rezultă vectorul
M = ({1,5} , {3, 6} , {2, 4} , {3,5} , {1, 6} , {2,3} , {4,5} , {3, 4} , {2, 6} , {1, 2} ) .
Punem k = 0 , j = 1 şi V = ∅
Cum k = 0 şi n − 1 = 5 nu se îndeplineşte condiŃia din pasul 2 şi intervine
prima iteraŃie a algoritmului.
Prima iteraŃie
Considerăm muchia {1,5} . Deoarece L (1) = 1 ≠ 5 = L ( 5 ) se continuă cu
pasul 4 şi trecem la k = 1 şi adăugăm muchia considerată la V care devine astfel
{
V = {1,5} ..}
Deoarece L (1) = 1 < 5 = L ( 5 ) , conform pasului 5 înlocuim toate valorile
5 prin valoarea 1 şi astfel L ajunge la forma L = (1, 2,3, 4,1, 6 ) .
Se consideră j = 2 şi terminăm prima iteraŃie şi cum k = 1 şi n − 1 = 5
reluăm cu o nouă iteraŃie.
A doua iteraŃie
Muchia a doua din M este {3, 6} şi avem L ( 3) = 3 ≠ 6 = L ( 6 ) . Astfel
ajungem la k = 2 şi adăugând muchia la V , se obŃine V = {{1,5} , {3, 6}} .
Cum L ( 3) = 3 < 6 = L ( 6 ) , prin schimbarea valorilor 6 cu 3 ajungem la
L = (1, 2,3, 4,1,3) şi iteraŃia se termină considerând j = 3 . În plus avem k = 2 şi
n − 1 = 5 astfel că vom continua.
A treia iteraŃie
Următoarea muchie considerată este {2, 4} pentru care avem
L ( 2) = 2 ≠ 4 = L ( 4) şi ajungem la configuraŃia k =3 şi
V = {{1,5} , {3, 6} , {2, 4}} .
Deoarece L ( 2 ) = 2 < 4 = L ( 4 ) prin schimbarea valorilor se obŃine
L = (1, 2,3, 2,1,3) şi după ce facem j = 4 vom continua cu o nouă iteraŃie
deoarece k = 3 şi n − 1 = 5 .
A patra iteraŃie
Luăm muchia {3,5} şi avem L ( 3) = 3 ≠ 1 = L ( 5 ) ceea ce generează nouă
structură k = 4 şi V = {{1,5} ,{3, 6} , {2, 4} , {3,5}} .

73
Acum avem L ( 3) = 3 > 1 = L ( 5 ) astfel că se înlocuiesc toate apariŃiile lui
3 prin valoarea 1 şi obŃinem L = (1, 2,1, 2,1,1) şi după ce ajungem la j = 5 vom
trece la următoarea iteraŃie deoarece k = 4 şi n − 1 = 5 .
A cincea iteraŃie
Noua muchie considerată este {1, 6} pentru care L (1) = 1 = L ( 6 ) astfel că
face j = 6 şi luăm o nouă muchie, {2,3} . Pentru aceasta L ( 2 ) = 2 ≠ 1 = L ( 3) şi
ca urmare vom ajunge la situaŃia k =5 şi
V = {{1,5} , {3, 6} , {2, 4} , {3,5} , {2,3}} .
RelaŃia exactă relativă la valorile din L este L ( 2 ) = 2 > 1 = L ( 3) şi astfel
se ajunge la L = (1,1,1,1,1,1) . Facem j = 7 . La revenirea la pasul 2 cu k = 5 şi
n − 1 = 5 condiŃia este îndeplinită pe egalitate şi astfel algoritmul se opreşte. Am
obŃinut graful parŃial H = ( X , V ) care este arbore parŃial de cost minim, costul
arborelui fiind CH = 1 + 1 + 2 + 2 + 3 = 9 . Arborele parŃial de cost minim are
reprezentarea

1 2
1
2

5 4 6
3
2
1
3

4.4. ArborescenŃe

DefiniŃie. Fie G = ( X , U ) un graf orientat conex şi aciclic. Dacă există


un unic vârf x0 ∈ X cu d − ( x0 ) = 0 şi pentru orice x ∈ X , x ≠ x0 avem
d − ( x ) ≠ 0 , spunem că G este o arborescenŃă (sau arbore orientat). x0 poartă
numele de rădăcină a arborescenŃei G . Vârfurile y pentru care d + ( y ) = 0 se
numesc vârfuri terminale sau frunze.

74
DefiniŃie. Fie A = ( X , U ) o arborescenŃă cu rădăcina x0 . Pentru un vârf
x ∈ X definim nivelul nodului prin l ( x0 ,..., x ) , unde ( x0 ,..., x ) este drumul
(unic) de extremitate iniŃială x0 şi extremitate finală x .

Exemplul 6. Considerăm graful orientat conex şi aciclic G = ( X , U ) cu
10 vârfuri şi care are reprezentarea

2 3

4 5 6 7 8

9 10
Graful G este conex deoarece există lanŃuri între oricare două vârfuri. El
este aciclic. De asemenea există un unic vârf (notat 1) pentru care gradul de intrare
este zero, iar celelalte vârfuri au gradul de intrare mai mare sau egal cu 1. Astfel,
graful orientat G este o arborescenŃă.
Deoarece d − (1) = 0 , rezultă că vârful 1 este rădăcina arborescenŃei.
Observând că d + ( 6 ) = 0 rezultă că 6 este o frunză a arborescenŃei.
MulŃimea frunzelor arborescenŃei G este mulŃimea {4, 6, 7,8,9,10} .
Se poate vedea că l (1, 2 ) = l (1,3) = 1 şi astfel vârfurile 2 şi 3 se găsesc pe
acelaşi nivel, şi anume pe nivelul 1. Avem şi l (1, 2,5,9 ) = l (1, 2,5,10 ) = 3 , deci
putem spune că vârfurile 9 şi 10 se găsesc pe acelaşi nivel 3.

DefiniŃia de mai sus clasifică vârfurile arborescenŃelor în funcŃie de
distanŃa lor faŃă de rădăcină. Această clasificare are ca efect o reprezentare în care
nodurile sunt poziŃionate pe fiecare nivel, cu rădăcina arborescenŃei în partea
superioară a imaginii.

75
Pentru o arborescenŃă A = ( X , U ) , dacă ( x, y ) ∈U , spunem că
x este
părintele (tatăl) lui y şi y este fiul (descendentul direct) lui x . Dacă x, y ∈ X
şi există drumul (unic) ( x, z1 ,..., zk , y ) , spunem că y este descendentul lui x .
DefiniŃie. Fie A = ( X , U ) o arborescenŃă. Dacă pentru orice x ∈ X
avem d + ( x ) ∈ {0,1, 2} . Spunem că A este o arborescenŃă binară (arbore binar).
Dacă d + ( x ) ∈ {0, 2} , spunem că A este o arborescenŃă binară completă (arbore
binar complet).

Exemplul 7. Considerăm arborescenŃa din imaginea de mai jos

2 3

4 5 6

7 8
care are ca răvădină vârful 1. Avem
d + ( 4 ) = d + ( 5 ) = d + ( 7 ) = d + ( 8) = 0 ,
d + ( 3) = 1
şi
d + (1) = d + ( 2 ) = d + ( 6 ) = 2 ,
deci orice vârf are gradul de ieşire în mulŃimea {0,1, 2} . Rezultă că arborescenŃa
considerată este un arbore binar.
Deoarece d + ( 3) = 1 rezultă că arborele binar nu este complet.. Dacă am
adăuga vârful 9 şi arcul ( 3,9 ) se obŃine d + ( 3) = 2 şi d + ( 9 ) = 0 şi vom obŃine un
arbore binar complet. Acesta are reprezentarea

76
1

2 3

4 5 6 9

7 8

Teorema 4. Pentru orice n ∈ ℕ *
există A = ( X , U ) o arborescenŃă
binară astfel încât
{x ∈ X d + ( x ) = 0} = n
(numărul vârfurilor terminale să fie egal cu n ).
DemonstraŃie. Dacă n = 1 , atunci X = { x0 } şi U = ∅ . Astfel

{
A1 = ( X , U ) este arborescenŃă binară şi x ∈ X d + ( x ) = 0 = { x0 } = 1 . }
Dacă n = 2 , atunci fie X 1 = { x1 , x2 } . Considerăm X 2 = { x1,2 } şi
mulŃimea de arce U1 = {( x
1,2 }
, x2 ) , ( x1,2 , x2 ) . Deoarece X 2 are un element, există
o arborescenŃă binară A1 = ( X 2 , U 2 ) cu un nod terminal. Fie arborescenŃa
A2 = ( X 1 ∪ X 2 , U1 ∪ U 2 ) care este o arborescenŃă binară şi are numărul de noduri
terminale X 1 = { x1 , x2 } = 2 = n .
Presupunem că pentru orice i = 1, 2,..., k există Ai = (Yi , Vi ) arborescenŃă
binară cu numărul de vârfuri terminale egal cu i .
Considerăm n = k + 1 .
Dacă k + 1 este număr par, deci k +1 = 2 p , considerăm
X 1 = { x1 , x2 ,..., x2 p −1 , x2 p } . Fie X 2 = { x1,2 , x3,4 ,..., x2 p −1,2 p } pentru care avem
X 2 = p ≤ k . Considerăm mulŃimea de muchii

77
U1 = {( x 1,2 }
, x1 ) , ( x1,2 , x2 ) ,..., ( x2 p −1,2 p , x2 p −1 ) , ( x2 p −1,2 p , x2 p ) .
Deoarece X 2 = p ≤ k , rezultă că există Ap = (Yp , V p ) o arborescenŃă
binară care are p noduri terminale. Fie atunci Ak +1 = X 1 ∪ Yp , U1 ∪ V p care este ( )
o arborescenŃă binară care are numărul de noduri terminale egal cu
X 1 = { x1 , x2 ,..., x2 p −1 , x2 p } = 2 p = k + 1 .
Dacă k +1 este număr impar, deci k + 1 = 2q + 1 , considerăm
X 1 = { x1 , x2 ,..., x2 q −1 , x2 q , x2 q +1} . Fie X 2 = { x1,2 , x3,4 ,..., x2 q −1,2 q } pentru care
avem X 2 = q < k . Considerăm mulŃimea de muchii
U1 = {( x 1,2 }
, x1 ) , ( x1,2 , x2 ) ,..., ( x2 q −1,2 q , x2 q −1 ) , ( x2 q −1,2 q , x2 q ) .
Deoarece X 2 = q < k , pentru X 2 ∪ { xq +1} cu număr de elemente
q + 1 ≤ k există Aq +1 = (Yq +1 , Vq +1 ) o arborescenŃă binară care are q + 1 noduri
( )
terminale. Fie atunci Ak +1 = X 1 ∪ Yq +1 , U1 ∪ Vq +1 care este o arborescenŃă binară
care are numărul de noduri terminale egal cu
X 1 = { x1 , x2 ,..., x2 q −1 , x2 q , x2 q +1} = 2q + 1 = k + 1 .
Folosind teorema inducŃiei complete, obŃinem că afirmaŃia din enunŃ este
adevărată pentru orice n ∈ ℕ* .

PropoziŃia 4. Fie A = ( X , U ) o arborescenŃă binară completă în care

{x ∈ X d + ( x ) = 0} = n . Atunci U = 2 ( n − 1) .
DemonstraŃie. Pentru n = 1 , conform construcŃiei din demonstraŃia
teoremei 4, V1 = ∅ şi astfel V1 = 0 = 2 (1 − 1) . De semenea, pentru n = 2 avem
V2 = {( x1,2 }
, x2 ) , ( x1,2 , x2 ) şi astfel V2 = 2 = 2 ( 2 − 1) .
Presupunem că pentru orice i = 1, 2,..., k enunŃul propoziŃiei este adevărat
şi fie n = k + 1 .
Dacă k + 1 este număr par, deci k + 1 = 2 p , conform construcŃiei din
(
demonstraŃia teoremei 4, avem Ak +1 = X 1 ∪ Yp , U1 ∪ V p şi Ap = Yp , V p ) ( ) este o
arborescenŃă binară completă cu p vârfuri terminale şi astfel V p = 2 ( p − 1) . Din
construcŃie avem U1 = 2 p . Cum U1 ∩ V p = ∅ , rezultă că
Vk +1 = U1 ∪ V p = U1 + V p = 2 p + 2 ( p − 1) = 2 ( 2 p − 1) = 2 ( k + 1 − 1) = 2k .
78
Dacă k + 1 este număr impar, deci k + 1 = 2q + 1 , conform construcŃiei
din demonstraŃia teoremei 4, avem Ak +1 = ( X 1 ∪ Yq +1 , U1 ∪ Vq +1 ) şi
Aq +1 = (Yq +1 , Vq +1 ) este o arborescenŃă binară care are q + 1 noduri terminale şi
astfel Vq +1 = 2 ( q + 1 − 1) = 2q . Din construcŃie avem U1 = 2q . Cum
U1 ∩ Vq +1 = ∅ , rezultă că
Vk +1 = U1 ∪ Vq +1 = U1 + Vq +1 = 2q + 2q = 2 ( 2q + 1 − 1) = 2 ( k + 1 − 1) = 2k .
Din teorema inducŃiei complete rezultă că enunŃul din propoziŃie este
adevărat pentru orice n ∈ ℕ* .

DefiniŃie. Fie A = ( X , U ) o arborescenŃă binară şi

{
DT = s ∈ ℕ ∃x ∈ X cu d + ( x ) = 0 si l ( x0 ,..., x ) = s }
(mulŃimea distanŃelor de la rădăcină la fiecare vârf terminal). Dacă
max DT − min DT ≤ 1 , spunem că A este o arborescenŃă binară echilibrată.

Exemplul 8. Pentru ambele grafuri orientate din exemplul 7 avem
DT = {2,3} de unde
max DT − min DT = 3 − 2 = 1 ≤ 1
şi astfel ambele grafuri sunt arborescenŃe binare echilibrate.

Teorema 5. Fie A = ( X ,U ) o arborescenŃă binară. Următoarele
afirmaŃii sunt echivalente:
1. A este o arborescenŃă binară echilibrată;
2. pentru orice x ∈ X cu d + ( x ) = 0 , dacă X = 2m , atunci
m = l ( x0 ,..., x ) şi dacă 2 < X < 2 m m +1
, atunci l ( x0 ,..., x ) ∈ {m, m + 1} .
DemonstraŃie

Presupunem că 2m ≤ X < 2m +1 şi există x ∈ X , d + ( x ) = 0 şi
l ( x0 ,..., x ) < m . Presupunând că nivelul l ( x0 ,..., x ) este complet, atunci şi
nivelurile anterioare sunt complete şi astfel numărul total de vârfuri din nivelurile
1, 2, ..., l ( x0 ,..., x ) este
(
l x0 ,..., x )
0 1 ( )
l x0 ,..., x −1 2 −1 (
l x0 ,..., x )
2 + 2 + ... + 2 = =2 − 1 < 2m − 1 .
2 −1
ContradicŃie.

79
În mod asemănător se arată că se obŃine o contradicŃie dacă presupunem că
2 ≤ X < 2m +1 şi există x ∈ X , d + ( x ) = 0 şi l ( x0 ,..., x ) > m + 1 .
m

Am arătat astfel că dacă presupunem 2m ≤ X < 2m +1 , atunci pentru orice


x ∈ X cu d + ( x ) = 0 avem m ≤ l ( x0 ,..., x ) ≤ m + 1 şi cum l ( x0 ,..., x ) ∈ ℕ
rezultă l ( x0 ,..., x ) ∈ {m, m + 1} .
Putem astfel spune că, în particular, dacă 2m < X < 2m +1 , atunci
l ( x0 ,..., x ) ∈ {m, m + 1} , ceea ce demonstrează partea a doua a afirmaŃiei făcute în
enunŃ.
Să presupunem că X = 2 m . Nivelul k este complet dacă şi numai dacă
toate nivelurile anterioare sunt complete şi astfel numărul de vârfuri din primele k
niveluri este 2k . Deoarece X = 2 m , rezultă că şi nivelul m este complet şi nu
există vârfuri pe nivelul m + 1 . Astfel, toate vârfurile terminale se găsesc pe nivelul
m şi astfel max DT = min DT = m , ceea ce implică faptul că pentru orice x ∈ X
cu d + ( x ) = 0 avem l ( x0 ,..., x ) = m .

Dacă orice x ∈ X cu d + ( x ) = 0 şi X = 2 m avem l ( x0 ,..., x ) = m ,
rezultă că
{ }
DT = s ∈ ℕ ∃x ∈ X cu d + ( x ) = 0 si l ( x0 ,..., x ) = s = {m} .
Astfel max DT = min DT = m şi deci max DT − min DT = 0 ≤ 1 de unde
obŃinem că G este o arborescenŃă binară echilibrată.
Dacă orice x ∈ X cu d + ( x ) = 0 şi 2m < X < 2m +1 avem
l ( x0 ,..., x ) ∈ {m, m + 1} , rezultă că
{ }
DT = s ∈ ℕ ∃x ∈ X cu d + ( x ) = 0 si l ( x0 ,..., x ) = s = {m, m + 1} .
Astfel min DT = m şi max DT = m + 1 , deci max DT − min DT = 1 ≤ 1 de unde
obŃinem că G este o arborescenŃă binară echilibrată.

80
V. GRAFURI HAMILTONIENE ŞI EULERIENE
5.1. Grafuri Hamiltoniene

DefiniŃie. Fie G = ( X , U ) un graf neorentat. Un lanŃ (ciclu) elementar


din G care conŃine toate vârfurile grafului se numeşte lanŃ (ciclu) hamiltonian .

DefiniŃie. Un graf G = ( X , U ) care conŃine cel puŃin un ciclu
hamiltonian se numeşte graf hamiltonian

Exemplul 1. Se consideră graful G = ( X , U ) care are reprezentarea

6
2 3

4
5

7 8

Acest graf conŃine ciclul C = {1, 2, 4, 7,8,5, 6,3,1} care trece prin toate
vârfurile grafului şi prin urmare este un ciclu hamiltonian.
Deoarece graful G conŃine ciclul hamiltonian C , rezultă că graful este un
graf hamiltonian.

Aceste noŃiuni se regăsesc şi pentru grafurile orientate sub următoarele
forme.

81
DefiniŃie. Fie G = ( X , U ) un graf orentat. Un lanŃ (drum, ciclu, circuit)
elementar din G care conŃine toate vârfurile grafului se numeşte lanŃ (drum,
ciclu, circuit) hamiltonian .

DefiniŃie. Un graf G = ( X , U ) care conŃine cel puŃin un circuit
hamiltonian se numeşte graf hamiltonian orientat

Facem observaŃia că problematica grafurilor hamiltoniene este una de
complexitate nepolinomială din punctul de vedere al algoritmicii.
Teorema 1. Fie G = ( X , U ) un graf neorientat în care X = n ≥ 3 şi
n
pentru orice vârf x ∈ X avem d ( x ) ≥ . Atunci G este graf hamiltonian.
2
DemonstraŃie. Fie n = 3 , atunci pentru orice vârf x ∈ X avem
3
d ( x ) ≥ = 1, 5 , deci d ( x ) ≥ 2 . Deoarece X \ { x} = 3 − 1 = 2 , rezultă că pentru
2
orice x , d ( x ) = 2 = X − 1 . Cum fiecare x ∈ X este conectat cu toate celelalte
vârfuri din X , rezultă că graful este complet, deci K 3 , deci putem forma ciclul
C = [ x1 , x2 , x3 , x1 ] care este un ciclu elementar care conŃine toate vârfurile, deci
este hamiltonian. Drept consecinŃă, graful este hamiltonian.
Presupunem că avem un graf cu X = k + 1 vârfuri şi orice graf cu k
vârfuri care îndeplineşte condiŃiile teoremei este hamiltonian.
Fie C = [ x1 , x2 ,..., xk , x1 ] un ciclu elementar care trece prin toate vârfurile
lui G = ( X , U ) , mai puŃin vârful xk +1 (eventual scrierea lui C se obŃine printr-o
renumerotare a
vârfurilor). Acest ciclu există deoarece subgraful
( )
G′ = X \ { xk +1} ,V îndeplineşte condiŃiile propoziŃiei şi astfel conŃine un ciclu
hamiltonian.
Presupunem că nu exstă i , 1 ≤ i ≤ k − 1 , astfel încât în U să avem
muchiile { xi , xk +1} şi { xi +1 , xk +1} şi în U nu există nici muchiile { x1 , xk +1} şi
{ xk +1 , xk +1} (altfel putem introduce vârful în C în poziŃia dintre xi şi xi +1 sau între
xk şi x1 , formându-se un ciclu hamiltonian).
Rezultă atunci că eventualele conectări între xi +1 şi celelalte vârfuri se face
cel puŃin din 3 în 3 vârfuri ale ciclului C şi astfel d ( x ) ≤ 3 . ContradicŃie.

82
Exemplul 2. Considerăm graful orientat G = ( X , U ) din figura de mai
jos. Acest graf conŃine ciclul C = [1, 2, 4,5, 6,3,1] care trece prin toate cele 6
vârfuri şi astfel este un ciclu hamiltonian. Ca urmare şi graful considerat este unul
hamiltonian.
Facem observaŃia că graful G nu conŃine şi circuite hamiltoniene.

6
2 3

4
5


5.2. Grafuri euleriene

DefiniŃie. Fie G = ( X , U ) un graf neorientat. Un ciclu simplu din G se


numeşte ciclu eulerian dacă conŃine toate muchiile lui G .

DefiniŃie. Graful neorientat G = ( X , U ) se numeşte graf eulerian dacă
G conŃine cel puŃin un ciclu eulerian.

Exemplul 3. Considerăm graful neorientat G cu următoarea reprezentare

9
2
3
5
4

6 7 8
În acest graf putem considera ciclul
83
C = {1,3, 2, 4, 6,3, 4, 7,8, 2,9,8,5,9,1}
în care nu se repetă nicio muchie şi astfel ciclul este unul simplu. Ciclul C conŃine
toate muchiile din graful G şi astfel ciclul C este un ciclu eulerian şi astfel graful
este un graf eulerian.

Dacă trecem în cadrul grafurilor orientate avem definiŃia ce urmează
DefiniŃie. Fie G = ( X , U ) cu U = s un graf orientat Fie
L = [ m1 , m2 ,..., ms ] un lanŃ ( D = ( m1 , m2 ,..., ms ) un drum) simplu, atunci
spunem că lanŃul L (drumul D ) este lanŃ (drum) eulerian.

Lema 1. Fie G = ( X , U ) un graf neorientat, nu neapărat conex. Dacă
pentru orice x ∈ X avem d ( x ) număr par şi pentru x0 ∈ X avem d ( x0 ) ≠ 0 ,
atunci există un ciclu simplu în G care trece prin x0 .
DemonstraŃie. Putem considera, fără a reduce generalitatea că G este
conex. În caz contrar demonstraŃia se reduce la existenŃa ciclului într-o componentă
conexă a lui G
Cum G este conex şi orice x ∈ X avem d ( x ) este par, rezultă că pentru
orice x ∈ X , d ( x ) ≥ 2 . Prin sumare rezultă că 2 U = ∑ d ( x) ≥ 2 X
x∈ X
. Astfel,

folosind propoziŃia 4 din capitolul 2 avem că G este ciclic. Atunci există un ciclu
în G care trece printr-un punct x0 . Din acest ciclu se poate extrage un ciclu care
să fie simplu şi care să treacă prin x0

Teorema 2. Fie G = ( X , U ) un graf neorientat fără vârfuri izolate.
Atunci G este eulerian dacă şi numai dacă G este conex şi pentru orice x ∈ X ,
d ( x ) este număr par.
DemonstraŃie.

Dacă G este eulerian există în G un ciclu eulerian deci un ciclu simplu
C =  m1 , m2 ,..., m p  . Astfel, toate vârfurile sunt conectate, deci G este conex.
Atunci există cel puŃin o muchie mx cu o extremitate x pentru orice x ∈ X .
Cum mx este în ciclul C , rezultă că există i , 1 ≤ i ≤ p astfel încât
mx = mi . x este extremitate pentru mi , atunci este extremitate şi pentru unul din
arcele mi −1 sau mi +1 şi astfel d ( x ) este număr par.

84

Deoarece pentru orice x ∈ X , d ( x ) este par, conform lemei 1 rezultă că
există că pentru x0 ∈ X există un ciclu simplu care trece prin x0 şi x0 este
arbitrar. Astfel, G conŃine un ciclu eulerian, deci G este graf eulerian.

Teorema 3. Fie G = ( X , U ) un graf conex. Următoarele afirmaŃii sunt
echivalente:
1. G conŃine un ciclu eulerian.
2. Orice x ∈ X , d ( x ) este număr par.

3. Există Ci =  m1i , m2i ,..., mipi  cicluri, mij ∈ U , j = 1, 2,..., p i ,


 
i = 1, 2,..., k , astfel încât notând {
U i = m1i , m2i ,..., mipi } avem
k
U i ∩ U j = ∅ pentru orice 1 ≤ i, j ≤ k , i ≠ j şi ∪U i = U (mulŃimea
i =1
muchiilor poate fi partiŃionată în cicluri).
DemonstraŃie
1⇔ 2
Această echivalenŃă este asigurată prin teorema 2.
1⇒ 3
Fie C =  m1 , m2 ,..., m p  ciclul euclidian care există deoarece G este graf
eulerian.
Dacă C este ciclu elementar, el trece o singură dată prin fiecare vârf, iar
eliminarea oricărei muchii întrerupe ciclul. Astfel avem k = 1 şi U1 = U .
Presupunem că C nu este elementar. Atunci există x ∈ X astfel încât x
apare de două ori în scrierea lui C în funcŃie de vârfuri. Considerăm primul astfel
de vârf în sensul că dacă x şi y sunt două astfel de vârfuri îl aleg pe cel pentru
care distanŃa între cele două apariŃii este cea mai mică.
Atunci în scrierea lui C prin muchii, există i1 şi i2 astfel încât x este
extremitate pentru mi şi mi +1 . De asemenea, x este extremitate pentru mi şi
1 1 2

mi2 +1 . Putem forma astfel ciclurile C1 =  mi1 +1 ,..., mi2  şi

C ′ =  m1 ,..., mi1 , mi2 +1 ,..., m p  .

85
Din alegerea lui x rezultă că C1 este un ciclu elementar. Cum C este

{
simplu, rezultă că dacă U1 = mi +1 ,..., mi
1 2
} {
şi U ′ = m1 ,..., mi , mi
1 2 +1
}
,..., m p ,
atunci U = U1 ∪ U ′ şi U1 ∩ U ′ = ∅ , deci are loc o partiŃionare a lui U .
Putem repeta raŃionamentul anterior cu C ′ în loc de C până când toate
ciclurile sunt elementare şi astfel se obŃine partiŃia căutată.

Corolar 1. Fie G = ( X , U ) un graf conex. G conŃine un lanŃ eulerian
dacă şi numai dacă cel mult două vârfuri ale lui G au gradul impar.
DemonstraŃie

Presupunem că G conŃine un lanŃ euclidian deci un lanŃ simplu care
conŃine toate muchiile din G . Fie x1 şi x2 extremităŃile acestui lanŃ. Considerăm

(
graful G ′ = X , U ∪ {{ x , x }}) .
1 2 Prin adăugarea muchiei { x1 , x2 } la lanŃul
euclidian se obŃine un ciclu euclidian şi astfel G ′ este un graf euclidian.
Coform teoremei 3, orice vârf din G ′ are gradul par, deci în G ′ avem în
particular că d ( x1 ) şi d ( x2 ) sunt numere pare. Prin eliminarea muchiei { x1 , x2 } ,
rezultă că în G avem că d ( x1 ) şi d ( x2 ) sunt numere impare, gradele celorlalte
vârfuri rămânând pare, deci cel mult două vârfuri din G au gradele impare.

Din propoziŃia 2 capitolul 1, avem că G are cel mult două vârfuri cu grad
impar, implică faptul că numărul vârfurilor cu grad impar este 0 sau 2.
Dacă numărul vârfurilor cu grad impar este 0, rezultă că toate vârfurile au
gradul par şi atunci conform teoremei 3, rezultă că G conŃine un ciclu eulerian,
deci un lanŃ eulerian.
Dacă numărul vârfurilor cu gradul impar este 2, fie x1 şi x2 aceste vârfuri.

(
Construim graful G ′ = X , U ∪ {{ x , x }}) . Pentru G′ avem că este conex şi are
1 2

toate gradele pare şi atunci, conform lemei 1, rezultă că G ′ conŃine un ciclu


eulerian deci care conŃine toate muchiile din G ′ .
Eliminăm din acest ciclu muchia { x1 , x2 } , se obŃine un lanŃ simplu care
conŃine toate muchiile din G , deci un lanŃ euclidian.

86
Corolar 2. Fie G = ( X , U ) un graf conex cu 2k vârfuri de grad impar,

k > 0 . Atunci există Li =  m1i , m2i ,..., mipi  lanŃ deschis, mij ∈ U , j = 1, 2,..., p i ,
 
{
i = 1, 2,..., k , astfel încât notând U i = m1i , m2i ,..., mipi } avem U i ∩ U j = ∅
k
pentru orice 1 ≤ i, j ≤ k , i ≠ j şi ∪U i = U (mulŃimea muchiilor poate fi
i =1
partiŃionată în exact k lanŃuri deschise).
DemonstraŃie. Acest rezultat este o generalizare a corolarului 1 în termenii
punctului 3 din teorema 3.

87
VI. ALGORITMI PENTRU DRUMURI ÎN GRAFURI ORIENTATE
6.1. Algoritmi de calcul direct

Pentru calculul direct a matricii drumurilor putem folosi, în primul rând,


operaŃiile + şi i definite în capitolul 3.
Algoritmul are la bază propoziŃia 5 din capitolul 3 şi are forma următoare.
Algoritmul 1.
1. Considerăm i = 1 , D = A şi T = A .
2. Dacă i > n algoritmul se opreşte, D conŃine matricea drumurilor din G ,
altfel se continuă.
3. Considerăm i = i + 1 şi calculăm T = T i A folosind operaŃiile + şi i .
4. Calculăm D = D + T folosind operaŃia + .
5. Reluăm cu pasul 2.

łinând cont că operaŃiile sunt de factură logică deci cu aceeaşi
complexitate, în pasul 3 se realizează o înmulŃire de matrici logice şi astfel pentru
fiecare element al matricii rezultate se fac 2n operaŃii logice. Cum matricile cu
care lucrăm sunt matrici pătrate de ordin n , fiecare aplicare a pasului 3 implică
2n × n 2 = 2n3 operaŃii logice.
La pasul 4 se realizează o adunare de matrici logice, deci pentru aplicarea
sa se folosesc n 2 operaŃii logice. Ca urmare, la o iterare a paşilor 2, 3, 4 şi 5 se
folosesc în total 2n3 + n 2 operaŃii logice.
Pentru terminarea algoritmului se aplică n − 1 iteraŃii şi astfel numărul total
(
de operaŃii logice necesare terminării algoritmului este 2n3 + n 2 ) ( n − 1) , ceea ce
conduce la un polinom de grad 4 având coeficientul principal egal cu 2. Putem
astfel să tragem următoarea concluzie:
Teorema 1. Fie G = ( X , U ) un grad orientat cu matricea de adiacenŃă
A şi cu X = n . Algoritmul 1 produce matricea drumurilor din G şi are
(
complexitatea O 2n 4 . )

Exemplul 1. Considerăm graful orientat G = ( X , U ) , unde X = {1, 2,3}
{ }
şi U = (1, 2 ) , (1,3) , ( 2,1) , ( 3,3) . Graful are reprezentarea
88
1 2

3
Matricea de adiacenŃă a grafului este
0 1 1
 
A = 1 0 0
0 0 1
 
La inceputul aplicării algoritmului se fac iniŃializările i = 1 şi
0 1 1
 
D = T = A = 1 0 0
0 0 1
 
Deoarece i < 3 se continuă cu aplicarea algoritmului şi făcând i = 2 se
calculează
 0 1 1   0 1 1   1 0 1
     
T = T i A =  1 0 0  i  1 0 0  =  0 1 1
 0 0 1   0 0 1   0 0 1
     
şi
 0 1 1   1 0 1  1 1 1
     
D = D + T =  1 0 0  +  0 1 1 =  1 1 1
 0 0 1   0 0 1  0 0 1
     
Reluând pasul 2 relaŃia 2 > 3 este falsă şi vom relua calculele cu noile
valori pentru matricile T şi D . ObŃinem i = 3 şi
 1 0 1   0 1 1   0 1 1
     
T = T i A =  0 1 1  i  1 0 0  =  1 0 1 ,
 0 0 1   0 0 1   0 0 1
     
 1 1 1  0 1 1   1 1 1
     
D = D + T =  1 1 1 +  1 0 1  =  1 1 1 .
 0 0 1  0 0 1  0 0 1
     

89
Putem face observaŃia că matricea D nu se modifică la aplicarea acestei
iteraŃii. Continuând aplicarea algoritmului până ce ajungem la i = 4 , această
matrice continuă să nu se modifice, astfel că
 1 1 1
 
D =  1 1 1
 0 0 1
 
este matricea drumurilor din graful G

Acest algoritm poate fi considerat şi sub următoarea formă.
Algoritmul 1’.
1. Considerăm D = A .
2. Pentru i = 1, 2,..., n şi pentru j = 1, 2,..., n se execută pasul 4.
3. Algoritmul se opreşte; D conŃine matricea drumurilor lui G .
4. Dacă d ij = 0 , atunci pentru k = 1, 2,..., n se execută pasul 5 altfel se
continuă.
5. Se calculează d ik = dik + d jk .

Exemplul 2. Pentru graful următor

1 3
4

5
matricea de adiacenŃă asociată este
0 1 0 0 1
 
0 0 1 1 0
A = 0 0 0 1 0 .
 
1 0 0 0 1
0 0 1 0 0 

Să determinăm matricea drumurilor D .
1. Construim linia 1 a matricii D pornind de la linia 1 a matricii A . Observăm că
a12 = 1 şi a15 = 1 , restul elementelor fiind egale cu zero.
Atunci adunăm boolean linia 1 din A cu liniile 2 şi 5 ale matricii A

90
l1 : 0 1 0 0 1
l2 : 0 0 1 1 0
l5 : 0 0 1 0 0
__________________________

l1(2 ) : 0 1 1 1 1
( 2)
Observăm că linia l1(2) diferă de l1 prin elementul generat pe poziŃiile d13 = 1
( 2)
şi d14 = 1 . Adunăm boolean linia l1( 2 ) cu liniile 3 şi 4 din A .
l1(2 ) : 0 1 0 0 1
l3 : 0 0 0 1 0
l4 : 1 0 0 0 1
__________________________

l1(3 ) : 1 1 1 1 1
Observăm că s-a obŃinut o linie cu toate elementele egale cu 1 , deci, linia 1 a
matricii D va fi l1( D ) : 1 1 1 1 1
2. Pentru linia 2 a matricii D observăm că a23 = 1 , a24 = 1 , restul elementelor
fiind egale cu zero. Adunăm boolean linia 2 din A cu liniile 3 şi 4 .
l2 : 0 0 1 1 0
l3 : 0 0 0 1 0
l4 : 1 0 0 0 1
__________________________

l 2(2 ) : 1 0 1 1 1
Observăm că linia l 2( 2 ) diferă de linia 2 prin elementele generate de poziŃiile
d 21(2) = 1 şi d 25(2) = 1 . Adunăm boolean l (2)
2 cu liniile 1 şi 5 .

l 2(2 ) : 1 0 1 1 1
l1 : 0 1 0 0 1
l5 : 0 0 1 0 0
__________________________

l 2(3 ) : 1 1 1 1 1
Am obŃinut toate elementele egale cu 1 , deci l 2( D ) : 1 1 1 1 1
Similar pentru liniile 3, 4, 5 şi obŃinem matricea D

91
1 1 1 1 1
 
1 1 1 1 1
D = 1 1 1 1 1
 
1 1 1 1 1
 
1 1 1 1 1

O altă modalitate de calcul direct foloseşte operaŃiile uzuale definite pe
mulŃimea numerelor naturale.
Algoritmul se bazează pe propoziŃia 6 din capitalul 3 şi pe legătura care
există între matricile DG şi NDG . Algoritmul are forma următoare.
Algoritmul 2.
1. Considerăm i = 1 , D = A şi T = A .
2. Dacă i > n se trece la pasul 6, altfel se continuă.
3. Considerăm i = i + 1 şi calculăm T = T i A folosind operaŃiile uzuale de
adunare şi înmulŃire a numerelor întregi.
4. Calculăm D = D + T folosind operaŃia de adunare a numerelor întregi.
5. Reluăm cu pasul 2.
6. Pentru fiecare i = 1, 2,..., n şi fiecare j = 1, 2,..., n se execută pasul 8.
7. Algoritmul se opreşte, D conŃine matricea drumurilor din G
8. Dacă d ij ≠ 0 , atunci face d ij = 1 , altfel se continuă.

Algoritmul 1 este cunoscut sub numele de Algoritmul lui Wharshal pentru
determinarea matricii drumurilor.
Exemplul 3. Considerăm graful G = ( X , U ) dat prin X = {1, 2, 3, 4} ,
U = {(1, 2 ) , (1,3) , ( 2,3) , ( 3, 4 ) , ( 4,1)} şi care are reprezentarea

1 2

3 4
Acest graf are matricea de incidenŃă

92
0 1 1 0
 
0 0 1 0
A=
0 0 0 1
 
1 0 0 0
La debutul aplicării algoritmului 2 se fac iniŃializările i = 1 şi
0 1 1 0
 
0 0 1 0
D =T = A=
0 0 0 1
 
1 0 0 0
Deoarece relaŃia 1 > 4 nu este indeplinită se aplică prima iteraŃie a algoritmului,
pentru i = 2 şi se obŃin matricile
0 1 1 0  0 1 1 0 0 0 1 1
    
0 0 1 0  0 0 1 0 0 0 0 1
T = TA =  =
0 0 0 1  0 0 0 1 1 0 0 0
    
1 0 0 0  1 0 0 0 0 1 1 0
şi
0 1 1 0 0 0 1 1 0 1 2 1
     
0 0 1 0 0 0 0 1 0 0 2 1
D = D +T =  + =
0 0 0 1 1 0 0 0 1 0 0 1
     
1 0 0 0 0 1 1 0 1 1 1 0
La reluarea algoritmului de la pasul 2, relaŃia 2 > 4 este falsă şi se
continuă cu iteraŃia a doua, pentru i = 3 şi în care se obŃin matricile
 0 0 1 1  0 1 1 0   1 0 0 1 
    
 0 0 0 1  0 0 1 0   1 0 0 0 
T = TA = = ,
 1 0 0 0  0 0 0 1   0 1 1 0 
    
 0 1 1 0  1 0 0 0   0 0 1 1 
 0 1 2 1   1 0 0 1  1 1 2 2 
     
 0 0 2 1   1 0 0 0  1 0 2 1 
D = D +T = + = .
 1 0 0 1   0 1 1 0  1 1 1 1 
     
 1 1 1 0   0 0 1 1  1 1 2 1 
RelaŃia de la pasul 2 este acum 3 > 4 şi continuă să fie falsă generând a
treia iteraŃie a algoritmului 2, pentru valoarea i = 4 . În acest caz se obŃin
următoarele matrici

93
1 0 0 1  0 1 1 0 1 1 1 0
    
1 0 0 0  0 0 1 0 0 1 1 0
T = TA =  = ,
0 1 1 0  0 0 0 1 0 0 1 1
    
0 0 1 1  1 0 0 0 1 0 0 1
1 1 2 2 1 1 1 0  2 2 3 2
     
1 0 2 1 0 1 1 0  2 1 3 2
D = D +T =  + = .
1 1 1 1 0 0 1 1 1 1 2 2
     
1 1 2 1 1 0 0 1  2 1 2 2
Algoritmul revine la pasul 2 pentru a realiza o nouă iteraŃie de calcul.
Putem observa însă că ultima matrice D obŃinută are toate elementele nenule,
astfel că dacă trecem acum direct la pasul 8 se obŃine deja o matrice cu toate
elementele egale cu unu, deci există drumuri între oricare două vârfuri. Avem deci
matricea drumurilor
1 1 1 1
 
1 1 1 1
D=
1 1 1 1
 
1 1 1 1
Din forma matricii drumurilor putem trage şi concluzia că graful dat este
tare conex.

6.2. Algoritmul Wharshal pentru drumuri minime în grafuri orientate

De o mare aplicabilitate practică este o problemă de drumuri relativă la


grafurile ponderate. Fie G = ( X , U ) un graf ponderat, deci un graf orientat în care
U ⊂ X × M × X , M fiind mulŃimea ponderilor.
Pentru reprezentarea acestui graf se utilizează o matrice specifică
P = ( pij ) de elemente
1≤i , j ≤ n

mij pentru ( xi , mij , x j ) ∈ U


pij =  .
 +∞ altfel
Matricea poartă numele de matricea ponderilor grafului G .
În graful G se poate defini astfel noŃiunea de lungime a unui drum
d= (( x , m
i1 i1i2 )( ) (
, xi2 , xi2 , mi2i3 , xi3 ,..., xi , mi i , xik +1
k k k +1
)) ,
notată prin L ( d ) = , şi dată prin relaŃia

94
k
L ( d ) = ∑ mi ji j+1 .
j =1

Pentru orice x, y ∈ X , putem defini mulŃimea drumurilor de la x la y ca


{ }
fiind mulŃimea D ( x, y ) = d = ( x = x0 , x1 ,..., xk = y ) d drum in G .
O problemă importantă este de a determina în G drumurile minime între
vârfuri. Pentru acest lucru vom defini matricea drumurilor minime, notată
DGmin = ( dij ) , unde
1≤i , j ≤ n

d ij = min L ( d )
(
d ∈D xi , x j )
. Folosind aceste notaŃii, pentru determinarea matricii DGmin a drumurilor
minime se poate face folosind Algoritmul Wharshal pentru drumuri minime,
adică:
Algoritmul 3.
1. Considerăm i = 1 (prelucrăm linia i ), D = P .
2. Dacă i > n , atunci algoritmul se termină şi DGmin = D , altfel se continuă.
3. Pentru fiecare j = 1, 2,..., n se aplică pasul 5.
4. Facem i = i + 1 (trecem la următoarea linie) şi trecem la pasul 2.
5. Dacă d ij = +∞ , atunci se continuă, altfel se înlocuieşte linia i cu minimul
dintre liniia i şi linia obŃinută din linia j prin adăugarea valorii dij la
fiecare element.

OperaŃiile realizate în acest algoritm sunt de adunare şi de comparare în
vedea obŃinerii minimului. OperaŃia cea mai costisitoare este cea de comparare
astfel că, pentru exprimarea complexităŃii, ne vom referi în special la numărul de
comparaŃii realizate.
La pasul 5 al algoritmului se determină un vector al minimelor pe
componente dintre doi vectori de dimensiune n şi astfel numărul de comparaŃii
este n .
Conform pasului 3, pasul 5 se realizează pentru fiecare din valorile
j = 1, 2,..., n , deci de n ori şi astfel pasul 3 conduce la realizarea unui număr total
de n 2 comparaŃii.
Paşii 2, 3 şi 4 sunt realizaŃi pentru fiecare valoare a lui i , începând cu
valoarea 1 până la îndeplinirea condiŃiei i > n , deci de n . Cum în pasul 4 nu se
realizează comparaŃii, în pasul 2 se face o singură comparaŃie, iar în pasul 3 se fac
n 2 , rezultă că numărul total de comparaŃii este n3 + n .
RaŃionamentul de mai sus conduce la următorul rezultat.

95
Teorema 2. Dacă G = ( X , U ) este un graf orientat ponderat cu P
matricea ponderilor dată pe mulŃimea de ponderi M şi X = n . Algoritmul 3
producea matricea drumurilor minime din graful G şi are complexitatea O n3 ( )
exprimată ca număr de comparaŃii.

Exemplul 4. Considerăm graful orientat ponderat G = ( X , U ) pentru care
X = {1, 2, 3, 4,5} şi
U = {(1, 4, 3) , ( 2, 3,1) , ( 2, 7, 5) , ( 3, 7, 4 ) , ( 4, 6, 2 ) , ( 5,9, 4 ) , ( 5, 6,1)} .
Graful are reprezentarea

6
3
1 2

4 7
6
5
7
3 4
9
Matricea ponderilor grafului este
 +∞ +∞ 4 +∞ +∞ 
 
 3 +∞ +∞ +∞ 7 
P =  +∞ +∞ +∞ 7 +∞ 
 
 +∞ 6 +∞ +∞ +∞ 
 6
+∞ +∞ 9 +∞ 

Conform algoritmului considerăm i = 1 (prelucrăm prima linie) şi
 +∞ +∞ 4 +∞ +∞ 
 
 3 +∞ +∞ +∞ 7 
D = P =  +∞ +∞ +∞ 7 +∞ 
 
 +∞ 6 +∞ +∞ +∞ 
 6 +∞ +∞ 9 +∞ 
 
Linia 1 este L1 = ( +∞ +∞ 4 +∞ +∞ ) . Pentru j = 1 şi j = 2 avem
d1 j = ∞ şi ajungem la j =3 când d13 = 7 ≠ ∞ iar linia 3 este
L3 = ( +∞ +∞ +∞ 7 +∞ ) . Astfel prin adăugarea valorii 4 la fiecare
96
element din linia 3 se obŃine L3′ = ( +∞ +∞ +∞ 11 +∞ ) . Considerând acum
min { L1 , L3′} obŃinem noua linie 1 dată prin L1 = ( +∞ +∞ 4 11 +∞ ) .
Pentru j=4 avem acum d14 = 11 ≠ ∞ iar linia 4 este
L4 = ( +∞ 6 +∞ +∞ +∞ ) . Adunând valoarea 11 se obŃine
L4′ = ( +∞ 17 +∞ +∞ +∞ ) şi prin min { L1 , L4′ } noua linie 1 este
L1 = ( +∞ 17 4 11 +∞ ) .
În linia 1 s-a format valoarea 17 corespunzătoare lui j = 2 pentru care
linia 2 este L2 = ( 3 +∞ +∞ +∞ 7 ) . Prin adăugarea valorii 17 la elementele
din linia 2 se obŃine L2′ = ( 20 +∞ +∞ +∞ 24 ) . Aplicând min { L1 , L2′ }
obŃinem L1 = ( 20 17 4 11 24 ) . Deoarece linia 1 a fost completată, putem
scrie acum că matricea D a ajuns la forma
 20 17 4 11 24 
 
 3 +∞ +∞ +∞ 7 
D =  +∞ +∞ +∞ 7 +∞ 
 
 +∞ 6 +∞ +∞ +∞ 
 6 +∞ +∞ 9 +∞ 
 
Facem i = 2 şi deoarece 2 > 5 este falsă se trece la prelucrarea liniei 2
care are forma L2 = ( 3 +∞ +∞ +∞ 7 ) . Pentru j = 1 avem d 21 = 3 ≠ ∞ şi
considerd linia 1 la care se adaugă valoarea 3 se obŃine
L1′ = ( 23 20 7 14 27 ) . Aplicând relaŃia min { L2 , L1′} se obŃine
L2 = ( 3 20 7 14 7 ) .
Pentru j = 3, d 23 = 7 ≠ ∞ şi adăugând 7 la linia 3 obŃinem
L3′ = ( +∞ +∞ +∞ 14 +∞ ) . Din min { L2 , L3′} linia 2 existentă nu se
modifică.
Când luăm j = 4 , d 24 = 14 ≠ ∞ şi prin adunarea valorii 14 la linia 4 avem
L4′ = ( +∞ 20 +∞ +∞ +∞ ) . Acum folosind minimul, linia 2 existentă nu se
modifică.
Pentru j = 5 , cu d 25 = 7 ≠ ∞ obŃinem L5′ = (13 +∞ +∞ 16 +∞ )
iar aplicarea minimului nu modifica linia 2 obŃinută.
Am ajuns astfel la o matrice

97
 20 17 4 11 24 
 
 3 20 7 14 7 
D =  +∞ +∞ +∞ 7 +∞ 
 
 +∞ 6 +∞ +∞ +∞ 
 6 +∞ +∞ 9 +∞ 
 
Algoritmul va continua în modul prezentat mai sus, terminarea exemplului
fiind lăsată ca exerciŃiu pentru cititor.

6.3. Algoritmul lui Dantzig pentru drumuri minime
de extremitate iniŃială dată

Acest algoritm determină toate drumurile de lungime minimă care pornesc


de la un vârf dat şi ajung la toate celelalte vârfuri.
Se consideră un graf orientat G = ( X , U ) având X = n . Fie xi ∈ X un
vârf considerat iniŃial pentru toate drumurile pe dare dorim să le determinăm. Fie
P = ( pij ) matricea ponderilor definită ca mai sus.
1≤i , j ≤ n

Se consideră următorul proces de calcul:


Algoritmul 4.
1. Considerăm m = 1 , X m = { xi } şi c ( xi ) = 0 .
2. Dacă d + ( X m ) = 0 , atunci ne oprim; altfel se continuă.
3. Pentru orice arc ( x , x ) ∈U
j k pentru care x j ∈ X m şi xk ∉ X m se
calculează valoarea d jk = p jk + c x j ( )
4. Calculăm d = min d jk .
x j ∈X m
xk ∉ X m

5. Pentru fiecare k astfel încât d = d jk considerăm c ( xk ) = d şi


X m +1 = X m ∪ { xk } . Facem m = m + 1 şi trecem la pasul 2.

În urma execuŃiei acestui proces, m este numărul de vârfuri atinse din
vârful xi , X m este mulŃimea acestor noduri şi pentru fiecare x ∈ X m valoarea
c ( x ) indică lungimea unui drum minim de extremitate iniŃială xi şi extremitate
finală x . Procesul se termină în cel mult n − 1 repetări ale paşilor 2, 3, 4 şi 5
deoarece la pasul 5 se adaugă cel puŃin câte un vârf la mulŃimea X m .

98
Exemplul 5. Considerăm un graf orientat ponderat G = ( X , U ) pentru
{
care X = {1, 2, 3, 4} şi U = (1, 3, 2 ) , (1, 4,3) , ( 2,5,3) , ( 3,5, 4 ) , ( 4,3,1) . Graful }
are reprezentarea

3
1 2 3

4
5
5
3 4
Matricea ponderilor care se obŃine din specificaŃiile grafului este
 +∞ 3 4 +∞ 
 
 +∞ +∞ 5 +∞ 
P=
 +∞ +∞ +∞ 5 
 
 3 +∞ +∞ +∞ 
Considerăm că dorim să determinăm drumurile care au extremitatea iniŃială
1 şi facem iniŃializările m = 1 , X 1 = {1} şi c (1) = 0 . Avem d + ( X 1 ) = 2 şi astfel
facem prima prima iteraŃie din algoritm.
Arcele care au extremitatea iniŃială în X 1 sunt (1, 2 ) şi (1, 3) . Atunci
calculăm d12 = 3 + 0 = 3 şi d13 = 4 + 0 = 4 . Minimul valorilor calculate este
d = min {3, 4} = 3 şi se atinge pentru d12 . Astfel, considerăm c ( 2 ) = 3 şi
X 2 = {1, 2} . După ce facem m = 2 determinăm d + ( X 2 ) = 2 şi deoarece această
valoare nu este egală cu zero, aplicăm a doua iteraŃie a algoritmului.
Arcele care au extremitatea iniŃială în X 2 sunt (1, 3) şi ( 2,3) . Atunci
calculăm d13 = 4 + 0 = 4 şi d 23 = 5 + 3 = 8 . Prin aplicarea minimului se obŃine
d = min {4,8} = 4 care este atins pentru d13 . Din această cauză considerăm
c ( 3) = 4 şi X 3 = {1, 2,3} . Facem m = 3 şi avem d + ( X 3 ) = 1 ceea ce face să
aplicăm a treia iteraŃie a algoritmului.
Arcul cu extremitatea iniŃială în X3 este ( 3, 4 ) astfel că
d = d 34 = 5 + 4 = 9 , de unde c ( 4) = 9 şi X 4 = {1, 2,3, 4} . Deoarece
d + ( X 4 ) = 0 algoritmul se termină.

99
6.4. Algoritmul lui Bellman-Kalaba pentru drumuri minime
de extremitate finală dată

Acest algoritm rezolvă problema similară celei prezentate la algoritmul


Dantzig, adică determină drumurile de lungime minimă care au extremitatea finală
fixată.
Fie G = ( X , U ) un graf orientat ponderat cu X = { x1 , x2 ,..., xn } . Putem
presupune că dorim să determinăm drumurile de extremitate finală xn . Acest lucru
nu restrânge generalitatea deoarece putem găsi un izomorfism f de grafuri
orientate astfel încât dacă dorim să determinăm drumurile cu extremitatea finală
xi să avem f ( xi ) = xn .
Considerăm că P = pij ( ) 1≤i , j ≤ n
este matricea ponderilor pentru graful G .
Pentru realizarea algoritmului Bellman-Kalaba, construim o versiune modificată a
matricii ponderilor, matricea W = wij ( ) 1≤i , j ≤ n
, definită după cum urmează

mij pentru i ≠ j si ( xi , mij , x j ) ∈ U


 pij pentru i ≠ j 
wij =  = 0 pentru i = j .
0 pentru i = j 
∞ pentru i ≠ j si ( xi , mij , x j ) ∉ U
Algoritmul 5.
Etapa 1
Se construieşte matricea extinsă a valorilor arcelor W = wij ( ) i , j =1, n
.

Construim un tabel în care liniile sunt liniile matricii , notat L = ( Li )1≤i ≤ n , unde Li
este linia i a tabelului. La tabelul format se adaugă linia Ln +1 care este transpusa
coloanei n din matricea W .
Etapa 2
Se adaugă tabelului L , liniile suplimentare Li , i = n + 2, n + 3,... , astfel:
a) presupunând completată linia Lk se completează linia Lk +1 conform relaŃiei:

(
Lk +1, j = min Lk , j , min {wk +1,t + Lk ,t } .
t =1,..., n
)
b) se continuă aplicarea punctului (a) până la obŃinerea a două linii Lk şi Lk +1
identice.

100
Etapa 3
Se determină regresiv drumul minim de la xi la x n astfel:
- se adună linia „ i ” din L cu linia Lk +1 urmărindu-se rezultatul minim ce se
poate obŃine. Să presupunem că Lk +1,i = wij + Lk +1,i , atunci primul arc din
drumul minim de la xi la x n este arcul xi , x j ; ( )
- se adaugă linia „ j ” din L cu Lk +1 reŃinând valoare minimă, aflată de
exemplu pe coloana „ k ”, atunci al doilea arc va fi x j , x k ( ) ş.a.m.d. Ultimul
succesor determinat va fi x n .

*
PropoziŃia 1. Pentru orice k ∈ ℕ avem
Lk +1,i = min {vij + Lk , j }
j =1, n
DemonstraŃie.
Este evident că un drum de cel mult k + 1 arce cu destinaŃia x n se poate
obŃine dintr-un drum de cel mult k arce cu destinaŃia x n , prin adăugarea unui arc
la începutul său. Deci:

j =1, n { dk }
Lk +1,i = min vij + min w ( d k ) = min {vij + Lk , j } .
j =1, n


*
PropoziŃia 2. Dacă există k ∈ ℕ pentru care Lk ,i = Lk +1,i , pentru orice
1 ≤ i ≤ n , atunci Lk ,i = Ls ,i , pentru orice 1 ≤ i ≤ n şi orice s ≥ k + 1 .
DemonstraŃie. Demonstrăm prin inducŃie după s . Pentru s = k + 1
proprietatea este adevărată conform enunŃului.
Presupunând proprietatea adevărată pentru o valoare s ≤ h avem:
Lh +1,i = min {vij + Lh,i } = min {vij + Lk ,i } = Lk +1,i .
j =1, n j =1, n

Numărul maxim de aplicări ale celei de-a doua etape este cel mult egal cu
numărul de vârfuri minus 1, deci n − 1 = X − 1 de unde rezultă şi că numărul de
paşi ale procesului descris mai sus este finit, deci el este într-adevăr un algoritm.
La fiecare aplicare a pasului (a) din etapa a doua se calculează
{ }
min wk +1,t + Lk ,t pentru acest lucru fiind necesare un număr de n comparaŃii.
t =1,..., n

(
Astfel pentru a calcula Lk +1, j = min Lk , j , min wk +1,t + Lk ,t
t =1,..., n
{ }) sunt necesare n + 1
comparaŃii.

101
Din cele de mai sus rezultă că numărul maxim de comparaŃii necesare
trecerii la etapa a treia este ( n − 1)( n + 1) = n 2 − 1 .
În etapa a treia, pentru a determina drumul de lungime minimă de la xi la
xn , se produc maxim n − 1 comparaŃii. Astfel, pentru a determina drumurile
minime între orice nod xi şi xn , cu 1 ≤ i ≤ n −1 sunt necesare
( n − 1)
2
= n 2 − 2n + 1 .
Deoarece etapele 2 şi 3 din algoritm sunt independente, rezultă că numărul
maxim de comparaŃii prin care algoritmul se termină este 2n 2 − 2n .
Pe baza analizei făcute şi Ńinând cont de propoziŃiile 1 şi 2 de mai sus
putem da următorul enunŃ.
Teorema 3. Fie G = ( X , U ) un graf orientat ponderat cu X = n . Atunci
algoritmul 5 are ca rezultat determinarea tuturor drumurilor minime de
extremitate finală xn şi complexitatea algoritmului este O 2n 2 ( ) exprimată ca
număr maxim de comparaŃii.

Exemplul 6. Fie un graf G = ( X , U ) cu X = {1, 2, 3, 4,5, 6, 7} , iar pe
arce este marcată ponderea fiecărui arc. Dorim să determinăm drumul minim dintre
vârfurile 1 şi 7.
Graful considerat este prezentat în imaginea de mai jos

9
2 5
4 19
2 6
11 9
1 4 7
4
14 13
6 1 4
11
3 6

Etapa 1
Construim matricea W a valorilor arcelor şi continuăm tabelul adăugând
liniile conform calculelor prezentate mai jos. Totul se poate rezuma sub forma
tabelului prezentat în continuare

102
1 2 3 4 5 6 7
1 0 2 6 11 ∞ ∞ ∞
2 ∞ 0 4 3 9 ∞ ∞
3 ∞ ∞ 0 1 ∞ 11 ∞
4 ∞ ∞ ∞ 0 ∞ ∞ 9
5 ∞ ∞ ∞ 6 0 14 19
6 ∞ ∞ ∞ 4 ∞ 0 13
7 ∞ ∞ ∞ ∞ ∞ ∞ 0

(m ( ) )
i
1
∞ ∞ ∞ 9 19 13 0
(m ( ) )
i
2
20 12 10 9 15 13 0
(m ( ) )
i
3
14 12 10 9 15 13 0
(m ( ) )
i
4
14 12 10 9 15 13 0

Etapa 2
(1)
a) adăugăm Li la matricea W , care este transpusă coloanei w j 7 ( ) j =1, n
;
( 2) ( 3) ( 4)
b) completăm matricea W cu liniile Li , Li , Li ştiind că

{
L(i k +1) = min wij + L(jk )
j =1,7
}
( 2) ( 2)
Aşadar pentru linia Li , primul element L1 se determină adunând
elementele liniei 1 a matricii W cu cele ale liniei L(i ) , cea mai mică fiind
1

elementul căutat.
L(1 )
2
j =1,7
{
= min w1 j + L(j ) =
k
}
min {0 + ∞, ∞ + 2, ∞ + 6,11 + 9,19 + ∞,13 + ∞, 0 + ∞} = 20

L(2 )
2
j =1,7
{
= min w2 j + L(j ) =
k
}
min {∞ + ∞, ∞ + 0, ∞ + 4, 9 + 3,9 + 19,13 + ∞, ∞ + 0} = 12

L(3 )
2
j =1,7
{
= min w3 j + L(j ) =
k
}
min {∞ + ∞, ∞ + ∞, ∞ + 0, 9 + 1,19 + ∞,13 + 11, 0 + ∞} = 10

L(4 )
2
j =1,7
{
= min w4 j + L(j ) =
k
}
min {∞ + ∞, ∞ + ∞, ∞ + ∞,9 + 0,19 + ∞,11 + 13, ∞ + 0} = 9

103
L(5 )
2
j =1,7
{
= min w5 j + L(j ) =
k
}
min {∞ + ∞, ∞ + ∞, ∞ + ∞, 9 + 6,19 + 0,14 + 13,19 + 0} = 15

L(6 )
2
j =1,7
{
= min w6 j + L(j ) =
k
}
min {∞ + ∞, ∞ + ∞, ∞ + ∞,9 + 4,19 + ∞,13 + 0,13 + 0} = 13

L(7 )
2
j =1,7
{
= min w7 j + L(j ) =
k
}
min {∞ + ∞, ∞ + ∞, ∞ + ∞,9 + ∞, ∞ + 19, ∞ + 13, 0 + 0} = 0
( 3)
Pentru linia Li vom avea Li = min wij + L j
( 3)
j =1,7
{ ( 2)
}:
L(1 ) = min {20 + 0,12 + 2,10 + 6,9 + 11,15 + ∞,13 + ∞, 0 + ∞} = 14
3

L(2 ) = min {20 + ∞,12 + 0,10 + 4,9 + 3, 9 + 15,13 + ∞, ∞ + 0} = 12


3

L(3 ) = min {20 + ∞,12 + ∞,10 + 0, 9 + 1,15 + ∞,13 + 11, 0 + ∞} = 10


3

L(4 ) = min {20 + ∞,12 + ∞,10 + ∞,9 + 0,15 + ∞, ∞ + 13, 0 + 9} = 9


3

L(5 ) = min {20 + ∞,12 + ∞,10 + ∞,9 + 6,15 + 0,13 + 14, 0 + 19} = 15
3

L(6 ) = min {20 + ∞,12 + ∞,10 + ∞,9 + 4,15 + ∞,13 + 0, 0 + 13} = 13


3

L(7 ) = min {20 + ∞,12 + ∞,10 + ∞,9 + ∞,15 + ∞,13 + ∞, 0 + 0} = 0


3

Pentru linia Li
( 4)
vom avea Li = min wij + L j
( 4)
j =1,7
{ ( 3)
}:
L(1 ) = min {14 + 0,12 + 2,10 + 6,9 + 11,15 + ∞,13 + ∞, 0 + ∞} = 14
4

L(2 ) = min {14 + ∞,12 + 2,10 + 4,9 + 3,15 + 9,13 + ∞, ∞ + 0} = 12


4

L(3 ) = min {14 + ∞,12 + ∞,10 + 0,9 + 1,15 + ∞,13 + 11, ∞ + 0} = 10


4

L(4 ) = min {14 + ∞,12 + ∞,10 + ∞,9 + 0,15 + ∞,13 + ∞, 0 + 9} = 9


4

L(5 ) = min {14 + ∞,12 + ∞,10 + ∞,9 + 6,15 + 0,13 + 14, 0 + 19} = 15
4

L(6 ) = min {14 + ∞,12 + ∞,10 + ∞,9 + 4,15 + ∞,13 + 0, 0 + 13} = 13


4

L(7 ) = min {14 + ∞,12 + ∞,10 + ∞, 9 + ∞,15 + ∞,13 + ∞, 0 + 0} = 0


4

( 3) ( 4)
Observăm că liniile Li şi Li coincid, iteraŃiile se opresc.
( 4)
Elementele lui Li reprezintă valoarea minimă a fiecărei drum care ajunge
în vârful 7.

104
Etapa 3
( 4)
Se adună linia 1 din W cu Li urmărindu-se rezultatul minim, care este 14 ,
primul arc va fi (1, 2 ) .
Se adună linia 2 din W cu L(i ) , rezultatul fiind 12 , al doilea arc va fi
4

( 2, 4 ) .
( 4)
Se adună linia 4 din W cu Li , rezultatul minim fiind 9 , arcul
corespunzător va fi ( 4, 7 ) .
Deci drumul minim de la x1 la x7 va fi d = (1, 2, 4, 7 ) cu valoarea 17.

6.4. Algoritmii lui Ford şi Dijkstra pentru drumuri minime
de extremităŃi date

Comparativ cu algoritmii prezentaŃi mai sus următorul algoritm se


foloseşte pentru cazul în care ambele extremităŃi ale drumului căutat sunt fixate.
Fie G = ( X , U ) un graf orientat şi xi , x j două vârfuri. Dorim să
determinăm un drum optim de la xi la x j . Datorită izomorfismelor de grafuri,
putem considera că determinăm un drum de la x1 la xn , fără a restrânge
generalitatea procesului de determinare.
Calculul se realizează în trei faze, una de iniŃializare, una de calcul efectiv
şi una de obŃinere a drumul minim dintre x1 şi xn , dacă există drumuri între cele
două vârfuri.
Considerăm că P = pij ( ) 1≤i , j ≤ n
este matricea ponderilor pentru graful G .
Pentru realizarea algoritmului Bellman-Kalaba, construim o versiune modificată a
matrici ponderilor, matricea W = wij ( ) 1≤i , j ≤ n
, definită după cum urmează

mij pentru i ≠ j si ( xi , mij , x j ) ∈ U


 pij pentru i ≠ j 
wij =  = 0 pentru i = j .
0 pentru i = j 
∞ pentru i ≠ j si ( xi , mij , x j ) ∉ U
Algoritmul 6.
Etapa 1
Se construieşte matricea extinsă a valorilor arcelor W = wij ( ) i , j =1, n
.

Construim un vector v = ( vi )1≤i ≤ n pentru care considerăm v1 = 0 şi vi = +∞


pentru 2 ≤ i ≤ n .
105
Etapa 2
a) Cu i = 1, 2,..., n , în această ordine se construieşte vectorul v* = vi* ( ) 1≤i ≤ n
pe
baza formulei:
 
 
v = min vi , min {v j + w ji } .
*
i
j
 ( x j , xi )∈U 
 
b) Se continuă aplicarea punctului (a) cât timp există un indice k pentru care
vk* < vk , înlocuind vectorul v prin vectorul v* .
Etapa 3
- Dacă wn = +∞ , atunci nu există drumuri între x1 şi xn .
- Se determină drumul de la x1 la xn plecându-se de la xn , procedând după
cum urmează: dacă presupunem că s-a determinat (x
ki , xki−1 ,..., xk1 = xn ,)
partea de la xki la x n a drumului minim. Luăm xk vârful pentru care are
i+1

loc relaŃia vk
i+1
+ wki+1ki = vki

Exemplul 7. Se consideră graful orientat ponderat G = ( X , U ) , cu
X = {1, 2,3, 4,5} şi
U = {(1, 4,3) , ( 2,3,1) , ( 2,7,5 ) , ( 3, 7, 4 ) , ( 4, 6, 2 ) , ( 5,9, 4 ) , ( 5, 6,1)} .
Graful are reprezentarea

6
3
1 2

4 7
6
5
7
3 4
9
Matricea extinsă a ponderilor este în acest caz

106
 0 ∞ 4 ∞ ∞
 
3 0 ∞ ∞ 7
W = ∞ ∞ 0 7 ∞
 
∞ 6 ∞ 0 ∞
6 ∞ ∞ 9 0
 
Considerând că dorim să determinăm drumul minim de la vârful 1 la vârful
5, conform primei etape a algoritmului se construieşte vectorul
v = (0 ∞ ∞ ∞ ∞) .
Aplicăm primul punct al etapei a doua şi avem
{
i = 1 , v1* = min 0, min {∞ + 3, ∞ + 6} = 0 }
i = 2 , v = min {∞, min {∞ + 6}} = ∞
*
2

i = 3 , v3* = min {∞, min {0 + 4}} = min {∞, 4} = 4


i = 4 , v4* = min {∞, min {∞ + 7, ∞ + 9}} = ∞
i = 5 , v5* = min {∞, min {∞ + 7}} = ∞
ObŃinem astfel vectorul v* = ( 0 ∞ 4 ∞ ∞ ) .. Deoarece pentru
k = 3 , 4 = v3* < v3 = ∞ , facem v = ( 0 ∞ 4 ∞ ∞ ) şi reluăm calculele de
mai sus.
i = 1 , v1* = min {0, min {∞ + 3, ∞ + 6}} = 0
i = 2 , v2* = min {∞, min {∞ + 6}} = ∞
i = 3 , v3* = min {4, min {0 + 4}} = min {4, 4} = 4
i = 4 , v4* = min {∞, min {4 + 7, ∞ + 9}} = min {∞,11} = 11
i = 5 , v5* = min {∞, min {∞ + 7}} = ∞
Am ajuns la vectorul v* = ( 0 ∞ 4 11 ∞ ) şi deoarece pentru k = 4
*
are loc relaŃia 11 = v < v4 = ∞ ,
4 reluăm calculele pentru vectorul
v = ( 0 ∞ 4 11 ∞ ) .
Procedând ca anterior, de această dată se ajunge la
v* = ( 0 17 4 11 ∞ ) , iar relaŃia de reluare este îndeplinită pentru k = 2 .
Reluăm primul pas al etapei a doua pentru v = ( 0 17 4 11 ∞ ) şi obŃinem
v* = ( 0 17 4 11 24 ) .
Urmează încă o aplicare a primului pas din etapa a doua, în final obŃinând
v = v = ( 0 17 4 11 24 ) şi deoarece relaŃia vk* < vk nu este verificată
*

107
pentru niciun k ∈ {1, 2,3, 4,5} se trece la etapa a treia a algoritmului din care se
obŃine că există un drum de la vârful 1 la vârful 5 deoarece v5 = 24 ≠ ∞ şi acest
drum este d = (1,3, 4, 2,5 ) .
╬.
Algoritmul prezentat este un algoritm care conŃine o serie de complicaŃii
datorate faptului că s-a dorit să funcŃioneze pentru toate grafurile orientate. Pentru
cazul în care se cunoaşte faptul că graful G nu conŃine circuite, acest algoritm
poate fi simplificat pentru a se ajunge la următoarea formă.
Algoritmul 7.
1. Se construieşte matricea extinsă a valorilor arcelor W = wij ., ( ) i , j =1, n

facem v1 = 0 (. v = ( vi )1≤i ≤ n fiind un vector de dimensiune n ) şi


considerăm mulŃimile A = { x1} şi B = X \ { x1} .
2. Dacă nu există x j ∈ A şi xi ∈ B astfel încât ( x , x ) ∈U , atunci ne
j i

oprim, nu există drumuri de la x1 la xn ; altfel se continuă.


3. Considerăm mulŃimea
{
C = x ∈ B ∃y ∈ A, ( y, x ) ∈ U si ∃z ∈ B, ( z , x ) ∈ U . }
Pentru orice xi ∈ C , facem vi = min v j + w ji .
j
{ }
x j ∈A

4. Facem înlocuirile A = A ∪ C , B = B \ C .
5. Dacă xn ∉ A atunci se trece la pasul 2, altfel se continuă.
6. Se determină drumul de la x1 la xn plecându-se de la xn , procedând după

(
cum urmează: dacă presupunem că s-a determinat xk , xk ,..., xk = xn ,
i i −1 1 )
partea de la xki la x n a drumului minim. Luăm xk vârful pentru care
i+1

are loc relaŃia vk


i+1
+ wki+1ki = vki .

Exemplul 8. Considerăm graful orientat ponderat, fără circuite
G = ( X , U ) cu X = {1, 2,3, 4,5} şi
U = {(1,3, 2 ) , (1, 4,3) , ( 2, 2,3) , ( 2, 4, 4 ) , ( 2,9,5 ) , ( 3,5, 4 ) , ( 4, 4,5 )}
având reprezentarea următoare

108
3
1 2
9
4
2 4
4 5
5
3 4
Scriem matricea extinsă a valorilor arcelor şi anume
 0 3 4 ∞ ∞
 
∞ 0 2 4 9 
W = ∞ ∞ 0 5 ∞
 
∞ ∞ ∞ 0 4 
∞ ∞ ∞ ∞ 0 
 
Şi considerând că dorim să determinăm drumul de extremitate iniŃială vârful 1, cu
extremitatea finală vârful 5, facem iniŃializările v1 = 0 , A = {1} şi B = {2,3, 4,5} .
Deoarece există 1 ∈ A şi 2 ∈ B astfel încât (1, 2 ) ∈ U se continuă cu
pasul 3 al algoritmului.
Construim mulŃimea C = {2} . Pentru 2∈C facem
v2 = min {0 + 3} = 3 ..
La pasul 4 obŃinem A = {1, 2} şi B = {3, 4,5} şi deoarece 5 ∉ A facem o
nouă iteraŃie începând cu pasul 2.
Deoarece există 1 ∈ A şi 3 ∈ B astfel încât (1,3) ∈ U se continuă cu pasul
3 al algoritmului.
ObŃinem C = {3} . Pentru 3 ∈ C facem
v3 = min {0 + 4,3 + 2} = min {4,5} = 4
La pasul 4 ajungem la A = {1, 2,3} şi B = {4,5} şi din nou, deoarece
5 ∉ A , reluăm de la pasul 2.
Cum 2 ∈ A şi 4 ∈ B astfel încât ( 2, 4 ) ∈ U continuăm cu pasul 3 şi
obŃinem C = {4} . Pentru 4 ∈ C se obŃine
v4 = min {3 + 4, 4 + 5} = min {7,9} = 7
La pasul 4 se determină mulŃimile A = {1, 2,3, 4} şi B = {5} şi este
necesară o nouă reluare de la pasul 2 deoarece 5 ∉ A .

109
Având 2 ∈ A şi 5 ∈ B pentru care ( 2,5 ) ∈U continuăm construind
C = {5} şi cu determinarea
v5 = min {3 + 9, 7 + 4} = min {12,11} = 11
urmată de obŃinerea mulŃimilor A = {1, 2,3, 4,5} şi B = ∅ . De această dată
5 ∈ A şi astfel, trecem la pasul 6 cu v = ( 0 3 4 7 11) determinând drumul
d = (1, 2, 4,5 ) .

Se poate observa că în algoritmul simplificat al lui Ford, în pasurile 3 şi 4
se determină un minim şi apoi are loc o trecere a tuturor vârfurilor din C în A . Pe
de altă parte, o parte din arcele considerate la pasul 3 nu vor face parte din drumul
minim de la x1 la xn . Acest lucru se va întâmpla doar pentru vârfurile în care se
atinge minimul calculat la aplicarea relaŃiei vi = min v j + w ji . Această
j
{ }
x j ∈A

consideraŃie ne conduce la un algoritm înbunătăŃit pentru determinarea drumurilor


minime în grafuri fără circuite, cunoscut sub numele de algoritmul lui Dijkstra.
Algoritmul 8.
1. Se construieşte matricea extinsă a valorilor arcelor W = wij ., ( ) i , j =1, n

facem v1 = 0 (. v = ( vi )1≤i ≤ n fiind un vector de dimensiune n ) şi


considerăm mulŃimile A = { x1} şi B = X \ { x1} .
2. Dacă nu există x j ∈ A şi xi ∈ B astfel încât ( x , x ) ∈U , atunci ne
j i

oprim, nu există drumuri de la x1 la xn ; altfel se continuă.


3. Considerăm mulŃimea
{
C = x ∈ B ∃y ∈ A, ( y, x ) ∈ U si ∃z ∈ B, ( z , x ) ∈ U . }
{
Pentru orice xi ∈ C , facem vi = min v j + w ji .
j
}
x j ∈A

4. Pentru fiecare xk ∈ C pentru care există xj ∈ A astfel încât


vk + w jk = min {v j + w jk } considerăm A = A ∪ { xk } şi B = B \ { xk } .
j
x j ∈A

5. Dacă xn ∉ A atunci se trece la pasul 2, altfel se continuă.

110
6. Se determină drumul de la x1 la xn plecându-se de la xn , procedând după
cum urmează: dacă presupunem că s-a determinat xk , xk ,..., xk = xn , ( i i −1 1 )
partea de la xki la x n a drumului minim. Luăm xk vârful pentru care
i+1

are loc relaŃia vk


i+1
+ wki+1ki = vki .

Exemplul 9. Fie un graf G = ( X , U ) cu X = {1, 2,3, 4,5, 6,7} , iar pe
arce este marcată ponderea fiecărui arc. Dorim să determinăm drumul minim dintre
vârfurile 1 şi 7.
Graful considerat este fără circuite şi este prezentat în imaginea de mai jos

9
2 5
4 19
2 6
11 9
1 4 7
4
14 13
6 1 4
11
3 6
La pasul 1 se scrie matricea extinsă a valorilor arcelor
0 2 6 11 ∞ ∞ ∞
 
∞ 0 4 4 9 ∞ ∞
∞ ∞ 0 1 ∞ 11 ∞
 
W = ∞ ∞ ∞ 0 ∞ ∞ 7
∞ ∞ ∞ 6 0 14 19 
 
∞ ∞ ∞ 4 ∞ 0 13 
∞ ∞ ∞ ∞ ∞ ∞ 0 

şi se fac iniŃializările v1 = 0 , A = {1} şi B = {2,3, 4,5, 6, 7}
Modul de lucru al algoritmului este similar celui prezentat în exemplul 8 şi
conduce în final la drumul d = (1, 2, 4, 7 ) .

111
VII. ALGORITMI PENTRU GRAFURI
HAMILTONIENE ŞI EULERIENE
7.1. Algoritmul lui Foulkes pentru drumuri hamiltoniene

Pentru a uşura căutarea drumurilor hamiltoniene într-un graf orientat conex


G = ( X ,U ) , vom face o căutarea a drumurilor hamiltoniene în subcomponente
tari conexe ale grafului G şi apoi vom asambla subdrumurile prin utilizarea
punŃilor prin care sunt conectate componentele tari conexe.
Considerăm un graf orientat conex G = ( X , U ) care are matricea de
adiacenŃă A . Din matricea de adiacenŃă putem determina matricea drumurilor D ,
utilizând modalităŃile prezentate în capitolele anterioare.
Procesul se desfăşoară în 3 etape, una de formare a componentelor tari
conexe din graful G , a doua în care se formează câte un drum hamiltonian în
fiecare din componentele tari conexe şi ultima etapă de formare a unui drum
hamiltonian în G pe baza subdrumurilor determinare în etapa a doua.
Algoritmul 1.
Etapa 1
1.a) Facem M = I + D şi i = 1
1.b) În matricea M se consideră toate liniile formate doar cu
valoarea 1. Vârfurile corespunzătoare acestor linii formează mulŃimea de
vârfuri Ci .
1.c) Se elimină din matricea M liniile şi coloanele considerate în formarea
mulŃimii Ci .
1.d) Dacă matricea M nu s-a epuizat se trece la pasul (1.b), altfel se continuă
trecând la etapa a doua.
Etapa 2
Se construieşte un grag G ′ = ( Y , V ) unde Y = {C1 , C2 ,..., Cr } şi

(C , C ) ∈V
i j dacă şi numai dacă există x ∈ Ci şi există y ∈ C j astfel încât
( x, y ) ∈U . Se formează astfel un drum hamiltonian în G ′ , şi anume drumul
d ′ = ( C1 , C2 ,..., Cr ) .

112
Etapa 3
3.a) Se consideră x1 ∈ C1 şi x2 ∈ C2 pentru care există ( x1 , x2 ) ∈ U . Găsim în
C1 un drum hamiltonian d1 de extremitate iniŃială x1* şi extremitate finală x1
şi în C2 un drum hamiltonian d 2 de extremitate iniŃială x2 şi extremitate
finală x2* . Se formează astfel drumul hamiltonian d1* = d1 , ( x1 , x2 ) , d 2 ( ) în
graful parŃial al lui G de vârfuri C1 ∪ C2 . Facem i = 3 .
3.b) Dacă i > r ne oprim, s-a obŃinut drumul hamiltonian, altfel se continuă.
3.c) ( )
Dacă există xi ∈ Ci astfel încât xi*−1 , xi ∈ U atunci se trece la pasul (3.d),
altfel se trece la pasul (3.e).
3.d) Se consideră în Ci un drum hamiltonian d i de extremitate iniŃială xi şi
notăm extremitatea sa finală prin xi* . Am format astfel drumul hamiltonian

(
d i* = d i*−1 , ( xi*−1 , xi ) , di ) în graful parŃial al lui G de vârfuri
C1 ∪ C2 ∪ ... ∪ Ci . Facem i = i + 1 şi mergem la pasul (3.b).
3.e) Fie ei partea din drumul d i*−1 care formează acest drum împreună cu d i −1 .
Fie xi′−1 ∈ Ci −1 şi xi ∈ Ci pentru care ( xi′−1 , xi ) ∈ U . ÎmpărŃim drumul d i −1 în
d i′−1 de extremitate finală xi′−1 şi drumul d i′′−1 de extremitate iniŃială xi′−1 şi
extremitate finală xi*−1 . Considerăm un drum d i′′′−1 care pleacă din xi′−1 , trece
xi*−1 şi apoi prin toate celelalte vârfuri care apar în drumul d i′′−1 astfel încât
extremitatea finală a lui d i′′′−1 să fie xi′−1 . Se consideră în Ci un drum
hamiltonian d i de extremitate iniŃială xi şi notăm extremitatea sa finală prin
xi* . Considerăm drumul d i* = ( d i′−1 , d i′′′−1 , ( xi′−1 , xi ) , d i ) în graful parŃial al lui
G de vârfuri C1 ∪ C2 ∪ ... ∪ Ci . Facem i = i + 1 şi mergem la pasul (3.b).

Exemplul 1. Considerăm graful următor

2 9

6 7
1 3
4

8
5
Matricea de adiacenŃă a grafului este
113
0 1 0 0 1 0 0 0 0
 
0 0 1 1 0 0 0 0 1
0 0 0 1 0 0 0 0 0
 
1 0 0 0 1 0 0 0 0
A = 0 0 1 0 0 1 0 0 0 .
 
0 0 0 0 0 0 1 1 0
0 0 0 0 0 0 0 1 0
 
0 0 0 0 0 0 0 0 1
0 0 0 0 0 1 0 0 0 

Prin aplicarea unuia din algoritmii pentru determinarea matricii drumurilor
într-un graf orientat se obŃine matricea
1 1 1 1 1 1 1 1 1
 
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
 
1 1 1 1 1 1 1 1 1
M = 1 1 1 1 1 1 1 1 1
 
0 0 0 0 0 1 1 1 1
0 0 0 0 0 1 1 1 1
 
0 0 0 0 0 1 1 1 1
0 0 0 0 0 1 1 1 1

Prin aplicarea primei etape a algoritmului de mai sus se obŃine
C1 = {1, 2,3, 4,5} şi C2 = {6, 7,8,9} şi în etapa a doua se obŃine graful condensat

C1 C2

şi astfel se obŃine drumul hamiltonian d c = ( C1 , C2 ) .


În etapa a treia se alege o punte, să spunem arcul ( 2,9 ) .
Alegem în componenta tare conexă C1 drumul hamiltonian de extremitate
finală vârful 2, şi anume d1 = ( 5,3, 4,1, 2 ) .

114
De asemenea, deoarece C2 este ultima componentă tare conexă,
determinăm în ea un drum hamiltonian de extremitate iniŃială vârful 9, şi anume
d 2 = ( 9, 6, 7,8 ) .
Acum, drumul hamiltonian se obŃine ca d = ( d1 , d 2 ) , deci
d1 = ( 5,3, 4,1, 2,9, 6, 7,8 )

7.2. Teorema lui Chen

Fie G = ( X , U ) un graf orientat şi fără circuite cu X = { x1 , x2 ,..., xn } .


Considerăm că A este matricea de adiacenŃă a grafului şi putem determina
matricea D a drumurilor din G .
Pentru fiecare nod xi notăm cu pi puterea de atingere a vârfului xi , adică
numărul de vârfuri x j pentru care există drum de extremitate iniŃială xi şi
extremitate finală x j .

PropoziŃia 1. Fie G = ( X , U ) un graf orientat şi fără circuite şi

( x , x ) ∈U . Atunci
i j pi ≥ p j , unde pi este gradul de atingere al vârfului xi .
DemonstraŃie. Fie
{
Aj = xk ∃d = ( x j ,..., xk ) }
şi
{
Ai = xk ∃d = ( xi ,..., xk ) . }
(
Dacă y ∈ A j , atunci există un drum d = x j ,..., y . Deoarece ) ( x , x ) ∈U ,
i j

atunci
d′ = (( x , x ) , d ) = ( x , x ,..., y )
i j i j

este un drum de la xi la y şi astfel y ∈ Ai . Cum y a fost ales arbitrar, rezultă


A j ⊆ Ai , deci
p j = A j ≤ Ai = pi .

Corolar. Fie G = ( X , U ) un graf orientat şi fără circuite şi care conŃine
un drum de la xi la x j . Atunci pi ≥ p j , unde pi este gradul de atingere al
vârfului xi .

115
DemonstraŃie. Se procedează ca în propoziŃia 1 doar că în loc de a utiliza
( )
arcul xi , x j se consideră drumul e = xi ,..., x j . ( )

Următoarele rezultate, dintre care primul este cunoscut drept teorema lui
Chen stau la baza algoritmului lui Chen.
Teorema 1. Fie G = ( X , U ) un graf orientat şi fără circuite cu X = n .
G conŃine un drum hamiltonian dacă şi numai dacă are loc relaŃia
n
n ( n − 1)
∑i =1
pi =
2
unde pi este gradul de atingere al vârfului xi .
DemonstraŃie.

Fie d = {x1 , x 2 ,..., x n } drumul hamiltonian în G , atunci:
- dacă i > j din x j nu se poate atinge vârful xi , deoarece în caz contrar în G
ar exista circuite;
- din vârful xi ( i = 1, 2,..., n − 1 ) se pot atinge vârfurile xi +1 , xi + 2 ,..., x n deci
pi = n − i ;
- din vârful x n nu se poate atinge nici un vârf.
În total avem:
n n
n ( n − 1)
∑ pi = ∑ ( n − i ) =
i =1 i =1 2
.


n
n ( n − 1) n(n − 1)
Presupunem că ∑p
i =1
i =
2
, atunci în matricea D se găsesc
2
elemente de „ 1 ”.
Triangularizând superior această matrice, aceste elemente vor ocupa toate
locurile disponibile de deasupra diagonalei; în final drumul hamiltonian însuşi este
dat de succesiunea vârfurilor corespunzătoare matricii triangularizată superior.

Teorema 2. Într-un graf orientat fără circuite, drumul hamiltonian, dacă
există este unic.
DemonsraŃie. Dacă ar exista două drumuri hamiltoniene d H(1) şi d H( 2 ) ,
atunci în cele două drumuri ar exista cel puŃin două vârfuri xi , x j aşezate în
ordine inversă, ceea ce ar face să apară un circuit între xi şi x j .

116
Rezultatele prezentate mai sus dau un proces imediat pentru determinarea
drumului hamiltonian într-un graf orientat fără circuite. Pentru acesta vom proceda
după cum urmează:
Algoritmul 2.
1. Scriem matricea de adiacenŃă A .
2. Calculăm, prin una din metodele descrise în capitolele anterioare,
matricea drumurilor D . Dacă în această matrice apare cel puŃin o
valoare 1 pe diagonala principală ne oprim pentru că graful G conŃine un
circuit şi teorema lui Chen nu se poate aplica.
3. Se determină puterile de atingere ale vârfurilor ( pi )i =1,2,...,n şi se verifică
n
n ( n − 1)
valoarea de adevăr pentru relaŃia ∑pi =1
i =
2
. Dacă această relaŃie

nu este verificată atunci graful G nu conŃine un drum hamiltonian.


4. Se ordonează puterile de atingere ale vârfurilor şi dacă σ este
permutarea pentru care are loc relaŃia
n − 1 = pσ (1) > pσ ( 2) > ... > pσ ( n ) = 0 ,
atunci drumul
(
h = xσ (1) , xσ ( 2) ,..., xσ ( n ) )
este drumul hamiltonian căutat.

Exemplul 2. Considerăm graful dat prin reprezentarea

x1

x3 x4

x2
Matricea de adiacenŃă este
0 1 0 1
 
0 0 0 1
A=
1 1 0 0
 
0 0 0 0
Matricea drumurilor este

117
0 1 0 1
 
0 0 0 1
D=
1 1 0 1
 
0 0 0 0
Să determinăm drumul hamiltonian pentru matricea drumurilor astfel
obŃinută. Matricea nu conŃine nicio valoare 1 pe diagonală, deci graful la care
matricea este asociată nu conŃine circuite.
4
Avem p1 = 2 ; p2 = 1 ; p3 = 3 ; p4 = 0 şi astfel ∑p
i =1
i = 6 , iar pentru

n(n − 1)
n = 4 rezultă = 6.
2
Matricea D a drumurilor graf la care am ataşat şi puterile de atingere a
vârfurilor este
x1 x2 x3 x4 pi
x1  0 1 0 1 2
 
x2  0 0 0 1 1
D=
x3  1 1 0 1 3
 
x4  0 0 0 00
Pentru a triangulariza matricea D ne folosim de relaŃiile
p3 > p1 > p2 > p4 ,
vom scrie vârfurile în ordinea {x 3 , x1 , x 2 , x 4 } în loc de ordinea {x1 , x 2 , x3 , x 4 }.
Avem:
x1 x2 x3 x4
x1  0 1 1 1
 
x2  0 0 1 1 
D1 =
x3  0 0 0 1 
 
x4  0 0 0 0 
care este matricea triangularizată a drumurilor.
Deci, se poate aplica teorema lui Chen, în G există un drum hamiltonian,
iar acesta este d H : {x3 , x1 , x 2 , x 4 }.

118
7.3. Algoritmul înmulŃirii latine

Algoritmul de determinare a matricii drumurilor are un caracter prea


sintetic, în sensul că prezenŃa unei valori de „ 1 ” în matricea drumurilor nu dă
informaŃii asupra vârfurilor din care se compun drumurile corespunzătoare,
bineînŃeles că nici asupra numărului de drumuri între vârfurile care corespund
acelor valori de „ 1 ”.
Ca un exemplu de algoritm capabil să răspundă acestor deziderate,
prezentăm algoritmul datorat lui Kaufmann, numit aloritmul înmulŃirii latine.
Introducem, ca punct de plecare, o matrice M (1) , care, în locul valorilor de
„ 1 ” utilizate în matricea obişnuită a arcelor, utilizează însuşi arcul respectiv,
( )
reprezentat prin vârfurile care îl compun. M (1) = mij(1) i , j =1,n , unde

 xi x j dacă există arc de la xi la x j


mij(1) = 
0 în rest
~
Prin suprimarea primei litere în matricea M (1) se obŃine o matrice M (1) ,
~
numită „a destinaŃiilor posibile”. Se compun matricele M (1) şi M (1) prin operaŃia
de „înmulŃire latină”. M ( ) L Mɶ ( ) .
1 1

ÎnmulŃirea latină a matricilor se face formal ca şi înmulŃirea a două matrici,


fără însumare şi fără înmulŃire efectivă, Ńinând cont că:
- produsul latin a două componente participante la calcul este nul dacă cel puŃin
una din ele este nulă.
- produsul latin a două componente participante este nul dacă au vârf comun.
- rezultatul compunerii constă în scrierea în continuare a vârfurilor componente
ale simbolurilor participante.
Prin definiŃia produsului latin avem M ( 2 ) = M (1) L Mɶ (1) ,
M ( 3) = M ( 2) L Mɶ (1) , … Algoritmul continuă până la obŃinerea matricii M ( n −1) ,
deoarece într-un graf cu n vârfuri un drum hamiltonian are n − 1 arce.
În matricea M ( n −1) citim, conform modului de scriere de mai sus, toate
drumurile hamiltoniene ale grafului.
Dacă toate elementele lui M ( n −1) sunt zerouri ( M ( n −1) = 0 ), graful nu
admite drum hamiltonian.
ObservaŃie. Procedeul este aplicabil pentru orice tip de graf orientat (cu
sau fără circuit), dar pentru grafurile fără circuite se recomandă algoritmul lui
Chen, întrucât pentru grafuri de dimensiuni mari, algoritmul înmulŃirii latine este
greoi (dar sigur).

119
Exemplul 3. Să se determine drumurile hamiltoniene pentru graful

1 3
4

5
Cum ştim că graful are circuite, vom folosi metoda înmulŃirii latine.
Matricele M (1) şi Mɶ ( ) vor fi:
1

 0 x1 x 2 0 0 x1 x5 
 
 0 0 x 2 x3 x2 x4 0 
M (1) = 0 0 0 x3 x 4 0 
 
 x 4 x1 0 0 0 x 4 x5 
 0 0 x5 x 3 0 0 

0 x2 0 0 x5 
 
0 0 x3 x4 0
~
M (1) =0 0 0 x4 0
 
 x1 0 0 0 x5 
0 0 x3 0 0 

  x1 x 2 x3  
 0 0   x1 x 2 x 4 0 
  x1 x5 x3  
 x 2 x 4 x1 0 0 x 2 x3 x 4 x 2 x 4 x5 
M (2 ) = 
 x3 x 4 x1 0 0 0 x3 x 4 x 5 
 0 x 4 x1 x 2 x 4 x5 x3 0 x 4 x1 x5 
 
 0 0 0 x5 x 3 x 4 0 

120
  x1 x 2 x3 x 4  
 0 0 0   x1 x 2 x 4 x5 
  x1 x5 x3 x 4  
  x 2 x 4 x1 x5  
 x 2 x3 x 4 x1 0 x 2 x 4 x5 x 3 0  
M (3 )
=  x 2 x3 x 4 x 5  
 0 x3 x 4 x1 x 2 0 0 x3 x 4 x1 x5 
 
  x 4 x1 x 2 x3  
0 0   0 0
  x 4 x1 x5 x3  
x x x x 0 0 0 0 
 5 3 4 1 
0 0 x1 x 2 x 4 x5 x3 0 x1 x 2 x3 x 4 x5 
 
0 0 x 2 x 4 x1 x5 x3 0 x 2 x3 x 4 x1 x5 
M (4 ) 
= 0 0 0 0 0 
 
0 0 0 0 0 
0 x x x x x 0 0 0 
 5 3 4 1 2 
În graful dat există 5 drumuri hamiltoniene.

7.4. Algoritmul lui Fleury pentru drumuri euleriene

Fie G = ( X , U ) un graf conex în care X = n şi U = m . Dorim ca în


graful G să determinăm un ciclu eulerian. Pentru acest lucru, o soluŃie este de a
pleca de la un lanŃ simplu C (iniŃial format dintr-o muchie a grafului) şi la care să
adăugăm muchii încât să păstrăm lanŃul simplu şi în graful care se formează să nu
apară muchii izolate. Dacă nu există şi alte opŃiuni, atunci se utilizează şi muchiile
izolate.
Algoritmul care se bazează pe principiul enunŃat mai sus este cunoscut
drept algoritmul lui Fleury.
Pentru a putea prezenta acest algoritm este necesar să considerăm un mod
special de specificare a lanŃurilor. Până acum am făcut acest lucru fie sub forma
L = { x0 , x1 ,..., xr } , unde xi ∈ X (reprezentarea prin noduri), fie prin
L = {u1 , u2 ,..., us } , unde ui ∈ U având condiŃia ca pentru orice i = 1, 2,..., s − 1
muchiile ui şi ui +1 au o extremitate comună (reprezentarea prin muchii).
Reprezentarea utilă a lanŃurilor este o reprezentare combinată în sensul că
sunt prezente atât nodurile, cât şi muchiile implicate în formarea lanŃului sub forma
L = { x0 , u1 , x1 , u2 ,..., xr −1 , ur , xr } , unde pentru orice i = 1, 2,..., r avem
ui = { xi −1 , xi } .
Prezentăm în comtinuare algoritmul lui Fleury:
121
Algoritmul 4.
1. Se alege un vârf x0 ∈ X şi considerăm C0 = { x0 } şi i = 0 .
2. Pentru xi alegem o muchie ui +1 = ( xi , xi +1 ) care nu apare în Ci şi
care nu este izolată în graful parŃial al lui G obŃinut prin eliminarea
muchiilor care formează Ci (sau o muchie izolată din graful parŃial
menŃionat, dacă nu avem altă variantă). Definim lanŃul
Ci +1 = {Ci , ui +1 , xi +1} = { x0 , u1 , x1 , u2 ,..., xi , ui +1 , xi +1} şi facem i = i + 1 .
3. Dacă i = m ne oprim, Cm este ciclul eulerian, altfel se trece la pasul (2).

Teorema 3. Dacă G = ( X , U ) este un graf eulerian, atunci orice ciclu
obŃinut prin aplicarea algoritmului 2 este un ciclu eulerian.

Exemplul 4. Fie graful următor

1 5
4

3
2 6

deci G = ( X , U ) , cu X = {1, 2,3, 4, 5, 6} şi U = {u1 , u2 , u3 , u4 , u5 , u6 , u7 , u8 , u9 } ,


unse s-a notat u1 = {1, 4} , u2 = {1,5} , u3 = {2,3} , u4 = {2, 4} , u5 = {3, 4} ,
u6 = {3,5} , u7 = {3, 6} , u8 = {4, 5} şi u9 = {5, 6} . Avem astfel n = X = 6 şi
m = U = 9.
Pentru aplicarea algoritmului 4 se realizează alegerea unui nod x0 = 3 ∈ X
şi se fac iniŃializările C0 = {3} , i = 0 .
La prima iteraŃie graful parŃial ( X , U \ C0 ) coincide cu graful G şi putem
alege orice muchie care are o extremitate în nodul 3, să spunem u5 = {3, 4} .
Definim lanŃul C1 = {3, u5 , 4} şi facem i = 1 . Cum i ≠ 9 , procesul este reluat.
La a doua iteraŃie, graful parŃial ( X , U \ C1 ) este reprezentat prin

122
1 5
4

3
2 6
şi deoarece nu conŃine muchii izolate, putem alege orice muchie care are o
extremitate nodul 4, să spunem u8 = {4, 5} . Definim lanŃul C2 = {3, u5 , 4, u8 ,5} şi
facem i = 2 , urmând a relua pasul 2.
A treia iteraŃie are la bază graful parŃial

1 5
4

3
2 6
care nu conŃine muchii izolate şi astfel pentru continuare putem alege orice muchie
care are o extremitate în nodul 5, să spunem u2 = {1,5} . Definim lanŃul
C3 = {3, u5 , 4, u8 ,5, u2 ,1} şi facem i = 3 . Deoarece i ≠ 9 se revine la pasul 2.
A patra iteraŃie porneşte de la graful parŃial

1 5
4

3
2 6
în care se poate observa că singurele contunuări posibile sunt legate de muchiile
din lanŃul {1, 4, 2,3} (corespunzând şi iteraŃiilor cinci şi şase). Facem în ordine
alegerile u1 = {1, 4} , u4 = {2, 4} şi u3 = {2,3} . În final se obŃine lanŃul

123
C6 = {3, u5 , 4, u8 ,5, u2 ,1, u1 , 4, u4 , 2, u3 ,3} .
Facem i = 6 . Urmează a relua pasul al doilea.
La a şaptea iteraŃie, graful parŃial ( X , U \ C6 ) este

1 5
4

3
2 6
În acest graf nu conŃine muchii izolate şi putem alege orice muchie care are o
extremitate în nodul 3, să spunem u7 = {3, 6} şi astfel să formăm lanŃul
C7 = {3, u5 , 4, u8 ,5, u2 ,1, u1 , 4, u4 , 2, u3 ,3, u7 , 6}
şi trecem la i = 7 . La reluarea pasului 2, graful parŃial obŃinut prin eliminarea
muchiilor din lanŃul C7 conŃine lanŃul {6,5, 3} şi prin iteraŃiile 8 şi 9 se ajunge la
un lanŃ
C9 = {3, u5 , 4, u8 ,5, u2 ,1, u1 , 4, u4 , 2, u3 ,3, u7 , 6, u9 , 5, u3 , 3}
Deoarece ajungem la i = 9 , algoritmul se opreşte. LanŃul C9 are ambele
extremităŃi nodul 3 şi astfel este un ciclu. Fiecare muchie din ciclul C9 apare o
singură dată şi deci ciclul este unul simplu. Ciclul simplu C9 conŃine toate
muchiile din graful G , deci este un ciclu eulerian.

7.5. Algoritmul lui Hierholzer pentru drumuri euleriene

O altă idee pentru determinarea unui ciclu eulerian este să determinăm


ciclurile formate cu muchii distincte şi care să aibă câte un nod comun şi unirea
acestor cicluri în ciclul eulerian căutat.
ExistenŃa ciclurilor cu un nod comun este garantată de faptul că graful
considerat este conex.
Ideea de mai sus a fost utilizată de Hierholzer pentru realizarea
argoritmului de mai jos, cunoscut drept algoritmul lui Hierholzer.
Fie graful G = ( X , U ) .

124
Algoritmul 5.
1. Se alege un vârf x0 ∈ X şi plecând de la x0 , prin traversarea fiecărei

{
muchii neconsiderate formăm un ciclu C0 = u10 , u20 ,..., ur0
0
} şi i = 0 .
2. Dacă graful parŃial format cu muchiile cuprinse în ciclul Ci coincide cu
G atunci ne oprim, Ci reprezintă ciclul eulerian căutat, altfel se
continuă.
3. Fie nodul xi , extremitate a muchiei uki din ciclul Ci şi al unei muchii ui*
care nu este în Ci . Pornind de la nodul xi , în graful parŃial al lui G cu
mulŃimea de muchii formată de muchiile nefolosite la formarea lui Ci ,
formăm un ciclu ca la pasul (1), notat Ci* .

{
4. Formăm ciclul Ci +1 = u1i +1 , u2i +1 ,..., uri +1
i +1
} pornind din xi , parcurgând
integral Ci până ajungem din nou la xi şi apoi parcurgând integral Ci*
până se ajunge la xi
5. Facem i = i + 1 şi trecem la pasul (2).

125
VIII. FLUX MAXIM ÎN REłELE DE TRANSPORT
8.1. ConsideraŃii generale

DefiniŃie. Un graf orientat ponderat G = ( X , U , p ) fără circuite, se


numeşte reŃea de transport dacă îndeplineşte următoarele condiŃii:
1. Dacă X = {x1 , x 2 ,..., x n }, atunci oricare ar fi 1 ≤ i ≤ n avem ( xi , xi ) ∈ U .
2. Există un vârf unic x1 ∈ X în care nu intră niciun arc, numit sursa reŃelei.
3. Există un unic vârf x n din care nu iese niciun arc, numit destinaŃia reŃelei.
4. G este conex şi există drumuri de la x1 la x n .
5. S-a definit o funcŃie c : U → ℝ astfel încât c(u ) ≥ 0 pentru orice arc u ∈ U ;
numărul c(u ) se numeşte capacitatea reŃelei.

DefiniŃie. Fie G = ( X , U , p ) o reŃea de transport. Fiind dată o
submulŃime Y ⊂ X , se numeşte tăietură de suport Y mulŃimea de arce
ω − (Y ) = {( x , x ) ∈U x ∉ Y , x ∈ Y } ⊂ U
i j i j

ω+ (Y ) = {( x , x ) ∈U x ∈ Y , x ∉ Y } ⊂ U .
i j i j

(
Cantitatea c ω − (Y ) =) ∑p ij este capacitatea tăieturii ω − (Y ) .
( )
xi , x j ∈ω− (Y )


DefiniŃie. Fie G = ( X , U , p ) o reŃea de transport. O funcŃie ϕ : U → ℝ +
se numeşte flux pe reŃeaua de transport G = ( X , U , p ) dacă îndeplineşte
următoarele condiŃii:
1. CondiŃia de mărginire a fluxului:
( )
pentru orice xi , x j ∈ U , avem 0 ≤ ϕ xi , x j ≤ p ij . ( )
2. CondiŃia de conservare

∑ ϕ(x k ,xj )= ∑ ϕ(x , xh ) .


n n
Pentru orice xi ∈ X , avem j
k =1 h =1
( )
xk , x j ∈Γ  x , x ∈Γ
 j h

126
ObservaŃii
1. CondiŃia 2) afirmă că pentru orice vârf x cu x ≠ x1 şi x ≠ x n , suma
fluxurilor de pe arcele care intră în x este egală cu suma fluxurilor pe arcele
care ies din x .
2. FuncŃia ϕ nu este unică.
DefiniŃie. Fie G = ( X , U , p ) o reŃea de transport. Un arc xi , x j ∈ U se ( )
numeşte arc saturat, dacă în raport cu ϕ are loc relaŃia ϕ xi , x j = pij . ( )

Se pune problema determinării funcŃiei ϕ astfel încât suma fluxurilor pe
arcele ce intră în x n să fie maximă, aşa-numita problemă a fluxului maxim.
Adică, dintre toate fluxurile ϕ :U → ℝ + posibile în reŃeaua de transport
G = ( X ,U , p ) se urmăreşte să se determine fluxul ϕ̂ pentru care
n n

∑h =1
ϕˆ ( xh , xn ) ≥ ∑
h =1
ϕ ( xh , xn ) .
( xh , xn )∈U ( xh , xn )∈U
PropoziŃia 1. Fie G = ( X , U , p ) o reŃea de transport având sursa x1 ,
destinaŃia x n şi ϕ :U → ℝ + un flux oarecare în reŃeaua G , atunci:
n n

∑ ϕ ( x1 , xi ) = ∑ ϕ ( x j , xn )
i =1 j =1
( x1 , xi )∈U ( x j , xn )∈U
DemonstraŃie. RelaŃia din enunŃ exprimă faptul că fluxul care iese din x1
ajunge în x n . Avem ω − ( x1 ) = ω + ( x n ) = 0 şi se deduce că:
 
∑ ∑  ϕ (x i , x j ) − ∑ ϕ ( x j , x n ) =
x j ∈X  (xi , x j )∈ω− (x j ) (x j , xn )∈ω− ( xn ) 

= ∑ ϕ(x j , xn ) − ∑− ϕ(x1 , xi )
(x j , xn )∈co− ( xn ) (x1 , xi )∈ω (xi )

DefiniŃie. Fie G = ( X , U , p ) o reŃea de transport având sursa x1 ,
destinaŃia x n şi ϕ :U → ℝ + un flux oarecare în reŃeaua G . Valoarea
Φ= ∑ ϕ ( x j , xn ) = ∑ ϕ ( x1 , xi )
( )
x j , xn ∈ω − ( xn ) ( x1 , xi )∈ω ( xi )
+

se numeşte valoarea totală a fluxului ϕ : Γ → ℝ + .



127
PropoziŃia 2. Fie G = ( X , U , p ) o reŃea de transport şi fie Y ⊂ X o
submulŃime cu proprietăŃile:
- pentru sursa x1 a lui G avem x1 ∉ Y ;
- pentru destinaŃia x n a lui G avem x n ∈ Y .
Atunci pentru orice flux ϕ :U → ℝ + avem
Φ= ∑ ϕ(xi , x j ) − ∑ (
ϕ(xi , x j ) ≤ c ω = (Y ) . )
( )
xi , x j ∈ω− (Y ) ( )
xi , x j ∈ω+ (Y )

DemonstraŃie. Avem:
∑ ϕ ( xi , x j ) − ∑ ϕ ( xi , x j ) =
( )
xi , x j ∈ω − (Y ) ( )
xi , x j ∈ω + (Y )

 
=∑  ∑ ϕ ( xi , xk ) − ∑ + ϕ ( xk , x j )
xk ∈Y  ( xi , x )∈ω − ( x )
=

 k k ( xk , x j )∈ω ( xk ) 
 
=∑ ∑ ϕ ( xi , xk ) − ∑ + ϕ ( xk , x j )
xk ∈Y  ( xi , x )∈ω − ( x )
−

 k k ( xk , x j )∈ω ( xk ) 
 
− ∑  ∑ ϕ ( xi , xk ) − ∑ + ϕ ( xk , x j )
xk ∈X \Y  ( xi , x )∈ω − ( x )
=

 k k ( xk , x j )∈ω ( xk ) 
= ∑ ϕ ( x1 , x j ) = Φ
( )
x1 , x j ∈ω + x1 ( )
ceea ce demonstrează egalitatea, căci:
= ∑ ϕ ( xi , x j ) − ∑ ϕ ( xi , x j ) ≤
Φ
( xi , x j )∈ω − (Y ) ( xi , x j )∈ω + (Y )
≤ ∑ ϕ ( xi , x j ) ≤ .
( )
xi , x j ∈ω − ( Y )

≤ ∑ p ( xi , x j ) = c ω − (Y ) ( )
( xi , x j )∈ω − (Y )

128
8.2. Algoritmul Ford-Fulkerson

În continuare vom considera că toate capacităŃile sunt numere raŃionale sau


întrucât numărul total de arce este finit, chiar numere naturale.
Pe baza consideraŃiilor precedente se deduce următorul algoritm cunoscut
sub numele de algoritmul Ford-Fulkerson pentru determinarea fluxului maxim
într-o reŃea de transport.
Algoritm
Pasul I
Se construieşte un flux iniŃial ϕ 0 , care verifică condiŃiile de conservare în
fiecare vârf şi de mărginire pe fiecare arc, de exemplu chiar fluxul având
( )
componente nule pe fiecare arc al reŃelei, ϕ0 xi , x j = 0 , oricare ar fi

( x , x ) ∈U .
i j

Pasul II
Folosind operaŃiile de marcare ce vor fi prezentate mai jos, se cercetează
dacă fluxul iniŃial ϕ 0 este maxim; operaŃiunile de marcare constau în
următoarele:
a) se marchează sursa reŃelei x1 cu semnul „ + ”;
b) vârfurile x j ∈ ω + ( x1 ) vor fi marcate cu „ + x1 ” dacă arcul x1 , x j ( ) este
nesaturat;
c) dacă vârful x j este deja marcat şi dacă pentru un vârf x k ∈ ω + x j ( ) arcul
(x , x ) este nesaturat, atunci marcăm vârful x
j k k prin „ + x j ”;
d) dacă vârful x j este deja marcat şi dacă pentru un vârf x k ∈ ω − x j ( ) arcul
(x x ) are fluxul nenul, marcăm vârful x
k j k prin „ − x j ”.;
În urma terminării operaŃiei de marcare, putem întâlni următoarele
situaŃii:
1. Dacă destinaŃia x n a reŃelei nu s-a marcat, atunci fluxul este maxim şi
algoritmul se termină, altfel se aplică procesul (2) şi se reia pasul II.
2. Dacă destinaŃia x n s-a putut marca, atunci fluxul nu este maxim şi poate fi
măsurat astfel:
a) se alege un drum de la x1 la x n ;
b) pe arcele drumului marcat cu „ + ” fluxul se majorează cu o cantitate θ
de flux (de exemplu θ = 1 );
c) pe arcele drumului marcat cu „-“ fluxul se micşorează cu aceeaşi
cantitate θ ;
d) fluxul arcelor nemarcate nu se schimbă;
.■

129
Algoritmul are un număr finit de paşi, iar fluxul maxim se atinge când nu mai
poate fi marcată destinaŃia x n a reŃelei.
ObservaŃie. Mărimea fluxului se poate face cu mai mult decât o unitate,
evitându-se astfel prea multe operaŃii de marcare, astfel: se consideră un drum V
format din drumuri marcate cu „+” sau „-“ ce uneşte x1 cu x n , uşor de găsit
urmărind vârfurile marcate în sensul de la x n către x1 . Notăm V + mulŃimea
arcelor ( x, y ) unde y este marcat cu „+” şi V − mulŃimea arcelor ( x, y ) unde y
este marcat cu „-“. Calculăm
θ1 = min+ {c(u ) − ϕ(u )}
u∈V

θ 2 = min− ϕ(u )
u∈V

şi θ = min{θ1 , θ 2 }. Observăm că θ > 0 şi este număr întreg.


Mărim cu θ pe fiecare arc u ∈V + şi micşorăm cu θ pe fiecare arc u ∈V − ,
obŃinând, la ieşire, un flux mărit cu θ .
Se repetă etapa a doua cu fluxul obŃinut. Valoarea fluxului maxim se găseşte
realizând o tăietură prin separarea cu o linie a vârfurilor marcate de cele nemarcate
şi capacitatea acestei tăieturi reprezintă fluxul maxim, sau adunând fluxurile
arcelor incidente interior lui x n .

8.3. Exemple

Exemplul 1. Fie reŃeaua

+x1
x2
2,0 5,0 8,0
7,0
5,0
x1 x3 +x1 x5 +x2

4,0
3,0 5,0
x4
+x1

130
Vârful x1 este sursa reŃelei, vârful x5 este destinaŃia şi se verifică
următoarele:
ω − ( x1 ) = ∅ , ω + ( x 1 ) = {( x1 , x 2 ), ( x1 , x3 ), ( x1 , x 4 )}
ω − ( x5 ) = {( x 2 , x5 ), ( x 4 , x5 )}, ω + ( x5 ) = ∅
Pentru reŃeaua din figură vrem să determinăm fluxul maxim. Considerăm
( ) (
fluxul iniŃial ϕ0 xi , x j = 0 pentru orice xi , x j ∈ U . )
Pasul 2
1) Observăm prin procedeul de marcaj am putut marca destinaŃia x5 a reŃelei.
Atunci fluxul nu este maxim şi poate fi mărit.
Alegem un drum de la x1 la x5
d 1 : ( x1 , x 2 , x5 )
Fluxul se majorează cu cantitatea
θ = min+ {c(u ) − ϕ(u )} = min{2 − 0,8 − 0} = 2 ;
u∈V

(arcul ( x1 , x 2 ) se va satura).
Fluxul va avea valoarea ϕ1 = ϕ 0 + 2 = 2 .

x2
2,2 5,0 8,2
7,0
5,0
x1 x3 +x1 x5 +x4

4,0
3,0 5,0
x4
+x1

Am putut marca destinaŃia x5 a reŃelei, fluxul nu este maxim şi poate fi


mărit. Fie drumul d 2 : {x1 , x 4 , x 5 } , mărim fluxul cu θ = 3 (arcul ( x1 , x 4 ) (x1, x4)
se va satura).
Noul flux va avea valoarea ϕ 2 = ϕ1 + 3 = 5 .

131
+x3
x2
2,2 5,0 8,2
7,0
5,0
x1 x3 +x1 x5 +x4

4,0
3,3 5,3
x4
+x3

Prin repetarea procedeului de marcaj am putut marca din nou destinaŃia,


deci fluxul nu este maxim. Fie drumul d 3 : {x1 , x3 , x 4 , x 5 } ,
θ = min+ {c(u ) − ϕ(u )} = min{5 − 0.4 − 0,5 − 3} = 2
u∈V

Cu cantitatea θ = 2 vom mări fluxul şi ϕ 3 = ϕ 2 + 2 = 7

+x3
x2
2,2 5,0 8,2
7,0
5,2
x1 x3 +x1 x5 +x2

4,2
3,3 5,3+2
x4

DestinaŃia a fost marcată, alegem drumul d 4 : {x1 , x3 , x 2 , x5 },


θ = min{5 − 2,5 − 0,8 − 2} = 3 . Fluxul va fi mărit cu cantitatea θ = 3 şi obŃinem
ϕ 4 = ϕ 3 + 3 = 10 .

Exemplul 2. Pentru a transporta în 6 locaŃii anumite elemente se poate
opta pentru variantele din reŃeaua de mai jos, ştiind că numerele din afara
parantezelor reprezintă capacităŃile arcelor, iar numerele din interior, valorile unui
flux iniŃial ce nu saturează niciun arc. Se doreşte găsirea fluxului maxim de
transport
132
+x1
x2
3,(2) 4,(1)
5,(1) 4,(2)
8,(5) 6,(2) 5,(3)
x1 x3 x5 x6
+x1 3,(1) 10,(5)
5,(2) +x5
7,(2)
+x2
x4
+x1

Rezolvare: verificăm dacă flux iniŃial constituie un flux realizabil, adică


ϕ : U → ℝ + îndeplineşte condiŃia de mărginire a fluxului, deci orice ( xi , x j ) ∈ U
( )
avem 0 ≤ ϕ xi , x j ≤ p ij , i, j ∈ {1,2,...,6} . ObŃinem:
0 < ϕ( x1 , x 2 ) = 2 < p12 = 3 , 0 < ϕ( x1 , x3 ) = 5 < p13 = 8
0 < ϕ( x1 , x 4 ) = 2 < p14 = 7 , 0 < ϕ( x 2 , x6 ) = 1 < p 26 = 4
0 < ϕ( x3 , x 2 ) = 1 < p32 = 5 , 0 < ϕ( x3 , x 4 ) = 2 < p34 = 5
0 < ϕ( x3 , x5 ) = 2 < p 35 = 6 , 0 < ϕ( x 4 , x6 ) = 5 < p 46 = 10
0 < ϕ( x5 , x 4 ) = 1 < p54 = 3 , 0 < ϕ( x5 , x 6 ) = 3 < p 56 = 5 .
Pentru condiŃia de conservare oricare ar fi xi ∈ X
6 6

∑ ϕ ( xk , x j ) = ∑ ϕ ( x j , xh )
k =2 h =1

( xk , x j )∈U ( x j , xh )∈U
avem
Vârfuri Flux care intră în vârful xi Flux care iese în vârful xi
x2 3 3
x3 5 5
x4 5 5
x6 4 4
Se observă că şi PropoziŃia 1. este verificată, adică
4 5

∑ ϕ(x1 , xi ) = ∑ ϕ(x j , x6 ) = 9
i=2 j =2

deci fluxul iniŃial este ϕ 0 = 9 .

133
Trecem la Pasul II din algoritmul Ford-Fulkerson
1) DestinaŃia x 6 a putut fi marcată. Alegem drumul d 1 : {x1 , x 3 , x5 , x 6 } pentru
care
θ = min{8 − 5,6 − 2,5 − 3} = 2
şi
ϕ1 = 9 + 2 = 11 .
Arcul ( x 5 , x 6 ) s-a saturat.

+x1
x2
3,(2) 4,(1)
5,(1) 4,(2)
8,(5+2) 6,(2+2) 5,(3+2)
x1 x3 x5 x6
+x1 3,(1) 10,(5)
5,(2) +x4
7,(2)
x4
+x1

2) DestinaŃia x6 a putut fi marcată. Alegem drumul d 2 : {x1 , x 4 , x6 } ;


θ = min{7 − 2,10 − 5} = 5 ; ϕ 2 = 11 + 5 = 16 . Arcele ( x1 , x 4 ) , ( x 4 , x6 ) s-au
saturat.

+x1
x2
3,(2) 4,(1)
5,(1) 4,(2)
8,(7) 6,(4) 5,(5)
x1 x3 x5 x6
+x1 3,(1) 10,(5+5)
5,(2) +x2
7,(2+5)
+x3
x4

3) DestinaŃia x6 a putut fi marcată. Alegem drumul d 3 : {x1 , x 2 , x6 };


θ = min{3 − 2,4 − 1} = 1 ; ϕ 3 = 16 + 1 = 17 . Arcul ( x1 , x 2 ) s-a saturat.

134
+x3
x2
3,(2+1) 4,(1+1)
5,(1) 4,(2)
8,(7) 6,(4) 5,(5)
x1 x3 x5 x6
+x1 3,(1) 10,(10)
5,(2) +x2
7,(7)
x4

4) DestinaŃia x 6 a putut fi marcată. Alegem drumul d 4 : {x1 , x3 , x 2 , x 6 };


θ = min{8 − 7,5 − 1,4 − 2} = 1 ; ϕ 4 = 17 + 1 = 18 . Arcul ( x1 , x3 ) s-a saturat.

x2
3,(3) 4,(2+1)
5,(1+1) 4,(2)
8,(7+1) 6,(4) 5,(5)
x1 x3 x5 x6
3,(1) 10,(10)
5,(2)
7,(7)
x4

Observăm că destinaŃia nu s-a mai putut marca. Deci fluxul este maxim ϕ = 18 .

135
IX. REłELE DE PROGRAMARE A ACTIVITĂłILOR

O activitate este un proces precis determinat, care consumă timp şi resurse


şi are următoarele proprietăŃi: indivizibilitate (nu se mai descompune în
subactivităŃi), durată cunoscută şi neinteruptibilitate (odată începută, nu mai
poate fi întreruptă).
Un proiect este un proces complex destinat atingerii unui scop bine
precizat şi care poate fi caracterizat printr-un obiectiv (produs, cantitate de
informaŃii etc.), un ansamblu de activităŃi (subacŃiuni, subprocese, operaŃii) şi un
proces tehnologic (intercondiŃionările între activităŃi).
O problemă de programare a activităŃilor constă în stabilirea unei ordini
de efectuare a operaŃiilor (activităŃilor) unui proiect, astfel ca interdependenŃele
dintre ele să fie respectate în cadrul resurselor disponibile şi durata totală de
execuŃie a acestuia să fie minimă.
În literatura de specialitate, problemele de programare a activităŃilor mai
sunt numite probleme de ordonanŃare.
Un proiect poate fi prezentat prin intermediul unui tabel în care se
precizează activităŃile desfăşurate, condiŃionarea lor directă în sensul precedenŃei
imediate şi durata de execuŃie a fiecărei activităŃi.
Un exemplu de tabel de prezentare a unui proiect este
ActivităŃile
ActivităŃile
direct precedente Durate
proiectului
(condiŃionări)
A - 3
B - 2
C A 2
D B 6
E B 4
F C,D,E 4
G E 1
Pornind de la prezentarea proiectului, acesta se poate transpune într-un graf
orientat. Există două moduri de construcŃie a grafului de activităŃi, arc activitate
sau vârf activitate

136
9.1. Graful arc/activitate, metoda drumului critic

Pentru construcŃia grafului de activităŃi de tip arc/activitate se procedează


după următoarele reguli:
• fiecare activitate este reprezentată de un arc pe care se trece identificarea
activităŃii şi în paranteze durata ei. În exemplul de mai sus, considerând
activitatea D cu durata de 6, ea se reprezintă printr-un arc

D(6)

• activităŃile care au durata egală cu zero sunt considerate activităŃi de


aşteptare şi se reprezintă prin arce desenate cu linie dublă. Astfel, dacă un
proiect conŃine o activitate R cu durata egală cu zero, în graful de activităŃi
vom avea reprezentarea

R(0)

• toate activităŃile necondiŃionate se consideră a avea extremitatea iniŃială


comună, vârful obŃinut fiind considerat vârful de start al proiectului. În
exemplificarea de mai sus activităŃile necondiŃionate sunt A şi B, deci
arcele corespunzătoare lor vor pleca din acelaşi vârf notat s şi vom avea

A(3)

B(2)

• toate activităŃile care nu apar în coloana de precedenŃă directă se consideră


a avea o extremitate finală comună, vârful astfel obŃinut fiind considerat
vârful terminal al proiectului. În tabelul de activităŃi considerat, activităŃile
F şi G nu apar în coloana precedenŃelor directe, deci arcele
corespunzătoare lor vor avea o extremitate finală comună notată t
obŃinând

137
F(4)

t
G(1)

• toate activităŃile care au o activitate comună care le precede au


extremitatea iniŃială identică cu extremitatea finală a activităŃii care le
precede direct. În exemplul considerat activităŃile D şi E sunt condiŃionate
direct de activitatea B şi astfel, în graful asociat proiectului avem

D(6)

B(2)

E(4)

• cu exceŃia cazului când între două vârfuri se formează două arce sau a celui
în care se conŃine un vârf în care atât gradul de intrare, cât şi cel de ieşire
sunt mai mari decât 1, dacă mai multe activităŃi condiŃionează aceeaşi
activitate, atunci extremităŃile finale ale activităŃilor care condiŃionează
reprezintă un vârf comun, şi anume extremitatea iniŃială a activităŃii
condiŃionate. În tabelul de mai sus, activităŃile C, D şi E condiŃionează
activitatea F şi astfel se obŃine

C(2)

D(6) F(4)

E(4)

138
• când între două vârfuri se formează două arce, ca în cazul

P(3)

Q(2)

se introduce o activitate suplimentară numită activitate fictivă, cu durata de


execuŃie zero şi care se reprezintă printr-un arc cu linie punctată.
Introducerea acestui arc se poate face la oricare din arcele cu extremităŃile
comune pentru a forma o reprezentare

P(3)

Q(2) Z(0)

sau

P(3) Z(0)

Q(2)

• când atât gradul de intrare, cât şi cel de ieşire dintr-un vârf sunt mai mari
decât 1 se introduc activităŃi fictive pentru a elimina situaŃia apărută. De
exemplu, dacă în graful de activităŃi s-a obŃinut situaŃia

139
F(4) H(7)

G(1)
J(3)

atunci se introduce activitatea fictivă Z (cu durata egală cu zero) şi se


obŃine graful

F(4) H(7)

G(1)
J(3)

în care fiecare vârf are fie gradul de ieşire, fie cel de intrare egal cu 1.
• în final se numerotează vârfurile crescător de la vârful s către vârful t .
Considerând proiectul prezentat în tabelul de mai sus, respectând modul de
construcŃie al grafului de activităŃi de tipul arc/activitate, rezultă reprezentarea

A(3) C(2)
1

D(6) F(4)
s 4 t

B(2) E(4) G(1)


2 3
Metoda drumului critic sau algoritmul lui Ford asociază fiecărul vârf o
casetă cu două celule, cea stângă pentru specificarea timpului minim de început a
activităŃilor care au vârful drept extremitate iniŃială (numit şi termenul cel mai
devreme de începere a activităŃilor), şi cea dreaptă pentru timpul maxim de
începere a activităŃilor respective (sau termenul cel mai târziu de începere a
activităŃilor). Pentru un vârf i vom nota timpul minim cu timin şi timpul maxim cu
tiMax iar caseta asociată vârfului va fi de forma
140
timin tiMax .

Considerăm că în urma construcŃiei s-a obŃinut graful G = ( X , U ) în care


dacă un arc ( x, y ) corespunde activităŃii N xy , atunci are ponderea d xy egală cu
durata execuŃiei activităŃii şi în rest d xy = 0 . Formăm astfel o matrice de ponderare
corespunzătoare duratelor de execuŃie ale activităŃilor D = d xy ( ) x , y∈ X
, care este o

matrice pătrată de ordin X .


Algoritmul 1.
1. Se iniŃializează caseta vârfului s cu t smin = 0 .
2. Dacă s-a completat ttmin , atunci se trece la pasul 6, altfel se continuă.

{ ( j)
3. Se determină mulŃimea A = xi ∈ X x j , xi ∈ U , t min completat . }
4. Pentru fiecare x ∈ A se determină t xmin = max t ymin + d yx .
( y , x )∈U
( )
5. Se trece la pasul 2.
6. Se iniŃializează ttMax = ttmin din caseta vârfului t .
7. Dacă s-a completat tsMax , atunci ne oprim, drumul care trece prin vârfurile
cu t xmin = t xMax este drumul optim în reŃeaua de pragramare a activităŃilor
(numit şi drum critic), altfel se continuă.
{ ( j)
8. Se determină mulŃimea B = xi ∈ X xi , x j ∈ U , t Max completat . }
9. Pentru fiecare x ∈ B se determină t xMax = min t xMax − d yx .
( y , x )∈U
( )
10. Se trece la pasul 7.

Exemplul 1. Considerăm un proiect în care activităŃile sunt cele din tabelul
ActivităŃile
ActivităŃile
direct precedente Durate
proiectului
(condiŃionări)
A - 3
B - 2
C A 2
D B 6
E B 4
F C,D,E 4
G E 1

141
Aşa cum s-a văzut mai sus se obŃine graful G = ( X ,U ) cu
X = {s,1, 2,3, 4, t} şi U = {( s,1) , ( s, 2 ) , (1, 4 ) , ( 2,3) , ( 2, 4 ) , ( 3, 4 ) , ( 3, t ) , ( 4, t )} .
Se obŃine următoarea matrice a ponderilor asociate duratelor de execuŃie:
0 3 2 0 0 0
 
0 0 0 0 2 0
0 0 0 4 6 0
D= 
0 0 0 0 0 1
0 0 0 0 0 4
 
0 0 0 0 0 0 
Graful, la care se adaugă casetele asociate fiecărui vârf, are reprezentarea

A(3) C(2)
1

D(6) F(4)
s 4 t

B(2) E(4) G(1)


2 3

Aplicând pasul 1 facem t smin = 0 şi deoarece nu s-a completat ttmin are loc
prima iteraŃie a paşilor 3, 4 şi 5.
Paşi 3, 4, 5, iteraŃie 1. ObŃinem A = {1, 2} .
Pentru x =1 avem doar arcul ( s,1) şi astfel
t1min = max ( t ymin + d y1 ) = max {( 0 + 3)} = 3 .
( y ,1)∈U
Pentru . x=2 avem doar arcul ( s, 2 ) şi astfel
t2min = max ( t ymin + d y 2 ) = max {( 0 + 2 )} = 2 .
( y ,2 )∈U
Cum încă nu s-a completat ttmin se reiterează.
Paşi 3, 4, 5, iteraŃie 2. ObŃinem A = {3} .şi având doar arcul ( 2,3) rezultă
t3min = max ( t ymin + d y 3 ) = max {( 2 + 4 )} = 6 . Din nou nu s-a completat ttmin .
( y ,3)∈U
Paşi 3, 4, 5, iteraŃie 3. Ajungem la A = {4} pentru care avem arcele
(1, 4 ) , ( 2, 4 ) şi ( 3, 4 ) astfel că
142
t4min = max ( t ymin + d y 4 ) = max {( 3 + 2 ) , ( 2 + 6 ) , ( 6 + 0 )} = 8
( y ,4 )∈U
Neavând completat ttmin realizăm o nouă iteraŃie.
Paşi 3, 4, 5, iteraŃie 4. Avem A = {t} şi arcele ( 3,t ) şi ( 4,t ) de unde
rezultă
ttmin = max ( t ymin + d yt ) = max {( 6 + 1) , ( 8 + 4 )} = 12
( y ,t )∈U
Deoarece s-a completat ttmin trecem la pasul 6 şi facem ttMax = ttmin = 12 .
Imaginea care se obŃine în acest moment pentru reŃeaua de planificare a activităŃilor
este

A(3) C(2)
1
0 8 12 12
3 D(6) F(4)
s 4 t

2 6
B(2) E(4) G(1)
2 3

Deoarece nu s-a completat tsMax trecem la realizarea primei iteraŃii pentru


paşii 8, 9 şi 10.
Paşi 8, 9, 10, iteraŃie 1. Avem B = {4} şi doar arcul ( 4,t ) şi astfel
t4Max = min ( t xMax − d 4 x ) = min {(12 − 4 )} = 8 .
( 4, x )∈U
Deoarece nu s-a completat tsMax se trece la o nouă iteraŃie.
Paşi 8, 9, 10, iteraŃie 2.ObŃinem acum B = {1,3} .
Pentru y =1 avem doar arcul (1, 4 ) şi astfel
t1Max = min ( t xMax − d1x ) = min {( 8 − 2 )} = 6 .
(1, x )∈U
Pentru y = 3 avem arcele ( 3, 4 ) şi ( 3,t ) şi astfel rezultă
t3Max = min ( t xMax − d 3 x ) = min {( 8 − 0 ) , (12 − 1)} = 8 .
( 3, x )∈U
Din nou nu este completat tsMax şi realizăm iteraŃia a treia.
Paşi 8, 9, 10, iteraŃie 3. Se obŃine B = {2} cu arcele ( 2,3) şi ( 2, 4 ) astfel
că ajungem la
t2Max = min ( t xMax − d 2 x ) = min {( 8 − 4 ) , ( 8 − 6 )} = 2 .
( 2, x )∈U
143
Cum încă nu s-a realizat completarea lui tsMax continuăm iteraŃiile.
Paşi 8, 9, 10, iteraŃie 4. Se obŃine B = {s} cu arcele ( s,1) şi ( s, 2 ) astfel
că ajungem la
tsMax = min ( t xMax − d sx ) = min {( 6 − 3) , ( 2 − 2 )} = 0 .
( s , x )∈U
Deoarece s-a completat tsMax algoritmul se termină, iar drumul critic al
proiectului este format de succesiunea de activităŃi ( B, D, F ) .
Imaginea grafică la care se ajunge prin completarea timpilor maximi şi în
care drumul critic s-a marcat prin îngroşarea liniilor de trasare a arcelor din care
este format este

A(3) C(2)
1
0 0 8 8 12 12
3 6 D(6) F(4)
s 4 t

2 2 6 8
B(2) E(4) G(1)
2 3

9.1. Graful vârf/activitate, metoda potenŃialului

Dorim construcŃia unui graf orientat în care activităŃile sunt plasate în


vârfurile grafului. Pentru a utiliza vârfurile şi pentru realizarea algoritmului de
determinare a drumului critic, vârfurile vor fi casete formate din 6 celule de forma
tii ,min N i tit ,min

tii Max ti tit Max


unde, pentru fiecare vârf i
• N i este identificarea activităŃii;
• ti este dutara de realizare a activităŃii;
• tii ,min este momentul minim de începere a activităŃii;
• tit ,min este momentul minim de terminare a activităŃii;
• tii ,Max este momentul maxim de începere a activităŃii;
• tit ,Max este momentul maxim de terminare a activităŃii.
Presupunem că proiectul este format din n activităŃi.
144
În afara activităŃilor specificate în proiect se introduc două activităŃi noi,
activitatea de start, pentru care N 0 = s şi t0 = 0 şi activitatea de terminare cu
N n +1 = t şi tn +1 = 0 .
Pentru construcŃia grafului se folosesc următoarele reguli:
• Intervine un arc ( 0, i ) dacă activitatea N i nu este condiŃionată de nicio
activitate, 1 ≤ i ≤ n .
• Apare un arc ( i, n + 1) dacă activitatea N i nu condiŃionează nicio
activitate, 1 ≤ i ≤ n .
• Se consideră că există arcul ( i, j ) dacă activitatea N i condiŃionează
activitatea N j , 1 ≤ i, j ≤ n .
Exemplul 2. Considerăm tabelul de specificaŃie a proiectului
Nr. ActivităŃile ActivităŃile Durate
crt. proiectului direct precedente
ti
i Ni (condiŃionări)
1 A - 3
2 B - 2
3 C A 2
4 D B 6
5 E B 4
6 F C,D,E 4
7 G E 1
Numărul specificat al activităŃilor este 7 şi astfel vom construi un graf
orientat în care X = {0,1, 2,3, 4,5, 6, 7,8} , considerând şi cele două vârfuri
suplimentare.
Graful G = ( X , U ) va avea următoarele arce:
• ( 0,1) şi ( 0, 2 ) , deoarece activităŃile N1 şi N 2 sunt necondiŃionate;
• ( 6,8) şi ( 7,8 ) , deoarece activităŃile N 6 şi N 7 nu condiŃionează alte
activităŃi;
• deoarece activitatea A condiŃionează pe C, rezultă arcul (1,3) ;
• activitatea B condiŃionează activităŃile D şi E şi astfel generează arcele
( 2, 4 ) şi ( 2,5 )
• activitatea G este condiŃionată de E şi se produce arcul ( 5, 7 ) ;
• Fiecare din activităŃile C, D şi E condiŃionează pe F şi astfel avem arcele
( 3, 6 ) , ( 4, 6 ) şi ( 5, 6 ) .
Rezumând raŃionamentele făcute am obŃinut

145
U = {( 0,1) , ( 0, 2 ) , (1,3) , ( 2, 4 ) , ( 2,5 ) , ( 3, 6 ) , ( 4, 6 ) , ( 5, 6 ) , ( 5, 7 ) , ( 6,8 ) , ( 7,8 )}
Graful are reprezentarea grafică

1 A 3 C
3 2
6 F
0 4
4
s D 8 t
0 6 0
7 G
B
1
2 2
E
5 4

Pentru determinarea drumului critic în grafurile de activităŃi de tip


vârf/activitate se aplică un algoritm similar celui pentru vârfurile de activităŃi
arc/activitate.
Algoritm 2.
1. Se iniŃalizează t0i ,min = t0t ,min = 0 .
2. Dacă s-a completat tnt ,min
+1 se trece la pasul 6, altfel se continuă.
3. Se determină mulŃimea A a vârfurilor pentru care toate arcele care intră
au completate valorile de timp minim de terminare la extremităŃile iniŃiale.
4. Pentru fiecare i ∈ A se calculează tii ,min = max t tj,min şi apoi
( j ,i )∈U
t ,min i ,min
t i =t i + ti .
5. Se trece de la pasul 2.
6. Facem iniŃializările tni ,Max
+1 = tnt ,Max
+1 = tnt ,min
+1 .

7. Dacă s-a completat t0i ,Max , atunci ne oprim, drumul critic este drumul care
trece prin vârfurile k în care tkt ,Max = tkt ,min , altfel se continuă.
8. Se determină mulŃimea B a vârfurilor pentru care toate arcele care ies au
completate valorile de timp maxim de început la extremităŃile finale.
9. Pentru fiecare j ∈ B se calculează t tj,Max = min tii ,Max şi apoi
( j ,i )∈U
i ,Max t ,Max
t j =t j −tj .
10. Se trece de la pasul 7.

146
Exemplul 3. Considerăm că lucrăm pe proiectul prezentat în exemplele
anterioare. Modul de lucru al algoritmului este similar procesului descris integral
în exemplul 2. În urma calculelor vom obŃine rezultatele trecute în următoarea
reprezentare, în care am desenat cu linie îngroşată arcele ce fac parte din
drumul critic care este C = ( 0, 2, 4, 6,8 ) şi astfel corespunde succesiunii de
activităŃi( s, B, D, F , t ) sau, eliminând activităŃile de start şi terminare, la
succesiunea ( B, D, F ) .

1 0 A 3 3 3 C 5
3 3 6 6 2 8
6 8 F 12
0 8 4 12
4
0 s 0 2 D 8 8 12 t 12
0 0 0 2 6 8 12 0 12
7 6 G 7
0 B 2
11 1 12
2 0 2 2
2 E 6
5 4 4 8

147
BIBLIOGRAFIE

1. I. Tomescu, Combinatorică şi teoria grafurilor, Editura UniversităŃii din.


Bucureşti, 1990
2. Bang-Jensen, G. Gutin, Digraphs Theory, Algorithms and Applications,
Springer-Verlag, 2007
3. J.A. Bomdy, U.S.R. Murty, Graph Theory, Springer, 2007
4. I. Tomescu, Probleme de combinatorică şi teoria grafurilor, Editura
Didactică şi Pedagogică, Bucureşti, 1981. EdiŃia engleză: Problems in
Combinatorics and Graph Theory, John Wiley, New York , 1985.
5. M. Behzad, G. Chartrand, L. Lesniak-Foster, Graphs & Digraphs, Prindle,
Weber & Schmidt, Boston, Massachusetts, 1979.
6. B. Bollobas, Graph Theory. An Introductory Course, Springer-Verlag,
New York, Heidelberg, Berlin, 1979.
7. C. Berge, Teoria grafurilor şi aplicaŃii, Editura Tehnică, Bucureşti, 1971

148

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