Sunteți pe pagina 1din 150

ALGORITMICA GRAFURILOR

Conf. univ. dr. COSTEL BĂLCĂU

2022
Tematica

1 Aranjamente, combinări, permutări 6


1.1 Preliminarii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2 Produs cartezian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.3 Submult, imi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.4 Aranjamente cu repetit, ie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.5 Aranjamente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.6 Permutări . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.7 Combinări . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.8 Combinări cu repetit, ie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.9 Permutări cu repetit, ie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

2 Partit, ii 18
2.1 Compuneri ale unui număr natural . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.2 Partit, ii ale unui număr natural . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.3 Partit, ii ale unei mult, imi finite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

3 Grafuri 25
3.1 Definit, ii generale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.2 Reprezentarea (memorarea) grafurilor . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.3 Grade, secvent, e grafice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.4 Conexitate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.5 Parcurgerea grafurilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.6 Algoritmul Roy-Warshall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

4 Arbori s, i arborescent, e 53
4.1 Numărul ciclomatic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.2 Teorema de caracterizare a arborilor . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
4.3 Teorema de caracterizare a arborescent, elor . . . . . . . . . . . . . . . . . . . . . . . . 59
4.4 Numărarea arborilor part, iali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
4.5 Numărarea arborescent, elor part, iale . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

5 Arbori part, iali de cost minim 66


5.1 Expunerea problemei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
5.2 Algoritmii lui Kruskal s, i Prim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

6 Grafuri euleriene 74
6.1 Definit, ii s, i exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
6.2 Grafuri euleriene neorientate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
6.3 Grafuri euleriene orientate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

1
TEMATICA 2

7 Grafuri hamiltoniene 79
7.1 Definit, ii s, i exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
7.2 Grafuri hamiltoniene neorientate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
7.3 Grafuri hamiltoniene orientate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

8 Grafuri turneu 93
8.1 Definit, ii s, i exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
8.2 Grafuri turneu hamiltoniene . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

9 Colorări ı̂n grafuri 96


9.1 Colorarea nodurilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
9.2 Colorarea muchiilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

10 Grafuri bipartite 106


10.1 Definit, ii s, i exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
10.2 Caracterizarea grafurilor bipartite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
10.3 Colorarea grafurilor bipartite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

11 Grafuri planare 115


11.1 Definit, ii s, i exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
11.2 Formula lui Euler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
11.3 Colorarea grafurilor planare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
11.4 Formula lui Euler pentru poliedre convexe . . . . . . . . . . . . . . . . . . . . . . . . 123

12 Distant, e s, i drumuri minime 128


12.1 Expunerea problemei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
12.2 Algoritmul Dijkstra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
12.3 Algoritmul Roy-Floyd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134

13 Fluxuri ı̂n ret, ele 138


13.1 Problema fluxului maxim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
13.2 Algoritmul Ford-Fulkerson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
Evaluare

• Activitate laborator: 30% (Programe obligatorii, programe suplimentare s, i probleme din Temele
de laborator)

• Teme de casă: 20% (Programe suplimentare s, i probleme nerezolvate ı̂n timpul laboratorului,
din Temele de laborator)

• Examen final: 50% (Probă scrisă: algoritmi s, i probleme)

3
Bibliografie

[1] A.V. Aho, J.E. Hopcroft, J.D. Ullman, Data Structures and Algorithms, Addison-Wesley, Massachusetts, 2009.

[2] Gh. Barbu, V. Păun, Calculatoare personale s, i programare ı̂n C/C++, Editura Didactică s, i Pedagogică,
Bucures, ti, 2005.

[3] Gh. Barbu, V. Păun, Programarea ı̂n limbajul C/C++, Editura Matrix Rom, Bucures, ti, 2011.

[4] Gh. Barbu, I. Văduva, M. Bolos, teanu, Bazele informaticii, Editura Tehnică, Bucures, ti, 1997.

[5] C. Bălcău, Combinatorică s, i teoria grafurilor, Editura Universităt, ii din Pites, ti, Pites, ti, 2007.

[6] O. Bâscă, L. Livovschi, Algoritmi euristici, Editura Universităt, ii din Bucures, ti, Bucures, ti, 2003.

[7] E. Ciurea, Algoritmi. Introducere ı̂n algoritmica grafurilor, Editura Tehnică, Bucures, ti, 2001.

[8] E. Ciurea, L. Ciupală, Algoritmi. Introducere ı̂n algoritmica fluxurilor ı̂n ret, ele, Editura Matrix Rom, Bucures, ti,
2006.

[9] I. Codreanu, M. Lascu, Probleme de combinatorică, Editura Gil, Zalău, 2016.

[10] T.H. Cormen, Algorithms Unlocked, MIT Press, Cambridge, 2013.

[11] T.H. Cormen, C.E. Leiserson, R.L. Rivest, C. Stein, Introduction to Algorithms, MIT Press, Cambridge, 2009.

[12] C. Croitoru, Tehnici de bază ı̂n optimizarea combinatorie, Editura Universităt, ii ”Al. I. Cuza”, Ias, i, 1992.

[13] S. Even, Graph Algorithms, Cambridge University Press, 2012.

[14] D. Fanache, Teoria algoritmică a grafurilor, Editura Paralela 45, Pites, ti, 2016.

[15] H. Georgescu, Tehnici de programare, Editura Universităt, ii din Bucures, ti, Bucures, ti, 2005.

[16] C.A. Giumale, Introducere ı̂n analiza algoritmilor. Teorie s, i aplicat, ii, Editura Polirom, Ias, i, 2004.

[17] F.V. Jensen, T.D. Nielsen, Bayesian Networks and Decision Graphs, Springer, New York, 2007.

[18] D. Jungnickel, Graphs, Networks and Algorithms, Springer, 2013.

[19] M. Keller, W. Trotter, Applied Combinatorics, Open Textbook Library, 2017.

[20] D.E. Knuth, The Art Of Computer Programming. Vol. 4A: Combinatorial Algorithms, Addison-Wesley, Mas-
sachusetts, 2011.

[21] B. Korte, J. Vygen, Combinatorial Optimization.Theory and Algorithms, Springer, 2012.

[22] L. Livovschi, H. Georgescu, Sinteza s, i analiza algoritmilor, Editura S, tiint, ifică s, i Enciclopedică, Bucures, ti, 1986.

[23] D. Logofătu, Algoritmi fundamentali ı̂n Java: Aplicat, ii, Editura Polirom, Ias, i, 2007.

[24] D. Lucanu, M. Craus, Proiectarea algoritmilor, Editura Polirom, Ias, i, 2008.

4
5

[25] L. Panaitopol, A. Szilard, D. S, erbănescu, Probleme de combinatorică pentru juniori, Editura Gil, Zalău, 2019.

[26] V. Pop, L. Popa, D. Popa, M. Olteanu, G. Mincu, M. Burlică, R. Strungariu, M. Ispas, Teme s, i probleme pentru
concursurile student, es, ti de matematică. Volumul II. Concursuri internat, ionale, Editura StudIS, Ias, i, 2013.

[27] V. Pop, M. Teleucă, Probleme de combinatorică elementară. Numărare, grafuri, jocuri, Editura Matrix Rom,
Bucures, ti, 2013.

[28] D.R. Popescu, Combinatorică s, i teoria grafurilor, Societatea de S, tiint, e Matematice din România, Bucures, ti,
2005.

[29] D.R. Popescu, R. Marinescu-Ghemeci, Combinatorică s, i teoria grafurilor prin exercit, ii s, i probleme, Editura
Matrix Rom, Bucures, ti, 2014.

[30] C.P. Popovici, H. Georgescu, L. State, Bazele informaticii. Vol. I s, i II, Editura Universităt, ii din Bucures, ti,
Bucures, ti, 1990-1991.

[31] S.S. Ray, Graph Theory with Algorithms and its Applications, Springer, New Delhi, 2013.

[32] O.A. Schipor, S.G. Pentiuc, F. Gı̂ză-Belciug, Limbajul C - Tehnici de programare eficientă, Editura Matrix Rom,
Bucures, ti, 2014.

[33] R. Sedgewick, K. Wayne, Algorithms, Addison-Wesley, Massachusetts, 2011.

[34] N.O. Stănăs, ilă s, .a., Teme s, i probleme pentru concursurile student, es, ti de matematică. Volumul III. Concursuri
nat, ionale, Editura StudIS, Ias, i, 2013.

[35] R. Stephens, Essential Algorithms: A Practical Approach to Computer Algorithms, Wiley, Indianopolis, 2013.

[36] T. Toadere, Grafe. Teorie, algoritmi s, i aplicat, ii, Editura Albastră, Cluj-Napoca, 2002.

[37] I. Tomescu, Combinatorică s, i teoria grafurilor, Tipografia Universităt, ii din Bucures, ti, Bucures, ti, 1978.

[38] I. Tomescu, Probleme de combinatorică s, i teoria grafurilor, Editura Didactică s, i Pedagogică, Bucures, ti, 1981.

[39] I. Tomescu, Data structures, Editura Universităt, ii din Bucures, ti, Bucures, ti, 2004.

[40] ***, Handbook of combinatorics, edited by R.L. Graham, M. Grőtschel and L. Lovász, Elsevier, Amsterdam,
1995.

[41] ***, Handbook of discrete and combinatorial mathematics, edited by K.H. Rosen, J.G. Michaels, J.L. Gross, J.W.
Grossman and D.R. Shier, CRC Press, Boca Raton, 2000.

[42] ***, Revista MATINF. Publicat, ie bianuală de matematică s, i informatică pentru elevi s, i profesori, editată de
Departamentul Matematică-Informatică, Universitatea din Pites, ti, Editura Universităt, ii din Pites, ti.
Tema 1

Aranjamente, combinări, permutări

1.1 Preliminarii
În această lect, ie vom prezenta formule de numărare s, i algoritmi de generare (enumerare) pentru
cele mai cunoscute familii de obiecte combinatoriale: produs cartezian, submult, imi, aranjamente
(fără repetit, ie, cu repetit, ie sau ordonate), combinări (fără repetit, ie sau cu repetit, ie), permutări (fără
repetit, ie sau cu repetit, ie). Reamintim ı̂n continuare câteva not, iuni uzuale.
Definit, ia 1.1.1. Fie A o mult, ime finită. Numărul de elemente ale lui A, notat cu card (A), se
numes, te cardinalul mult, imii A.
Definit, ia 1.1.2. Fie A un alfabet (adică o mult, ime finită) s, i n ∈ N⋆ . O secvent, ă de forma
a = a1 a2 . . . an , cu a1 , a2 , . . . , an ∈ A,
se numes, te cuvânt de lungime n peste alfabetul A. Lungimea cuvântului a se notează cu |a|.
Observat, ia 1.1.1. Evident, cuvântul a1 a2 . . . an poate fi identificat cu vectorul (a1 , a2 , . . . , an ).
Definit, ia 1.1.3. Fie A o mult, ime (alfabet) total ordonată s, i x = (x1 , . . . , xn ), y = (y1 , . . . , ym )
doi vectori (cuvinte) cu elemente (litere) din A. Spunem că x este mai mic decât y ı̂n ordine
lexicografică s, i notăm x ≺ y dacă
(x1 , . . . , xn ) = (y1 , . . . , yn ) s, i m > n
sau dacă există un indice i, i ≤ min{m, n}, astfel ı̂ncât
(x1 , . . . , xi−1 ) = (y1 , . . . , yi−1) s, i xi < yi .
Exemplul 1.1.1. Considerând alfabetul A = {a, b, c, . . . , z} s, i ordinea alfabetică uzuală a < b < c <
· · · < z, avem
ion ≺ ionela ≺ ionescu.
Definit, ia 1.1.4. Fie x ∈ R s, i n ∈ N. Notăm
 
 1, dacă n = 0,  1, dacă n = 0,
[x]n = x(x − 1) . . . (x − n + 1), dacă n ≥ 1, [x]n = x(x + 1) . . . (x + n − 1), dacă n ≥ 1.
 | {z }  | {z }
n factori n factori

[x]n se numes, te polinomul factorial descrescător de gradul n, iar [x]n se numes, te polinomul
factorial crescător de gradul n.
Exemplul 1.1.2. Avem [1,5]3 = 1,5 · 0,5 · (−0,5) = −0,375, iar [1,5]3 = 1,5 · 2,5 · 3,5 = 13,125.

6
TEMA 1. ARANJAMENTE, COMBINĂRI, PERMUTĂRI 7

1.2 Produs cartezian


Definit, ia 1.2.1. Produsul cartezian al mult, imilor A1 , A2 , . . . , An (n ∈ N⋆ ) este mult, imea

A1 × A2 × . . . × An = {(a1 , a2 , . . . , an )|a1 ∈ A1 , a2 ∈ A2 , . . . , an ∈ An }.

Exemplul 1.2.1. {a, b} × {+, −} × {c} = {(a, +, c), (a, −, c), (b, +, c), (b, −, c)}.

Propozit, ia 1.2.1 (de numărare a produsului cartezian). Fie n ∈ N⋆ s, i A1 , A2 , . . . , An mult, imi


finite. Atunci card (A1 × A2 × . . . × An ) = card (A1 ) · card (A2 ) · . . . · card (An ).

Demonstrat, ie. Se utilizează metoda induct, iei matematice după n.


Algoritmul 1.2.1 (de generare a produsului cartezian). Fie mult, imile standard

A1 = {1, 2, . . . , m1 }, A2 = {1, 2, . . . , m2 }, . . . , An = {1, 2, . . . , mn }.

Vom utiliza ”regula următorului”.

• Primul element al produsului cartezian A1 × A2 × . . . × An , ı̂n ordine lexicografică, este

(c1 , c2 , . . . , cn ) = (1, 1, . . . , 1).

• Un element arbitrar (curent)

(c1 , . . . , ck−1, ck , ck+1 , . . . , cn )

are un element următor dacă s, i numai dacă există un indice k ∈ {n, . . . , 1} astfel ı̂ncât ck < mk .
În acest caz, luând cel mai mare indice k cu această proprietate, elementul următor, ı̂n ordine
lexicografică, este
(c1 , . . . , ck−1, ck + 1, 1, . . . , 1).
În pseudocod, algoritmul poate fi descris sub forma
PRODUS CARTEZIAN(n, m) :
for i = 1, n do c[i] ← 1;
AFISARE(c, n);
repeat
k ← n;
while (c[k] = m[k]) and (k > 0) do k ← k − 1;
if (k > 0) then
c[k] ← c[k] + 1;
for i = k + 1, n do c[i] ← 1;
AFISARE(c, n);
while (k > 0);
unde funct, ia de afis, are este
AFISARE(c, n) :
for i = 1, n do
afis, ează c[i];
TEMA 1. ARANJAMENTE, COMBINĂRI, PERMUTĂRI 8

Observat, ia 1.2.1. Pentru generarea produsului cartezian A1 × A2 × . . . × An al unor mult, imi finite
arbitrare

A1 = {a11 , a12 , . . . , a1m1 }, A2 = {a21 , a22 , . . . , a2m2 }, . . . , An = {an1 , an2 , . . . , anmn }

se poate folosi algoritmul anterior, bazat pe generarea indicilor, ı̂nlocuind afis, area indicilor ci cu
afis, area elementelor corespunzătoare aici din mult, imile Ai , adică ı̂nlocuind funct, ia AFIS, ARE(c, n)
cu funct, ia
AFISARE(c, a, n) :
for i = 1, n do
afis, ează a[i, c[i]];

1.3 Submult, imi


Propozit, ia 1.3.1 (de numărare a submult, imilor). Fie A o mult, ime finită s, i P(A) mult, imea
tuturor submult, imilor (părt, ilor) lui A. Atunci card (P(A)) = 2card (A) .
Demonstrat, ie. Fie A = {a1 , a2 , . . . , an }, n ∈ N⋆ . Notăm {1, 2}n = {1, 2} × . . . × {1, 2}.
| {z }
de n ori
Definim funct, iile α : P(A) → {1, 2}n s, i β : {1, 2}n → P(A) prin:

1, dacă ai ∈ B,
• ∀B ∈ P(A), α(B) = (c1 , c2 , . . . , cn ), unde ci =
2, dacă ai 6∈ B;

• ∀ (c1 , c2 , . . . , cn ) ∈ {1, 2}n , β(c1 , c2 , . . . , cn ) = {ai |ci = 1, i ∈ {1, . . . , n}}.


Funct, iile α s, i β sunt inverse una celeilalte, deci sunt bijective s, i card (P(A)) = card ({1, 2}n) = 2n .
Exemplul 1.3.1. Pentru A = {a, b, c}, corespondent, a submult, imi ↔ produs cartezian din demonstrat, ia
anterioară este redată ı̂n următorul tabel:
(c1 , c2 , c3 ) ∈ {1, 2}3 B ∈ P(A)
(1,1,1) {a, b, c}
(1,1,2) {a, b}
(1,2,1) {a, c}
(1,2,2) {a}
(2,1,1) {b, c}
(2,1,2) {b}
(2,2,1) {c}
(2,2,2) ∅

Deci A are 23 = 8 submult, imi.


Algoritmul 1.3.1 (de generare a submult, imilor). Fie mult, imea A = {a1 , a2 , . . . , an }. Conform
demonstrat, iei anterioare, putem genera produsul cartezian {1, 2}n cu Algoritmul 1.2.1 ı̂nlocuind
afis, area elementelor (c1 , . . . , cn ) cu afis, area submult, imilor corespunzătoare

B = {ai |ci = 1, i ∈ {1, . . . , n}}.

Obt, inem următorul algoritm descris ı̂n pseudocod.


TEMA 1. ARANJAMENTE, COMBINĂRI, PERMUTĂRI 9

SUBMULT, IMI(a, n) :
for i = 1, n do c[i] ← 1;
AFISARE(c, a, n);
repeat
k ← n;
while (c[k] = 2) and (k > 0) do k ← k − 1;
if (k > 0) then
c[k] ← 2;
for i = k + 1, n do c[i] ← 1;
AFISARE(c, a, n);
while (k > 0);
unde funct, ia de afis, are este
AFISARE(c, a, n) :
for i = 1, n do
if c[i] = 1 then afis, ează a[i];

1.4 Aranjamente cu repetit, ie


Propozit, ia 1.4.1 (de numărare a aranjamentelor cu repetit, ie). Fie m, n ∈ N. Atunci numărul
de cuvinte de lungime n peste un alfabet cu m litere este egal cu mn .
Demonstrat, ie. Fie B = {1, 2, . . . , m} s, i C = {(c1 , c2 , . . . , cn )|ci ∈ B ∀ i}. Cum C = B n , conform
Propozit, iei 1.2.1 avem card (C) = mn .
Definit, ia 1.4.1. Cuvintele numărate ı̂n propozit, ia anterioară se numesc aranjamente cu repetit, ie
de m luate câte n. Prin abuz de limbaj, s, i numărul lor, adică mn , se numes, te tot aranjamente cu
repetit, ie de m luate câte n.
Exemplul 1.4.1. Pentru m = 2 s, i n = 3, aranjamente cu repetit, ie sunt, ı̂n ordine lexicografică:

(1, 1, 1), (1, 1, 2), (1, 2, 1), (1, 2, 2), (2, 1, 1), (2, 1, 2), (2, 2, 1), (2, 2, 2).

Deci avem 23 = 8 aranjamente cu repetit, ie.


Algoritmul 1.4.1 (de generare a aranjamentelor cu repetit, ie, sub formă de cuvinte). Pentru
mult, imea standard B = {1, 2, . . . , m}, conform demonstrat, iei anterioare putem genera produsul
cartezian B n , cu Algoritmul 1.2.1, luând m1 = m2 = · · · = mn = m.
Observat, ia 1.4.1. Pentru o mult, ime A = {a1 , a2 , . . . , am } oarecare putem genera indicii (c1 , . . . , cn )
cu algoritmul anterior s, i afis, a elementele corespunzătoare acestor indici (ac1 , . . . , acn ).

1.5 Aranjamente
Propozit, ia 1.5.1 (de numărare a aranjamentelor). Fie m, n ∈ N. Atunci numărul de cuvinte
de lungime n cu litere distincte peste un alfabet cu m litere este egal cu [m]n .
Demonstrat, ie. Fie B = {1, 2, . . . , m} s, i C1 = {(c1 , c2 , . . . , cn )|ci ∈ B ∀ i, ci 6= cj ∀ i 6= j}. Avem
C1 = {(c1 , c2 , . . . , cn )|c1 ∈ {1, . . . , m}, c2 ∈ {1, . . . , m} \ {c1 }, c3 ∈ {1, . . . , m} \ {c1 , c2 }, . . . , cn ∈
{1, . . . , m} \ {c1 , . . . , cn−1 }}, deci card (C1 ) = m(m − 1)(m − 2) . . . (m − n + 1) = [m]n .
TEMA 1. ARANJAMENTE, COMBINĂRI, PERMUTĂRI 10

Definit, ia 1.5.1. Cuvintele numărate ı̂n propozit, ia anterioară se numesc aranjamente (fără repetit, ie)
de m luate câte n. De asemenea s, i numărul lor, adică [m]n , se numes, te tot aranjamente (fără
repetit, ie) de m luate câte n s, i se mai notează cu Anm .
Observat, ia 1.5.1. Pentru n > m avem [m]n = m . . . (m − m) . . . (m − n + 1) = 0.
Exemplul 1.5.1. Pentru m = 4 s, i n = 2, aranjamentele sunt, ı̂n ordine lexicografică:
(1, 2), (1, 3), (1, 4), (2, 1), (2, 3), (2, 4), (3, 1), (3, 2), (3, 4), (4, 1), (4, 2), (4, 3).
Deci avem [4]2 = 4 · 3 = 12 aranjamente.
Un algoritm pentru generarea aranjamentelor va fi prezentat ı̂n Sect, iunea 1.7.

1.6 Permutări
Propozit, ia 1.6.1 (de numărare a permutărilor). Fie n ∈ N. Atunci numărul de cuvinte ce
cont, in exact o dată fiecare literă a unui alfabet cu n litere este egal cu n!, unde
n! = 1 · 2 · 3 · · · · · n (n factorial), 0! = 1.
Demonstrat, ie. Luăm m = n ı̂n Propozit, ia 1.5.1 s, i folosim egalitatea [n]n = n(n − 1) . . . 1 = n!.
Definit, ia 1.6.1. Cuvintele numărate ı̂n propozit, ia anterioară se numesc permutări (fără repetit, ie)
de ordinul n. De asemenea s, i numărul lor, adică n!, se numes, te tot permutări (fără repetit, ie)
de n.
Exemplul 1.6.1. Pentru n = 3, permutările mult, imii standard {1, 2, 3} sunt, ı̂n ordine lexicografică:
(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1).
Deci avem 3! = 1 · 2 · 3 = 6 permutări.
Algoritmul 1.6.1 (de generare a permutărilor). Fie mult, imea standard A = {1, 2, . . . , n}. Vom
utiliza din nou ”regula următorului”.
• Prima permutare, ı̂n ordine lexicografică, este
(p1 , p2 , . . . , pn ) = (1, 2, . . . , n).

• O permutare arbitrară (curentă)


(p1 , p2 , . . . , pk−1 , pk , pk+1, . . . , pn )
are o permutare următoare dacă s, i numai dacă există un indice k ∈ {n − 1, . . . , 1} astfel ı̂ncât
pk < pk+1. În acest caz, luând cel mai mare indice k cu această proprietate s, i cel mai mare indice
j din {n, . . . , k + 1} astfel ı̂ncât pj > pk (există, deoarece pk+1 > pk ), permutarea următoare,
ı̂n ordine lexicografică, este
(p1 , p2 , . . . , pk−1, pj , p′k+1 , . . . , p′j , . . . , p′n ),
unde vectorul (p′k+1, . . . , p′j , . . . , p′n ) este obt, inut prin ordonarea crescătoare a elementelor rămase
(pk , pk+1 , . . . , pj−1, pj+1, . . . , pn ). Cum aceste elemente formează vectorul ordonat descrescător
(pk+1 , . . . , pj−1 , pk , pj+1, . . . , pn ),
rezultă că vectorul (p′k+1 , . . . , p′j , . . . , p′n ) este răsturnatul acestuia s, i deci poate fi obt, inut din
acesta, de exemplu, prin interschimbări ı̂ntre termenii situat, i la egală distant, ă fat, ă de mijloc.
TEMA 1. ARANJAMENTE, COMBINĂRI, PERMUTĂRI 11

De exemplu, pentru permutarea curentă


(2, 7, 4, 8, 6, 5, 3, 1)
avem k = 3 (p3 = 4 < p4 = 8), j = 6 (pj = 5 > pk = 4), deci permutarea următoare se obt, ine
interschimbând ı̂ntâi pk = p3 = 4 cu pj = p6 = 5, apoi răsturnând subvectorul (8, 6, 4, 3, 1) dintre
pozit, iile k + 1 s, i n (de exemplu prin interschimbările 8 ↔ 1, 6 ↔ 3), adică această permutare
următoare este
(2, 7, 5, 1, 3, 4, 6, 8).
În pseudocod, algoritmul poate fi descris sub forma
PERMUTĂRI(n) :
for i = 1, n do p[i] ← i;
AFISARE(p, n);
repeat
k ← n − 1;
while (p[k] ≥ p[k + 1]) and (k > 0) do k ← k − 1;
if (k > 0) then
j ← n;
while (p[j] ≤ p[k]) do j ← j − 1;
p[k] ↔ p[j];
 
for i = 1, n−k
2
do p[k + i] ↔ p[n − i + 1];
AFISARE(p, n);
while (k > 0);
unde ↔ reprezintă instruct, iunea de interschimbare, iar [x] = ⌊x⌋ reprezintă partea ı̂ntreagă
(inferioară) a numărului x ∈ R.
Observat, ia 1.6.1. Pentru generarea permutărilor unei mult, imi arbitrare A = {a1 , a2 , . . . , an } ı̂nlocuim
afis, area indicilor (p1 , . . . , pn ) cu afis, area elementelor corespunzătoare (ap1 , . . . , apn ).

1.7 Combinări
Propozit, ia 1.7.1 (de numărare a combinărilor). Fie m, n ∈ N. Atunci
numărul de cuvinte strict crescătoare de lungime n peste un alfabet (ordonat) cu m litere
= numărul  de submult
 , imi cu n elemente ale unei mult, imi cu m elemente
[m]n def m
= = .
n! n
Demonstrat, ie. Fie B = {1, 2, . . . , m}. Notăm mult, imile din enunt, astfel:
C3 = {(c1 , c2 , . . . , cn )|ci ∈ B ∀ i, ci < ci+1 ∀ i}, S3 = {S|S ⊆ B, card (S) = n}.
Între aceste mult, imi definim funct, iile µ : C3 → S3 , ν : S3 → C3 prin:
• ∀ (c1 , c2 , . . . , cn ) ∈ C3 , µ(c1 , c2 , . . . , cn ) = {c1 , c2 , . . . , cn };
• ∀ {c1 , c2 , . . . , cn } ∈ S3 cu c1 < c2 < . . . < cn , ν({c1 , c2 , . . . , cn }) = (c1 , c2 , . . . , cn ).
Aceste funct, ii sunt inverse una celeilalte, deci sunt bijective s, i astfel card (C3 ) = card (S3 ).
Permutând fiecare combinare (c1 , c2 , . . . , cn ) ∈ C3 ı̂n toate cele n! moduri posibile, obt, inem fără
repetare toate aranjamentele din mult, imea C1 = {(a1 , a2 , . . . , an )|ai ∈ B ∀ i, ai 6= aj ∀i 6= j}.
[m]n
Deci card (C3 )·n! = card (C1 ). Conform Propozit, iei 1.5.1, card (C1 ) = [m]n , deci card (C3 ) = .
n!
TEMA 1. ARANJAMENTE, COMBINĂRI, PERMUTĂRI 12

Definit, ia 1.7.1. Oricare obiecte din cele 2 tipuri numărate ı̂n propozit, ia anterioarăse 
numesc com-
m
binări (fără repetit, ie) de m luate câte n. De asemenea s, i numărul lor, adică , se numes, te
n
n
tot combinări (fără repetit, ie) de m luate câte n s, i se mai notează cu Cm .
 
m
Observat, ia 1.7.1. Pentru n > m avem = 0, deoarece [m]n = 0.
n  
m! m m!
Pentru n ≤ m, deoarece [m]n = m(m − 1) . . . (m − n + 1) = avem = .
(m − n)! n n!(m − n)!
Exemplul 1.7.1. Pentru m = 5 s, i n = 3, corespondent, ele din demonstrat, ia anterioară sunt redate ı̂n
următorul tabel:
(c1 , c2 , c3 ) ∈ C3 S ∈ S3
(1,2,3) {1, 2, 3}
(1,2,4) {1, 2, 4}
(1,2,5) {1, 2, 5}
(1,3,4) {1, 3, 4}
(1,3,5) {1, 3, 5}
(1,4,5) {1, 4, 5}
(2,3,4) {2, 3, 4}
(2,3,5) {2, 3, 5}
(2,4,5) {2, 4, 5}
(3,4,5) {3, 4, 5}.
 
5 [5]3 5·4·3
Deci avem = = = 10 combinări.
3 3! 1·2·3
Algoritmul 1.7.1 (de generare a combinărilor). Fie mult, imea standard B = {1, 2, . . . , m} s, i
n ≤ m. Vom utiliza din nou ”regula următorului”.

• Prima combinare (de m luate câte n), ı̂n ordine lexicografică, este

(c1 , c2 , . . . , cn ) = (1, 2, . . . , n).

• O combinare arbitrară (curentă)

(c1 , c2 , . . . , ck−1 , ck , ck+1, . . . , cn )

are o combinare următoare dacă s, i numai dacă există un indice k ∈ {n, . . . , 1} astfel ı̂ncât
ck < m − n + k. În acest caz, luând cel mai mare indice k cu această proprietate, combinarea
următoare, ı̂n ordine lexicografică, este

(c1 , c2 , . . . , ck−1 , ck + 1, ck + 2, . . . , ck + 1 + n − k).

De exemplu, pentru m = 8, n = 6 s, i combinarea curentă (1, 2, 5, 6, 7, 8) avem k = 2 (c2 = 2 <


m − n + k = 8 − 6 + 2), deci combinarea următoare este (1, 3, 4, 5, 6, 7).
În pseudocod, algoritmul poate fi descris sub forma
TEMA 1. ARANJAMENTE, COMBINĂRI, PERMUTĂRI 13

COMBINĂRI(m, n) :
for i = 1, n do c[i] ← i;
AFISARE(c, n);
repeat
k ← n;
while (c[k] = m − n + k) and (k > 0) do k ← k − 1;
if (k > 0) then
c[k] ← c[k] + 1;
for i = k + 1, n do c[i] ← c[i − 1] + 1;
AFISARE(c, n);
while (k > 0);

Algoritmul 1.7.2 (de generare a aranjamentelor). Fie mult, imea standard B = {1, 2, . . . , m} s, i
n ≤ m. Conform demonstrat, iei anterioare, putem genera aranjamentele de m luate câte n prin
generarea combinărilor s, i permutarea fiecărei combinări. Folosind Algoritmii 1.7.1 s, i 1.6.1 obt, inem
următoarea descriere ı̂n pseudocod.
ARANJAMENTE(m, n) :
for i = 1, n do c[i] ← i;
PERMUTĂRI(n);
repeat
k ← n;
while (c[k] = m − n + k) and (k > 0) do k ← k − 1;
if (k > 0) then
c[k] ← c[k] + 1;
for i = k + 1, n do c[i] ← c[i − 1] + 1;
PERMUTĂRI(n);
while (k > 0);
unde PERMUTĂRI(n) este funct, ia din Algoritmul 1.6.1 ı̂nlocuind funct, ia de afis, are cu
AFISARE(c, p, n) :
for i = 1, n do
afis, ează c[p[i]];

Exemplul 1.7.2. Pentru m = 4 s, i n = 3, corespondent, a aranjamente ↔ permutările combinărilor din


demonstrat, ia anterioară s, i din algoritmul anterior este redată ı̂n următorul tabel:
Combinare Permutare Aranjament Combinare Permutare Aranjament
(1,2,3) (1,2,3) (1,2,3) (1,3,4) (1,2,3) (1,3,4)
(1,3,2) (1,3,2) (1,3,2) (1,4,3)
(2,1,3) (2,1,3) (2,1,3) (3,1,4)
(2,3,1) (2,3,1) (2,3,1) (3,4,1)
(3,1,2) (3,1,2) (3,1,2) (4,1,3)
(3,2,1) (3,2,1) (3,2,1) (4,3,1)
(1,2,4) (1,2,3) (1,2,4) (2,3,4) (1,2,3) (2,3,4)
(1,3,2) (1,4,2) (1,3,2) (2,4,3)
(2,1,3) (2,1,4) (2,1,3) (3,2,4)
(2,3,1) (2,4,1) (2,3,1) (3,4,2)
(3,1,2) (4,1,2) (3,1,2) (4,2,3)
(3,2,1) (4,2,1) (3,2,1) (4,3,2)
TEMA 1. ARANJAMENTE, COMBINĂRI, PERMUTĂRI 14
 
4
Deci avem · 3! = [4]3 = 4 · 3 · 2 = 24 aranjamente.
3
Observat, ia 1.7.2. Analog Observat, iei 1.6.1, algoritmii anteriori pot fi adaptat, i pentru generarea
combinărilor s, i aranjamentelor pentru mult, imi oarecare.

1.8 Combinări cu repetit, ie


Propozit, ia 1.8.1 (de numărare a combinărilor cu repetit, ie). Fie m, n ∈ N. Atunci numărul de
 
[m]n def m
cuvinte crescătoare de lungime n peste un alfabet (ordonat) cu m litere este egal cu = .
n! n
Demonstrat, ie. Fie B = {1, 2, . . . , m}, A = {1, 2, . . . , m + n − 1},

C4 = {(c1 , c2 , . . . , cn )|ci ∈ B ∀ i, ci ≤ ci+1 ∀ i}, C3 = {(d1 , d2 , . . . , dn )|di ∈ A ∀ i, di < di+1 ∀ i}.

Definim corespondent, ele ρ : C4 → C3 , σ : C3 → C4 astfel:


• ρ(c1 , c2 , c3 , . . . , cn ) = (c1 , c2 + 1, c3 + 2, . . . , cn + n − 1);
• σ(d1 , d2 , d3 , . . . , dn ) = (d1 , d2 − 1, d3 − 2, . . . , dn − n + 1).
Acestea sunt funct, ii inverse, deciutilizând Propozitia 1.7.1 avem
 
m+n−1 [m + n − 1]n [m]n m
card (C4 ) = card (C3 ) = = = = .
n n! n! n
Definit, ia 1.8.1. Cuvintele numărate ı̂n propozit, ia anterioară
 se numesc combinări cu repetit, ie
m
de m luate câte n. De asemenea s, i numărul lor, adică , se numes, te tot combinări cu
n
repetit, ie de m luate câte n.
Exemplul 1.8.1. Pentru m = 3 s, i n = 4, combinările cu repetit, ie sunt, ı̂n ordine lexicografică:

(1, 1, 1, 1), (1, 1, 1, 2), (1, 1, 1, 3), (1, 1, 2, 2), (1, 1, 2, 3), (1, 1, 3, 3), (1, 2, 2, 2), (1, 2, 2, 3),

(1, 2, 3, 3), (1, 3, 3, 3), (2, 2, 2, 2), (2, 2, 2, 3), (2, 2, 3, 3), (2, 3, 3, 3), (3, 3, 3, 3).
 
3 [3]4 3·4·5·6
Deci avem = = = 15 combinări cu repetit, ie.
4 4! 1·2·3·4
Algoritmul 1.8.1 (de generare a combinărilor cu repetit, ie). Fie mult, imea standard B = {1, 2, . . . , m}.
Vom utiliza din nou ”regula următorului”.
• Prima combinare cu repetit, ie (de m luate câte n), ı̂n ordine lexicografică, este
(c1 , c2 , . . . , cn ) = (1, 1, . . . , 1).

• O combinare cu repetit, ie arbitrară (curentă)


(c1 , c2 , . . . , ck−1 , ck , ck+1, . . . , cn )

are o combinare cu repetit, ie următoare dacă s, i numai dacă există un indice k ∈ {n, . . . , 1} astfel
ı̂ncât ck < m. În acest caz, luând cel mai mare indice k cu această proprietate, combinarea cu
repetit, ie următoare, ı̂n ordine lexicografică, este

(c1 , c2 , . . . , ck−1 , ck + 1, ck + 1, . . . , ck + 1).


TEMA 1. ARANJAMENTE, COMBINĂRI, PERMUTĂRI 15

De exemplu, pentru m = 8, n = 6 s, i combinarea cu repetit, ie curentă (2, 4, 5, 8, 8, 8) avem k = 3


(c3 = 5 < m = 8) deci combinarea cu repetit, ie următoare este (2, 4, 6, 6, 6, 6).
În pseudocod, algoritmul poate fi descris sub forma
COMBINĂRI CU REPETIT , IE(m, n) :
for i = 1, n do c[i] ← 1;
AFISARE(c, n);
repeat
k ← n;
while (c[k] = m) and (k > 0) do k ← k − 1;
if (k > 0) then
c[k] ← c[k] + 1;
for i = k + 1, n do c[i] ← c[k];
AFISARE(c, n);
while (k > 0);

Observat, ia 1.8.1. Analog Observat, iei 1.6.1, algoritmul anterior poate fi adaptat pentru generarea
combinărilor cu repetit, ie pentru mult, imi oarecare.

1.9 Permutări cu repetit, ie


Propozit, ia 1.9.1 (de numărare a permutărilor cu repetit, ie). Fie m, t1 , t2 , . . . , tm ∈ N s, i
n = t1 + t2 + · · · + tm . Atunci numărul de cuvinte de lungime n ce pot fi formate peste un alfabet cu
m litere astfel ı̂ncât  litera numărul  i să apară de exact ti ori pentru orice i ∈ {1, . . . , m} este egal cu
n! def n
= .
t1 !t2 ! . . . tm ! t1 , t2 , . . . , tm
Demonstrat, ie. Fie A = {1, 2, . . . , m} s, i

C5 = {(x1 , x2 , . . . , xn )|xi ∈ A ∀ i, card ({i|xi = j}) = tj ∀ j}.

Numărăm cuvintele din C5 astfel:


 
n
• alegem cei t1 indici (din totalul de n) ai literelor egale cu 1, rezultă moduri posibile;
t1
• pentru fiecare
 alegere de mai sus, alegem cei t2 indici  restulde n − t1 ) ai literelor egale cu
 (din
n − t1 n n − t1
2, rezultă moduri posibile, deci obt, inem moduri posibile de alegere a
t2 t1 t2
indicilor literelor 1 s, i 2;

• ...

• pentru fiecare alegere de mai  sus, alegem cei tm indici (din restul de n − t1 − . . . − tm−1 ) ai
n − t1 − . . . − tm−1
literelor egale cu m; rezultă moduri posibile, deci obt, inem
tm
    
n n − t1 n − t1 − . . . − tm−1
...
t1 t2 tm

moduri posibile de alegere a tuturor indicilor literelor 1, 2, . . . , m.


TEMA 1. ARANJAMENTE, COMBINĂRI, PERMUTĂRI 16

Astfel
    
n n − t1 n − t1 − . . . − tm−1
card (C5 ) = ...
t1 t2 tm
n! (n − t1 )! (n − t1 − . . . − tm−1 )!
= · · ...·
t1 !(n − t1 )! t2 !(n − t1 − t2 )! tm !(n − t1 − . . . − tm )!
n!
=
t1 !t2 ! . . . tm !
(deoarece (n − t1 − . . . − tm )! = 0! = 1).
Definit, ia 1.9.1. Cuvintele numărate ı̂n propozit, ia anterioară se numesc permutări  cu repetit  , ie
n
(anagrame) de n luate câte t1 , t2 , . . . , tm . De asemenea s, i numărul lor, adică , se
t1 , t2 , . . . , tm
numes, te tot permutări cu repetit, ie de n luate câte t1 , t2 , . . . , tm .
 
n
Observat, ia 1.9.1. Luând t1 = t2 = · · · = tm = 1 obt, inem n = m s, i = n!, deci
1, 1, . . . , 1
permutările (fără repetit
 , ie) sunt
 un caz particular al permutărilor cu repetit, ie. Pe de altă parte,
n n!
luând m = 2 obt, inem = , deci s, i combinările (fără repetit, ie) sunt un caz particular al
t1 , t2 t1 !t2 !
permutărilor cu repetit, ie.
Exemplul 1.9.1. Pentru m = 3 s, i t1 = 2, t2 = t3 = 1, deci n = 4, permutările cu repetit, ie sunt, ı̂n
ordine lexicografică:

(1, 1, 2, 3), (1, 1, 3, 2), (1, 2, 1, 3), (1, 2, 3, 1), (1, 3, 1, 2), (1, 3, 2, 1),

(2, 1, 1, 3), (2, 1, 3, 1), (2, 3, 1, 1), (3, 1, 1, 2), (3, 1, 2, 1), (3, 2, 1, 1).
 
4 4!
Deci avem = = 12 permutări cu repetit, ie.
2, 1, 1 2!1!1!
Algoritmul 1.9.1 (de generare a permutărilor cu repetit, ie). Fie mult, imea standard B =
{1, 2, . . . , m} s, i t1 , t2 , . . . , tm ∈ N, n = t1 + t2 + · · · + tm . Vom utiliza din nou ”regula următorului”.
• Prima permutare cu repetit, ie (de n luate câte t1 , t2 , . . . , tm ), ı̂n ordine lexicografică, este

(p1 , p2 , . . . , pn ) = (1, 1, . . . , 1, 2, 2, . . . , 2, . . . , m, m, . . . , m).


| {z } | {z } | {z }
de t1 ori de t2 ori de tm ori

• Existent, a s, i forma permutării cu repetit, ie următoare ı̂n ordine lexicografică pentru o permutare
cu repetit, ie curentă arbitrară se determină exact ca la permutările fără repetit, ie (Algoritmul
1.6.1).
De exemplu, pentru permutarea cu repetit, ie curentă

(4, 4, 1, 3, 6, 5, 5, 3, 2, 1)

avem k = 4 (p4 = 3 < p5 = 6), j = 7 (pj = 5 > pk = 3), deci permutarea cu repetit, ie următoare se
obt, ine interschimbând ı̂ntâi pk = p4 = 3 cu pj = p7 = 5, apoi răsturnând subvectorul (6, 5, 3, 3, 2, 1)
dintre pozit, iile k + 1 s, i n (de exemplu prin interschimbările 6 ↔ 1, 5 ↔ 2, 3 ↔ 3), adică aceată
permutare cu repetit, ie următoare este

(4, 4, 1, 5, 1, 2, 3, 3, 5, 6).
TEMA 1. ARANJAMENTE, COMBINĂRI, PERMUTĂRI 17

În pseudocod, algoritmul poate fi descris sub forma


PERMUTĂRI CU REPETIT , IE(n, t, m) :
n ← 0;
for i = 1, m do n ← n + t[i];
i ← 0;
for j = 1, m do
for k = 1, t[j] do
i ← i + 1;
p[i] ← j;
AFISARE(p, n);
repeat
k ← n − 1;
while (p[k] ≥ p[k + 1]) and (k > 0) do k ← k − 1;
if (k > 0) then
j ← n;
while (p[j] ≤ p[k]) do j ← j − 1;
p[k] ↔ p[j];
 
for i = 1, n−k
2
do p[k + i] ↔ p[n − i + 1];
AFISARE(p, n);
while (k > 0);

Observat, ia 1.9.2. Analog Observat, iei 1.6.1, algoritmul anterior poate fi us, or adaptat pentru generarea
permutărilor cu repetit, ie pentru mult, imi arbitrare.
Tema 2

Partit, ii

2.1 Compuneri ale unui număr natural


Definit, ia 2.1.1. Fie n, m ∈ N. O compunere a lui n este o scriere de forma

n = n1 + n2 + · · · + nm ,

unde n1 , n2 , . . . , nm ∈ N s, i contează ordinea dintre termenii n1 , n2 , . . . , nm .

Propozit, ia 2.1.1 (de numărare a compunerilor unui număr   natural).


 Fie n, m ∈ N. Atunci:
m
a) numărul de compuneri ale lui n cu m termeni este egal cu ;
n  
n−1
b) numărul de compuneri ale lui n cu m termeni nenuli este egal cu .
m−1
Demonstrat, ie. a) Fie mult, imile

N = {(n1 , n2 , . . . , nm )|ni ∈ N ∀ i, n1 + n2 + · · · + nm = n},

C4 = {(c1 , c2 , . . . , cn )|ci ∈ {1, 2, . . . , m} ∀ i, ci ≤ ci+1 ∀ i}.


Definim corespondent, ele α : N → C4 , β : C4 → N prin:


 c1 = · · · = cn1 = 1 (n1 litere),

c
n1 +1 = · · · = cn1 +n2 = 2 (n2 litere),
• α(n1 , . . . , nm ) = (c1 , . . . , cn ), unde

 ...


cn1 +···+nm−1 +1 = · · · = cn1 +···+nm−1 +nm = m (nm litere);

• β(c1 , . . . , cn ) = (n1 , . . . , nm ), unde ni = numărul de litere i ale cuvântului (c1 , . . . , cn ), ∀ i.


 
m
Acestea sunt funct, ii inverse, deci conform Propozit, iei 1.8.1 avem card (N ) = card (C4 ) = .
n
b) Fie mult, imile N1 = {(n1 , n2 , . . . , nm )|ni ∈ N⋆ ∀ i, n1 + n2 + · · · + nm = n},

N2 = {(t1 , t2 , . . . , tm )|ti ∈ N ∀ i, t1 + t2 + · · · + tm = n − m}.

Definim corespondent, ele ϕ : N1 → N2 , ψ : N2 → N1 prin:

• ∀(n1 , . . . , nm ) ∈ N1 , ϕ(n1 , . . . , nm ) = (n1 − 1, . . . , nm − 1);

18
TEMA 2. PARTIT, II 19

• ∀(t1 , . . . , tm ) ∈ N2 , ψ(t1 , . . . , tm ) = (t1 + 1, . . . , tm + 1).


 
m
Acestea sunt funct, ii inverse, deci conform punctului a) avem card (N1 ) = card (N2 ) = =
  n−m
[m]n−m m(m + 1) . . . (n − 1) (n − 1)! n−1
= = = .
(n − m)! (n − m)! (m − 1)!(n − m)! m−1
Exemplul 2.1.1. Pentru n = 4 s, i m = 3 compunerile sunt
4 = 0+0+4= 0+1+3 =0+2+2 =0+3+1 =0+4+0
= 1+0+3= 1+1+2 =1+2+1 =1+3+0 =2+0+2
= 2 + 1 + 1 = 2 + 2 + 0 = 3 + 0 + 1 = 3 + 1 + 0 = 4 + 0 + 0.
     
3 3·4·5·6 4−1 3
Deci avem = = 15 compuneri, dintre care = = 3 compuneri cu
4 1·2·3·4 3−1 2
termenii nenuli.
Algoritmul 2.1.1 (de generare a compunerilor unui număr natural). Fie n, m ∈ N⋆ . Vom
utiliza din nou ”regula următorului”.
• Prima compunere a lui n cu m termeni, ı̂n ordine lexicografică, este
n = 0 + 0 + · · · + 0 + n.

• O compunere curentă arbitrară


n = t1 + t2 + · · · + tk−1 + tk + tk+1 + · · · + tm
are o compunere următoare dacă s, i numai dacă există un indice k ∈ {m, . . . , 2} astfel ı̂ncât
tk > 0. În acest caz, luând cel mai mare indice k cu această proprietate, compunerea următoare,
ı̂n ordine lexicografică, este
n = t1 + t2 + · · · + tk−2 + (tk−1 + 1) + 0 + · · · + 0 + (tk − 1).

De exemplu, următoarea compunere după


10 = 2 + 0 + 5 + 3 + 0 + 0
este 10 = 2 + 0 + 6 + 0 + 0 + 2 (deoarece tk = t4 = 3).
În pseudocod, algoritmul poate fi descris sub forma
COMPUNERI(n, m) :
for i = 1, m − 1 do t[i] ← 0;
t[m] ← n;
AFISARE(t, m);
repeat
k ← m;
while (t[k] = 0) and (k > 1) do k ← k − 1;
if (k > 1) then
t[k − 1] ← t[k − 1] + 1;
t[m] ← t[k] − 1;
if (k < m) then t[k] ← 0;
AFISARE(t, m);
while (k > 1);
TEMA 2. PARTIT, II 20

unde funct, ia de afis, are este


AFISARE(t, m) :
for i = 1, m do
afis, ează t[i];

Algoritmul 2.1.2 (de generare a compunerilor cu termeni nenuli). Analog algoritmului anterior
se obt, ine următorul algoritm pentru generarea compunerilor lui n cu m termeni nenuli, m ≤ n.
COMPUNERI TERMENI NENULI(n, m) :
for i = 1, m − 1 do t[i] ← 1;
t[m] ← n − m + 1;
AFISARE(t, m);
repeat
k ← m;
while (t[k] = 1) and (k > 1) do k ← k − 1;
if (k > 1) then
t[k − 1] ← t[k − 1] + 1;
t[m] ← t[k] − 1;
if (k < m) then t[k] ← 1;
AFISARE(t, m);
while (k > 1);

2.2 Partit, ii ale unui număr natural


Definit, ia 2.2.1. O partit, ie (descompunere) a numărului n ∈ N⋆ este o scriere de forma

n = n1 + n2 + · · · + nk ,

unde n1 , n2 , . . . , nk ∈ N⋆ (k ∈ N⋆ ) s, i nu contează ordinea dintre termenii n1 , n2 , . . . , nk .

Observat, ia 2.2.1. Deoarece ı̂ntr-o partit, ie ca mai sus nu contează ordinea dintre termeni, putem
presupune că aces, tia sunt scris, i ı̂n ordine crescătoare.

Definit, ia 2.2.2. Fie n, k ∈ N⋆ . Notăm cu P (n, k) numărul de partit, ii ale lui n cu k termeni, iar cu
P (n) numărul tuturor partit, iilor lui n.

Exemplul 2.2.1. Numărul n = 6 are partit, iile

6=6=1+5=2+4=3+3=1+1+4=1+2+3=2+2+2
= 1 + 1 + 1 + 3 = 1 + 1 + 2 + 2 = 1 + 1 + 1 + 1 + 2 = 1 + 1 + 1 + 1 + 1 + 1,

deci P (6, 1) = 1, P (6, 2) = 3, P (6, 3) = 3, P (6, 4) = 2, P (6, 5) = 1, P (6, 6) = 1 s, i P (6) = 11.


Observat, ia 2.2.2. Avem P (n) = P (n, 1) + P (n, 2) + · · · + P (n, n), ∀ n ∈ N⋆ .

Propozit, ia 2.2.1 (relat, ia de recurent, ă a numerelor P (n, k)). Pentru orice n ∈ N⋆ s, i orice
k ∈ {1, . . . , n − 1} avem

P (n, k) = P (n − k, 1) + P (n − k, 2) + · · · + P (n − k, k).
TEMA 2. PARTIT, II 21

Demonstrat, ie. Pentru orice n ∈ N⋆ s, i orice k ∈ {1, . . . , n − 1} notăm

P(n, k) = {(n1 , . . . , nk )|ni ∈ N⋆ ∀ i, n1 ≤ · · · ≤ nk , n1 + · · · + nk = n}.

S
k S
k
Definim corespondent, ele α : P(n, k) → P(n − k, i) s, i β : P(n − k, i) → P(n, k) prin:
i=1 i=1

• ∀ (n1 , . . . , nk ) ∈ P(n, k), α(n1 , . . . , nk ) = (nj − 1, . . . , nk − 1), unde j = min{i|ni ≥ 2, i ∈


{1, . . . , k}} (există j, deoarece k ≤ n − 1);

• ∀ i ∈ {1, . . . , k}, ∀ (n1 , . . . , ni ) ∈ P(n − k, i), β(n1 , . . . , ni ) = (1, . . . , 1, n1 + 1, . . . , ni + 1).


| {z }
de k−i ori

Interpretarea acestor funct, ii este următoarea: aplicarea funct, iei α unei partit, ii a lui n cu k termeni
constă ı̂n mics, orarea cu 1 a fiecărui termen s, i eliminarea termenilor care astfel devin egali cu zero,
obt, inându-se o partit, ie a lui n − k cu cel mult k termeni. Reciproc, aplicarea funct, iei β unei partit, ii
a lui n − k cu cel mult k termeni constă ı̂n mărirea cu 1 a fiecărui termen s, i adăugarea de termeni
egali cu 1 pentru a obt, ine k termeni, astfel obt, inându-se o partit, ie a lui n cu k termeni.
k 
S
Funct, iile α s, i β sunt bine definite s, i inverse una celeilalte, deci card (P(n, k)) = card P(n − k, i) .
i=1
Cum mult, imile P(n − k, 1), . . . , P(n − k, k) sunt evident disjuncte două câte două, rezultă că
P
k
P (n, k) = P (n − k, i).
i=1

Observat, ia 2.2.3. Relat, ia de recurent, ă din Propozit, ia 2.2.1, ı̂mpreună cu condit, iile init, iale evidente
P (n, 1) = P (n, n) = 1, P (n, k) = 0 ∀ k > n permit calculul tuturor numerelor P (n, k), deci s, i al
numerelor P (n), conform Corolarului 2.2.2. De exemplu, tabelul numerelor P (n, k) s, i P (n) pentru
n ≤ 7 (s, i k ≤ 7) este:

P (n, k) k = 1 k = 2 k = 3 k=4 k=5 k=6 k=7 P (n)


n=1 1 0 0 0 0 0 0 1
n=2 1 1 0 0 0 0 0 2
n=3 1 1 1 0 0 0 0 3
n=4 1 2 1 1 0 0 0 5
n=5 1 2 2 1 1 0 0 7
n=6 1 3 3 2 1 1 0 11
n=7 1 3 4 3 2 1 1 15

Numerele P (n, k) nenule, aflate doar pe diagonala principală s, i sub această diagonală (adică 1 ≤ k ≤
n) formează triunghiul numerelor P (n, k).
Algoritmul 2.2.1 (de generare a partit, iilor lui n cu k termeni). Fie n, k ∈ N⋆ , k ≤ n. Pentru
generarea ı̂n ordine lexicografică a celor P (n, k) partit, ii ale lui n cu k termeni

(t1 , t2 , . . . , tk ), n = t1 + t2 + · · · + tk , ti ∈ N⋆ ∀i, t1 ≤ t2 ≤ · · · ≤ tk

folosim din nou ”regula următorului”.

• Prima partit, ie este (1, . . . , 1 , n − k + 1).


| {z }
de k−1 ori
TEMA 2. PARTIT, II 22

• O partit, ie curentă arbitrară


(t1 , t2 , . . . , tj−1 , tj , tj+1 , . . . , tk )
are o partit, ie următoare dacă s, i numai dacă există un indice j ∈ {k − 1, . . . , 1} astfel ı̂ncât
tj ≤ tk − 2. În acest caz, luând cel mai mare indice j cu această proprietate, următoarea
partit, ie este
(t1 , t2 , . . . , tj−1 , tj + 1, tj + 1, . . . , tj + 1, n − r),
unde r = t1 + t2 + · · · + tj−1 + (tj + 1) + (tj + 1) + · · · + (tj + 1).
De exemplu, următoarea partit, ie după
22 = 1 + 1 + 2 + 4 + 4 + 5 + 5
este
22 = 1 + 1 + 3 + 3 + 3 + 3 + 8
(deoarece tj = t3 = 2 ≤ tk − 2 = 5 − 2).
Descrierea ı̂n pseudocod a algoritmului are forma
GENERARE P(n, k) :
for i = 1, k − 1 do t[i] ← 1;
t[k] ← n − k + 1;
AFISARE(t, k);
repeat
j ← k − 1;
while (t[j] > t[k] − 2) and (j > 0) do j ← j − 1;
if (j > 0) then
t[j] ← t[j] + 1;
for i = j + 1, k − 1 do t[i] ← t[j];
r ← 0;
for i = 1, k − 1 do r ← r + t[i];
t[k] ← n − r;
AFISARE(t, k);
while (j > 0);
unde funct, ia de afis, are este aceeas, i ca ı̂n Algoritmul 2.1.1.

2.3 Partit, ii ale unei mult, imi finite


Definit, ia 2.3.1. O partit, ie a unei mult, imi nevide A este o scriere de forma
A = A1 ∪ A2 ∪ · · · ∪ Ak ,
unde submult, imile (părt, ile, clasele) A1 , A2 , . . . , Ak (k ∈ N⋆ ) sunt nevide s, i disjuncte două câte două,
s, i nu contează ordinea dintre aceste submult, imi. Considerăm că singura partit, ie a mult, imii vide este
partit, ia cu zero submult, imi.
Definit, ia 2.3.2. Fie n, k ∈ N.
a) Numărul lui Stirling de spet, a a doua, notat cu S(n, k), reprezintă numărul de partit, ii ale
unei mult, imi cu n elemente ı̂n k părt, i.
b) Numărul lui Bell, notat cu Bn , reprezintă numărul tuturor partit, iilor unei mult, imi cu n ele-
mente.
TEMA 2. PARTIT, II 23

Exemplul 2.3.1. Mult, imea A = {a, b, c} are partit, iile

A = {a, b, c} = {a, b} ∪ {c} = {a, c} ∪ {b} = {a} ∪ {b, c} = {a} ∪ {b} ∪ {c},

deci S(3, 1) = 1, S(3, 2) = 3, S(3, 3) = 1 s, i B3 = 5.


Observat, ia 2.3.1. Evident, avem B0 = 1 s, i Bn = S(n, 1) + S(n, 2) + · · · + S(n, n), ∀ n ∈ N⋆ .
Propozit, ia 2.3.1 (relat, ia de recurent, ă a numerelor S(n, k)).

S(n, k) = S(n − 1, k − 1) + kS(n − 1, k), ∀ n, k ∈ N⋆ .

Demonstrat, ie. Notăm

S(n, k) = {{A1 , . . . , Ak }|Ai 6= ∅ ∀ i, Ai ∩ Aj = ∅ ∀ i 6= j, A = A1 ∪ · · · ∪ Ak },

pentru orice n, k ∈ N⋆ . Definim corespondent, ele

α : S(n, k) → S(n − 1, k − 1) ∪ {1, . . . , k} × S(n − 1, k),


β : S(n − 1, k − 1) ∪ {1, . . . , k} × S(n − 1, k) → S(n, k),

prin:
• ∀ {A1 , . . . , Ak } ∈ S(n, k), α({A1 , . . . , Ak }) =

{A1 , . . . , Ak } \ {Ai }, dacă n ∈ Ai s, i Ai = {n},
=
(i, {A1 , . . . , Ai \ {n}, . . . , Ak }), dacă n ∈ Ai s, i Ai 6= {n};

• ∀ {A1 , . . . , Ak−1 } ∈ S(n − 1, k − 1), β({A1 , . . . , Ak−1}) = {A1 , . . . , Ak−1, {n}},


• ∀ (i, {A1 , . . . , Ak }) ∈ {1, . . . , k} × S(n − 1, k), β(i, {A1 , . . . , Ak }) = {A1 , . . . , Ai ∪ {n}, . . . , Ak }.
Interpretarea acestor definit, ii este următoarea: aplicarea funct, iei α unei partit, ii a mult, imii {1, . . . , n}
ı̂n k părt, i constă ı̂n eliminarea elementului n, astfel obt, inându-se o partit, ie a mult, imii {1, . . . , n − 1}
ı̂n k − 1 sau ı̂n k părt, i, după cum n este sau nu singur ı̂ntr-o parte. Reciproc, aplicarea funct, iei β
constă ı̂n adăugarea elementului n, fie singur ı̂ntr-o parte, fie la oricare din cele k părt, i.
Funct, iile α s, i β sunt bine definite s, i inverse una celeilalte, deci

card (S(n, k)) = card (S(n − 1, k − 1) ∪ {1, . . . , k} × S(n − 1, k)) ,

adică S(n, k) = S(n − 1, k − 1) + kS(n − 1, k).


Observat, ia 2.3.2. Relat, ia de recurent, ă de mai sus ı̂mpreună cu condit, iile init, iale evidente S(0, 0) = 1,
S(0, k) = 0 ∀ k ≥ 1, S(n, 0) = 0 ∀n ≥ 1 permit calculul tuturor numerelor S(n, k), deci s, i al numerelor
Bn , conform Corolarului 2.3.1. De exemplu, tabelul numerelor S(n, k) s, i Bn pentru n ≤ 6 (s, i k ≤ 6)
este:
S(n, k) k = 0 k = 1 k=2 k=3 k=4 k=5 k = 6 Bn
n=0 1 0 0 0 0 0 0 1
n=1 0 1 0 0 0 0 0 1
n=2 0 1 1 0 0 0 0 2
n=3 0 1 3 1 0 0 0 5
n=4 0 1 7 6 1 0 0 15
n=5 0 1 15 25 10 1 0 52
n=6 0 1 31 90 65 15 1 203
TEMA 2. PARTIT, II 24

Numerele S(n, k) nenule, aflate doar pe diagonala principală s, i sub această diagonală (1 ≤ k ≤ n)
formează triunghiul numerelor lui Stirling de spet, a a doua.
Algoritmul 2.3.1 (de generare a partit, iilor unei mult, imi ı̂ntr-un număr fixat de părt, i). Fie
A = {1, 2, . . . , n} s, i 1 ≤ k ≤ n. Pentru scrierea unei partit, ii

A = A1 ∪ · · · ∪ Ak

vom folosi convent, ia că ı̂n fiecare parte Ai elementele sunt ordonate crescător, iar ordinea dintre
părt, ile A1 , . . . , Ak este dată de ordinea dintre cele mai mici elemente ale acestor mult, imi.
De exemplu, partit, ia
{1, 2, 3, 4, 5} = {3, 2} ∪ {5} ∪ {4, 1}
va fi scrisă sub forma
{1, 2, 3, 4, 5} = {1, 4} ∪ {2, 3} ∪ {5}. (2.3.1)
Pentru reprezentarea unei partit, ii A = A1 ∪ · · · ∪ Ak scrise conform convent, iei de mai sus, vom folosi
vectorul caracteristic v = (v1 , . . . , vn ), unde

vi = j dacă i ∈ Aj , ∀ i ∈ {1, 2, . . . , n}, ∀ j ∈ {1, 2, . . . , k}.

De exemplu, vectorul caracteristic al partit, iei (2.3.1) este v = (1, 2, 2, 1, 3).


Cu această reprezentare, conform demonstrat, iei relat, iei de recurent, ă a numerelor S(n, k) (Propozit, ia
2.3.1) obt, inem un algoritm recursiv de generare a partit, iilor mult, imii {1, 2, . . . , n} ı̂n k părt, i. În pseu-
docod, acest algoritm poate fi descris sub forma
GENERARE S(n, k) :
if (k = 1) then // condit, ie init, ială
for i = 1, n do v[i] ← 1; // partit, ia cu o parte
AFISARE(v);
else
if (k = n) then // condit, ie init, ială
for i = 1, n do v[i] ← i; // partit, ia cu n părt, i
AFISARE(v);
else
// relat, ia de recurent, ă
v[n] ← k; GENERARE S(n − 1, k − 1); // n singur ı ^n parte
for i = 1, k do // n nesingur ı ^n parte
v[n] ← i; GENERARE S(n − 1, k);

unde funct, ia de afis, are, ce transformă vectorul caracteristic v ı̂n partit, ia corespunzătoare, este
AFISARE(v) :
for j = 1, k do // afis, ăm partea Aj
afis, ează ”{”
for i = 1, n do
if (v[i] = j) then afis, ează i;
afis, ează ”}”;
Tema 3

Grafuri

Grafurile sunt modele matematice cu o gamă largă de aplicat, ii. Această aplicabilitate a condus
la dezvoltarea accelerată a teoriei grafurilor, atât din punct de vedere al rezultatelor teoretice cât
s, i al algoritmicii, grafurile impunându-se drept modele de bază ı̂n informatică, ı̂n special ı̂n teoria
structurilor de date s, i a analizei algoritmilor.

3.1 Definit, ii generale


Definit, ia 3.1.1. Un graf neorientat (graf, pseudograf, graf general) este o pereche G = (V, E)
unde:

• V este o mult, ime finită s, i nevidă, elementele sale numindu-se nodurile (vârfurile, punctele)
grafului G;

• E este o colect, ie (mult, ime multiplă, multiset) finită de perechi neordonate, posibil egale, de
noduri, elementele sale numindu-se muchiile (legăturile directe, liniile) grafului G.

Observat, ia 3.1.1. Într-o pereche neordonată, notată [x, y], nu contează ordinea dintre elemente, adică
[x, y] = [y, x].

Definit, ia 3.1.2. Un graf orientat (digraf, pseudodigraf) este o pereche G = (V, E) unde:

• V este o mult, ime finită s, i nevidă, elementele sale numindu-se vârfurile (nodurile, punctele)
grafului G;

• E este o colect, ie (mult, ime multiplă, multiset) finită de perechi ordonate de vârfuri, elementele
sale numindu-se arcele (legăturile directe ale) grafului G.

Observat, ia 3.1.2. Într-o pereche ordonată, notată (x, y), contează ordinea dintre elemente, adică
(x, y) 6= (y, x) pentru x 6= y.

Definit, ia 3.1.3. Numărul de noduri ale unui graf (neorientat sau orientat) se numes, te ordinul
grafului, iar numărul de muchii sau arce se numes, te dimensiunea grafului.

Definit, ia 3.1.4. a) Dacă e = [x, y] este o muchie a unui graf neorientat, atunci nodurile x s, i y
se numesc extremităt, ile muchiei e s, i spunem că muchia e este incidentă cu nodurile x s, i
y.

25
TEMA 3. GRAFURI 26

b) Dacă e = (x, y) este un arc al unui graf orientat, atunci nodul x se numes, te extremitatea
init, ială iar nodul y se numes, te extremitatea finală a arcului e s, i spunem că arcul e este
incident cu x spre exterior s, i cu y spre interior.

c) O buclă a unui graf (neorientat sau orientat) este o muchie sau un arc având extremităt, ile
egale (adică o muchie de forma [x, x], respectiv un arc de forma (x, x)).

d) Două noduri x s, i y ale unui graf (neorientat sau orientat) se numesc adiacente (vecine) dacă
există o muchie sau un arc incident cu x s, i cu y (adică o muchie de forma [x, y], respectiv un
arc de forma (x, y) sau de forma (y, x)).

Definit, ia 3.1.5. Dacă ı̂n colect, ia (mult, imea multiplă) de muchii sau arce a unui graf (neorientat
sau orientat) există două sau mai multe elemente egale (s, i aflate pe pozit, ii diferite), atunci acestea
se numesc muchii sau arce multiple.

Definit, ia 3.1.6. Un graf (neorientat sau orientat) fără bucle se numes, te multigraf (neorientat,
respectiv orientat).

Definit, ia 3.1.7. Un graf (neorientat sau orientat) se numes, te simplu (sau strict) dacă nu cont, ine
nici bucle s, i nici muchii sau arce multiple.

Observat, ia 3.1.3. a) Un graf neorientat simplu este o pereche G = (V, E), unde V este o mult, ime
finită s, i nevidă (de elemente numite noduri) iar E ⊆ P2 (V ) este o mult, ime finită (de elemente numite
muchii), unde

P2 (V ) = {{x, y}|x, y ∈ V, x 6= y}

(mult, imea tuturor submult, imilor cu două elemente ale lui V ).


b) Un graf orientat simplu este o pereche G = (V, E), unde V este o mult, ime finită s, i nevidă (de
elemente numite noduri) iar E ⊆ V × V \ {(x, x)|x ∈ V } este o mult, ime finită (de elemente numite
arce).

Definit, ia 3.1.8. Fie G = (V, E) un graf (orientat sau neorientat). O reprezentare grafică a lui
G se obt, ine reprezentând nodurile sale prin puncte distincte (ı̂n plan sau pe o altă suprafat, ă dată),
iar muchiile [x, y] sau arcele (x, y) prin segmente (de curbă continuă) distincte neorientate, respectiv
orientate, de la punctul ce reprezintă nodul x până la punctul ce reprezintă nodul y.

Observat, ia 3.1.4. În reprezentările grafice, nodurile unui graf sunt reprezentate adesea ı̂ncadrate ı̂n
cerculet, e (sau pătrătele).
Exemplul 3.1.1. Graful neorientat G = (V, E), cu V = {1, 2, 3, 4, 5, 6} s, i E = {e1 , e2 , e3 , e4 , e5 , e6 , e7 , e8 , e9 },
unde e1 = [1, 2], e2 = [1, 4], e3 = [2, 2], e4 = [2, 5], e5 = [3, 6], e6 = [3, 6], e7 = [4, 5], e8 = [4, 5], e9 =
[4, 5] (E este o mult, ime multiplă!) are reprezentarea grafică din Figurile 3.1.1 (cu nodurile reprezen-
tate prin puncte) s, i 3.1.2 (cu nodurile reprezentate ı̂n cerculet, e).
TEMA 3. GRAFURI 27

e3
1 e1 2 3

e2 e4 e5 e6
e7
4 e8 5
e9 6

Figura 3.1.1:

e3

e1
1 2 3

e2 e4 e5 e6
e7
e8
4 5 6
e9

Figura 3.1.2:

Acest graf are ordinul 6 s, i dimensiunea 9. El cont, ine bucla e3 , muchiile multiple e5 , e6 s, i muchiile
multiple e7 , e8 , e9 , deci nu este nici multigraf, nici simplu. Nodurile 1 s, i 2 sunt adiacente, iar nodurile
1 s, i 5 nu sunt adiacente.
Exemplul 3.1.2. Graful orientat G = (V, E), cu V = {1, 2, 3, 4, 5} s, i

E = {(1, 2), (2, 3), (2, 4), (2, 5), (3, 1), (3, 2), (5, 4)}

este un graf simplu având reprezentarea grafică din Figurile 3.1.3 cu nodurile reprezentate prin
puncte) s, i 3.1.4 (cu nodurile reprezentate ı̂n cerculet, e).
TEMA 3. GRAFURI 28

1 2
5

3 4
Figura 3.1.3:

1 2

3 4

Figura 3.1.4:

Arcul (3, 1) are extremitatea init, ială 3 s, i extremitatea finală 1.

Definit, ia 3.1.9. Fie G1 = (V1 , E1 ) s, i G2 = (V2 , E2 ) două grafuri (ambele orientate sau ambele
neorientate).

a) Spunem că G1 este un subgraf al lui G2 s, i notăm G1 ⊆ G2 dacă V1 ⊆ V2 s, i E1 ⊆ E2 .

b) Spunem că G1 este un graf part, ial al lui G2 dacă V1 = V2 s, i E1 ⊆ E2 .

Definit, ia 3.1.10. Fie G = (V, E) un graf (neorientat sau orientat) s, i U ⊆ V o submult, ime nevidă
de noduri. Subgraful indus (generat) de U ı̂n G este subgraful G[U] = (U, F ), unde F este
colect, ia tuturor muchiilor sau arcelor din E ce au ambele extremităt, i ı̂n U.

Definit, ia 3.1.11. Fie G = (V, E) un graf (orientat sau neorientat) s, i F ⊆ E o colect, ie de muchii
sau de arce.

a) Subgraful indus (generat) de F ı̂n G este subgraful G[F ] = (U, F ), unde U este mult, imea
tuturor nodurilor din V ce sunt extremităt, i pentru cel put, in o muchie sau un arc din F .

b) Graful part, ial indus (generat) de F ı̂n G este graful part, ial (V, F ).

Exemplul 3.1.3. Pentru graful neorientat din Exemplul 3.1.1, subgraful generat de submult, imea de
noduri {1, 3, 4, 5} are reprezentarea din Figura 3.1.5.
TEMA 3. GRAFURI 29

1 3

e2
e7
e8
4 5
e9

Figura 3.1.5:

Pentru graful orientat din Exemplul 3.1.2, subgraful generat de submult, imea de arce {(2, 3), (5, 4)}
are reprezentarea din Figura 3.1.6, iar graful part, ial generat de aceeas, i submult, ime de arce are
reprezentarea din Figura 3.1.7.

2 1 2

5 5

3 4 3 4

Figura 3.1.6: Figura 3.1.7:

Definit, ia 3.1.12. Fie G = (V, E) un graf (neorientat sau orientat) s, i U ⊆ V o submult, ime de
noduri a.ı̂. U 6= V . Subgraful obt, inut din G prin eliminarea nodurilor mult, imii U este
subgraful G \ U = (V \ U, F ), unde F este colect, ia tuturor muchiilor sau arcelor din E ce nu sunt
incidente cu niciun nod din U.
Definit, ia 3.1.13. Fie G = (V, E) un graf (neorientat sau orientat) s, i F ⊆ E o colect, ie de muchii
sau arce. Graful part, ial obt, inut din G prin eliminarea muchiilor sau arcelor din F este
G \ F = (V, E \ F ) (adică subgraful ce cont, ine toate nodurile lui G s, i muchiile sau arcele lui G care
nu apart, in lui F ).
Exemplul 3.1.4. Pentru graful orientat din Exemplul 3.1.2, subgraful obt, inut prin eliminarea nodului
2 are reprezentarea din Figura 3.1.8.

3 4

Figura 3.1.8:
TEMA 3. GRAFURI 30

Pentru graful neorientat din Exemplul 3.1.1, graful part, ial obt, inut prin eliminarea muchiilor
e2 , e4 , e6 , e8 are reprezentarea din Figura 3.1.9.

e3
e1
1 2 3

e5
e7

4 5 6
e9

Figura 3.1.9:

Observat, ia 3.1.5. Fie G = (V, E) un graf (neorientat sau orientat) s, i U ⊆ V .


a) Dacă U 6= ∅, atunci G[U] = G \ (V \ U).
b) Dacă U 6= V , atunci G \ U = G[V \ U].
Observat, ia 3.1.6. Fie G = (V, E) un graf (neorientat sau orientat) s, i F ⊆ E.
a) Graful part, ial indus de F ı̂n G este G \ (E \ F ).
b) Graful part, ial G \ F este chiar graful part, ial indus de E \ F ı̂n G.

3.2 Reprezentarea (memorarea) grafurilor


În continuare descriem câteva forme de reprezentare (memorare) a grafurilor ı̂n informatică. Dintre
aceste forme, cea mai utilizată este matricea de adiacent, ă.
Definit, ia 3.2.1. Fie G = (V, E) un graf (neorientat sau orientat) unde V = {v1 , . . . , vn } s, i E =
{e1 , . . . , em }. Matricea de adiacent, ă asociată grafului G este matricea A = (aij )i,j=1,n definită
prin
aij = numărul de muchii sau de arce ek ∈ E de la nodul vi la nodul vj (adică muchii de forma
ek = [vi , vj ], respectiv arce de forma ek = (vi , vj )), ∀i, j ∈ {1, . . . , n}.
Observat, ia 3.2.1. a) Dacă graful neorientat G = (V, E) este simplu, atunci

1, dacă vi s, i vj sunt adiacente (adică [vi , vj ] ∈ E),
aij =
0, ı̂n caz contrar.
b) Dacă graful orientat G = (V, E) este simplu, atunci

1, dacă (vi , vj ) ∈ E,
aij =
0, ı̂n caz contrar.
TEMA 3. GRAFURI 31

Exemplul 3.2.1. Matricea de adiacent, ă asociată grafului neorientat din Exemplul 3.1.1 este
 
0 1 0 1 0 0
 1 1 0 0 1 0 
 
 0 0 0 0 0 2 
A=  1 0 0 0 3 0 ,

 
 0 1 0 3 0 0 
0 0 2 0 0 0

iar matricea de adiacent, ă asociată grafului orientat din Exemplul 3.1.2 este
 
0 1 0 0 0
 0 0 1 1 1 
 
A=  1 1 0 0 0 .

 0 0 0 0 0 
0 0 0 1 0

Observat, ia 3.2.2. Evident, orice graf neorientat are matricea de adiacent, ă simetrică (aij = aji ∀ i, j).

Propozit, ia 3.2.1. Fie V = {v1 , . . . , vn }, n ∈ N⋆ .


n(n−1)
a) Numărul de grafuri neorientate simple având mult, imea de noduri V este egal cu 2 2 .
2 −n
b) Numărul de grafuri orientate simple având mult, imea de noduri V este egal cu 2n .

Demonstrat, ie. a) Orice graf neorientat simplu având mult, imea de noduri V este bine determinat de
matricea sa de adiacent, ă, care este o matrice binară (cu elemente 0 s, i 1), simetrică s, i cu elementele
de pe diagonala principală egale cu zero. Cum o astfel de matrice este bine determinată de cele

n(n − 1)
n −1+···+2+1 =
2
elemente 0 sau 1 de deasupra diagonalei principale, utilizând Propozit, ia 1.4.1 obt, inem că numărul
n(n−1)
de astfel de matrice este egal cu 2 2 .
Punctul b) se demonstrează analog, folosind acum faptul că matricea de adiacent, ă a unui graf
orientat simplu este o matrice binară cu elementele de pe diagonala principală egale cu zero, deci
este bine determinată de cele n2 − n elemente 0 sau 1 nesituate pe această diagonală.

Definit, ia 3.2.2. Fie G = (V, E) un graf, unde V = {v1 , . . . , vn } s, i E = {e1 , . . . , em }, E 6= ∅.

a) Dacă G este neorientat, atunci matricea de incident, ă asociată grafului G este matricea
B = (bij ) i = 1, n definită prin
j = 1, m

 0, dacă ej nu este incidentă cu vi ,
bij = 1, dacă ej nu este buclă s, i este incidentă cu vi ,

2, dacă ej este o buclă incidentă cu vi ,

∀ i ∈ {1, . . . , n}, ∀ j ∈ {1, . . . , m}.


TEMA 3. GRAFURI 32

b) Dacă G este orientat s, i fără bucle, atunci matricea de incident, ă asociată grafului G este
matricea B = (bij ) i = 1, n definită prin
j = 1, m

 0, dacă ej nu este incidentă cu vi ,
bij = 1, dacă ej este incidentă cu vi spre exterior,

−1, dacă ej este incidentă cu vi spre interior,

∀ i ∈ {1, . . . , n}, ∀ j ∈ {1, . . . , m}.

Exemplul 3.2.2. Matricea de incident, ă a grafului neorientat din Exemplul 3.1.1 este
 
1 1 0 0 0 0 0 0 0
 1 0 2 1 0 0 0 0 0 
 
 0 0 0 0 1 1 0 0 0 
B=  0
,
 1 0 0 0 0 1 1 1  
 0 0 0 1 0 0 1 1 1 
0 0 0 0 1 1 0 0 0

iar matricea de incident, ă a grafului orientat din Exemplul 3.1.2 este


 
1 0 0 0 −1 0 0
 −1 1 1 1 0 −1 0 
 
B=  0 −1 0 0 1 1 0 .

 0 0 −1 0 0 0 −1 
0 0 0 −1 0 0 1

Observat, ia 3.2.3. Fie G = (V, E) un graf (neorientat sau orientat), unde V = {v1 , . . . , vn } s, i E =
{e1 , . . . , em }, E 6= ∅. O altă reprezentare a grafului G este matricea T ce ret, ine ı̂n fiecare coloană
extremităt, ile unei muchii sau arc, adică T = (tkj ) k = 1, 2 definită prin t1j = x, t2j = y, unde
j = 1, m
ej = [x, y] (pentru muchii) sau ej = (x, y) (pentru arce), ∀ j ∈ {1, . . . , m}. Pentru graful din
Exemplul 3.1.1 matricea T este
 
1 1 2 2 3 3 4 4 4
T = ,
2 4 2 5 6 6 5 5 5

iar pentru graful din Exemplul 3.1.2 matricea T este


 
1 2 2 2 3 3 5
T = .
2 3 4 5 1 2 4

Observat, ia 3.2.4. O altă formă frecvent utilizată ı̂n reprezentarea grafurilor simple este dată de
listele de adiacent, ă (memorate static sau dinamic). Lista de adiacent, ă a unui nod x este formată
din toate nodurile y pentru care există muchie sau arc de la x la y (y se numes, te succesor direct
al lui x). Pentru graful orientat din Exemplul 3.1.2, listele de adiacent, ă sunt

L(1) = {2}, L(2) = {3, 4, 5}, L(3) = {1, 2}, L(4) = ∅, L(5) = {4},

unde L(i) reprezintă lista de adiacent, ă a nodului i. Pentru grafurile orientate simple, deseori se
memorează s, i listele de predecesori direct, i. Lista de predecesori direct, i a unui nod x este formată
TEMA 3. GRAFURI 33

din toate nodurile y pentru care există arc de la y la x (y se numes, te predecesor direct al lui x).
Pentru graful din Exemplul 3.1.2, aceste liste sunt

L̄(1) = {3}, L̄(2) = {1, 3}, L̄(3) = {2}, L̄(4) = {2, 5}, L̄(5) = {2}.

Evident, pentru grafurile neorientate not, iunile de succesor direct s, i predecesor direct coincid, fiind s, i
sinonime cu not, iunile de vecin sau adiacent.
Observat, ia 3.2.5. Alegerea uneia sau alteia dintre formele de reprezentare a grafurilor descrise mai
sus depinde de eficient, a s, i de us, urint, a implementării operat, iilor necesare de prelucrare a acestor
forme, deci de tipul problemei modelate prin grafuri s, i de algoritmul de rezolvare utilizat.

3.3 Grade, secvent, e grafice


Definit, ia 3.3.1. Fie G = (V, E) un graf s, i x ∈ V un nod arbitrar fixat.
a) Dacă G este neorientat, atunci gradul lui x, notat dG (x) = d(x), este definit prin

d(x) = a(x) + 2 · b(x),

unde a(x) reprezintă numărul de muchii e ∈ E ce nu sunt bucle s, i sunt incidente cu x, iar b(x)
este numărul de bucle e ∈ E ce sunt incidente cu x.

b) Dacă G este orientat, atunci:


• gradul de ies, ire (semigradul exterior) al lui x, notat d+ +
G (x) = d (x), reprezintă
numărul de arce e ∈ E incidente cu x spre exterior;
• gradul de intrare (semigradul interior) al lui x, notat d− −
G (x) = d (x), reprezintă
numărul de arce e ∈ E incidente cu x spre interior;
• gradul (total al) lui x, notat dG (x) = d(x), este

d(x) = d+ (x) + d− (x).

Exemplul 3.3.1. Pentru graful neorientat din Exemplul 3.1.1, gradele nodurilor sunt: d(1) = 2,
d(2) = 4, d(3) = 2, d(4) = 4, d(5) = 4, d(6) = 2.
Pentru graful orientat din Exemplul 3.1.2, gradele nodurilor sunt:

d+ (1) = 1, d− (1) = 1, d(1) = 2,


d+ (2) = 3, d− (2) = 2, d(2) = 5,
d+ (3) = 2, d− (3) = 1, d(3) = 3,
d+ (4) = 0, d− (4) = 2, d(4) = 2,
d+ (5) = 1, d− (5) = 1, d(5) = 2.

Definit, ia 3.3.2. Fie G = (V, E) un graf. Un nod x ∈ V cu dG (x) = 0 se numes, te nod izolat, iar
un nod y ∈ V cu dG (y) = 1 se numes, te nod terminal.
Propozit, ia 3.3.1. Fie G = (V, E) un graf, V = {v1 , . . . , vn }, s, i fie A = (aij )i,j=1,n matricea de
adiacent, ă a grafului G.
P
n
a) Dacă G este neorientat, atunci d(vi ) = aii + aij , ∀ i ∈ {1, . . . , n}.
j=1
TEMA 3. GRAFURI 34

P
n P
n
b) Dacă G este orientat, atunci d+ (vi ) = aij , d− (vi ) = aji , ∀ i ∈ {1, . . . , n}.
j=1 j=1

Demonstrat, ie. Egalităt, ile din enunt, sunt evidente, conform definit, iilor gradelor s, i matricei de adia-
cent, ă.
Observat, ia 3.3.1. Dacă graful G este simplu, atunci aii = 0 ∀ i s, i egalitatea de la punctul a) al
P
n
propozit, iei anterioare devine d(vi ) = aij .
j=1

P
Propozit, ia 3.3.2 (Euler). Fie G = (V, E) un graf având dimensiunea m. Atunci d(x) = 2m.
x∈V
P + P −
În plus, dacă G este orientat atunci d (x) = d (x) = m.
x∈V x∈V

Demonstrat, ie. a) Considerăm că G este neorientat. Atunci fiecare muchie e = [vi , vj ] ∈ E (din cele
m muchii) contribuie cu 1 la d(vi ) s, i cu 1 la d(vj ) (cu 2 la d(vi ) dacă vi = vj , adică e = buclă), deci
P
cu 2 la suma d(x). Rezultă că această sumă este egală cu 2m.
x∈V
b) Considerăm că G este orientat. Deoarece fiecare arc e = (vi , vj ) ∈ E contribuie cu 1 la
+
P + P −
d (vi ), deci la d (x), s, i tot cu 1 la d− (vj ), deci la d (x), rezultă că aceste sume sunt egale
x∈V x∈V
P
cu numărul total de arce, adică cu m. Cum d(x) = d+ (x) + d− (x) ∀ x ∈ V , obt, inem s, i d(x) =
x∈V
P + P −
d (x) + d (x) = 2m.
x∈V x∈V

Propozit, ia 3.3.3. Fie d1 , d2, . . . , dn ∈ N, unde n ∈ N∗ . Atunci numerele d1 , d2 , . . . , dn sunt gradele


Pn
nodurilor unui graf neorientat de ordinul n dacă s, i numai dacă suma di este un număr par.
i=1

P
n
Demonstrat, ie. ”⇒” Conform Propozit, iei 3.3.2 avem di = 2m, unde m este dimensiunea grafului
i=1
având gradele nodurilor d1 , d2 , . . . , dn , deci suma considerată este un număr par.
Pn
”⇐” Demonstrăm că dacă di = 2m cu m ∈ N, atunci există un graf neorientat G = (V, E) cu
i=1
V = {v1 , . . . , vn } astfel ı̂ncât dG (vi ) = di , ∀ i ∈ {1, . . . , n}, prin induct, ie după m.
Pentru m = 0 rezultă că di = 0, ∀ i ∈ {1, . . . , n}, deci luând E = ∅ avem dG (vi ) = 0 = di ,
∀ i ∈ {1, . . . , n}.
Presupunem afirmat, ia adevărată pentru m − 1 s, i o demonstrăm pentru m, unde m ∈ N∗ . Fie
Pn
di = 2m. Avem două cazuri.
i=1
Cazul 1) Există j, k ∈ {1, . . . , n}, j 6= k, astfel ı̂ncât dj ≥ 1 s, i dk ≥ 1. Fie

′ di − 1, dacă i ∈ {j, k},
di =
di , dacă i ∈ {1, . . . , n} \ {j, k}.
P
n P
n
Atunci d′i = di − 2 = 2(m − 1), deci, conform ipotezei de induct, ie, există un graf neorientat
i=1 i=1
G′ = (V, E ′ ) cu V = {v1 , . . . , vn } astfel ı̂ncât dG′ (vi ) = d′i , ∀ i ∈ {1, . . . , n}. Fie graful G =
(V, E ′ ∪ {e}), unde e = [vj , vk ], e 6∈ E ′ . Evident, avem dG (vj ) = dG′ (vj ) + 1 = d′j + 1 = dj ,
dG (vk ) = dG′ (vk ) + 1 = d′k + 1 = dk s, i dG (vi ) = dG′ (vi ) = d′i = di pentru orice i ∈ {1, . . . , n} \ {j, k}.
Astfel dG (vi ) = di , ∀ i ∈ {1, . . . , n}.
TEMA 3. GRAFURI 35

Cazul 2) Există j ∈ {1, . . . , n} astfel ı̂ncât di = 0 pentru orice i ∈ {1, . . . , n} \ {j}. Atunci
P
n
dj = di = 2m. Fie graful G = (V, E), cu V = {v1 , . . . , vn } s, i E = {e1 , . . . , em }, unde ek = [vj , vj ],
i=1
∀ k ∈ {1, . . . , m}, iar buclele e1 , . . . , em sunt distincte două câte două. Evident, avem dG (vj ) = 2m =
dj s, i dG (vi ) = 0 = di pentru orice i ∈ {1, . . . , n} \ {j}. Astfel, din nou, dG (vi ) = di , ∀ i ∈ {1, . . . , n}.
Demonstrat, ia prin induct, ie este ı̂ncheiată.
Observat, ia 3.3.2. Demonstrat, ia propozit, iei anterioare este constructivă, ea indicând un algoritm de
generare a unui graf neorientat cu gradele nodurilor date.
Exemplul 3.3.2. Numerele 1, 1, 1, 2, 4, 4, 5, 5 nu pot fi gradele nodurilor unui graf neorientat, deoarece
P
8
suma di = 23 este un număr impar.
i=1
Exemplul 3.3.3. Numerele 1, 1, 1, 1, 2, 2, 3, 13 pot fi gradele nodurilor unui graf neorientat, deoarece
P
8
suma di = 24 este un număr par. Mai mult, conform demonstrat, iei propozit, iei anterioare (partea
i=1
”⇐”), un graf având gradele nodurilor numerele date se construies, te adăugând succesiv câte o muchie
ı̂ntre două noduri de grade nenule, grade care se mics, orează cu 1, până când fie toate gradele devin
egale cu zero, fie rămâne un grad nenul d′i , par, care este anulat s, i el prin d′i /2 bucle. Acest procedeu
este evident, iat ı̂n tabelul următor:
Pas Gradele rămase Muchia adăugată
1 1, 1, 1, 1, 2, 2, 3, 13 [v1 , v2 ]
2 0, 0, 1, 1, 2, 2, 3, 13 [v3 , v4 ]
3 0, 0, 0, 0, 2, 2, 3, 13 [v5 , v6 ]
4 0, 0, 0, 0, 1, 1, 3, 13 [v5 , v6 ]
5 0, 0, 0, 0, 0, 0, 3, 13 [v7 , v8 ]
6 0, 0, 0, 0, 0, 0, 2, 12 [v7 , v8 ]
7 0, 0, 0, 0, 0, 0, 1, 11 [v7 , v8 ]
8 0, 0, 0, 0, 0, 0, 0, 10 [v8 , v8 ] de 5 ori
– 0, 0, 0, 0, 0, 0, 0, 0 –
Graful obt, inut are matricea de adiacent, ă
 
0 1 0 0 0 0 0 0
 1 0 0 0 0 0 0 0 
 
 0 0 0 1 0 0 0 0 
 
 0 0 1 0 0 0 0 0 
A=  0
.

 0 0 0 0 2 0 0 
 0 0 0 0 2 0 0 0 
 
 0 0 0 0 0 0 0 3 
0 0 0 0 0 0 3 5

Propozit, ia 3.3.4. Fie d1 , d2 , . . . , dn ∈ N astfel ı̂ncât d1 ≤ d2 ≤ . . . ≤ dn , unde n ∈ N, n ≥ 2. Atunci


numerele d1 , d2 , . . . , dn sunt gradele nodurilor unui multigraf neorientat de ordinul n dacă s, i numai
P
n P
n−1
dacă suma di este un număr par s, i dn ≤ di .
i=1 i=1

P
n
Demonstrat, ie. ”⇒” Conform Propozit, iei 3.3.2 avem di = 2m, unde m este dimensiunea multigra-
i=1
fului având gradele nodurilor d1 , d2 , . . . , dn , deci suma considerată este un număr par. De asemenea,
TEMA 3. GRAFURI 36

P
n−1
avem dn = ai , unde, pentru orice i ∈ {1, . . . , n − 1}, ai reprezintă numărul de muchii de forma
i=1
P
n−1
[vn , vi ]. Cum ai ≤ di pentru orice i ∈ {1, . . . , n − 1}, rezultă că dn ≤ di .
i=1
P
n P
n−1
”⇐” Arătăm că dacă di = 2m cu m ∈ N, d1 ≤ d2 ≤ . . . ≤ dn s, i dn ≤ di , atunci există un
i=1 i=1
multigraf neorientat G = (V, E) cu V = {v1 , . . . , vn } astfel ı̂ncât dG (vi ) = di , ∀ i ∈ {1, . . . , n}.
Pentru n = 2 rezultă că d1 = d2 , deci considerând multigraful G = (V, E), cu V = {v1 , v2 } s, i
E = {e1 , . . . , em }, unde m = d1 = d2 s, i ek = [v1 , v2 ], ∀k ∈ {1, . . . , m}, iar muchiile multiple e1 , . . . , em
sunt distincte două câte două, obt, inem că dG (v1 ) = m = d1 s, i dG (v2 ) = m = d2 .
Pentru n ≥ 3 demonstrăm afirmat, ia prin induct, ie după m.
Pentru m = 0 rezultă că di = 0, ∀ i ∈ {1, . . . , n}, deci luând E = ∅ avem dG (vi ) = 0 = di ,
∀ i ∈ {1, . . . , n}.
Presupunem afirmat, ia adevărată pentru m − 1 s, i o demonstrăm pentru m, unde m ∈ N∗ . Fie
Pn P
n−1 Pn
di = 2m, d1 ≤ d2 ≤ . . . ≤ dn s, i dn ≤ di . Deoarece di = 2m ≥ 2, rezultă că dn ≥ 1. Cum
i=1 i=1 i=1
P
n−1
dn ≤ di , rezultă că s, i dn−1 ≥ 1. Fie
i=1

di , dacă 1 ≤ i ≤ n − 2,
d′i =
di − 1, dacă i ∈ {n − 1, n}.
P
n P
n
Atunci d′i = di − 2 = 2(m − 1). Avem două cazuri.
i=1 i=1
P
n−1 P
n−1
Cazul 1) dn−2 < dn . Atunci d′1 ≤ d′2 ≤ . . . ≤ d′n s, i d′n = dn − 1 ≤ di − 1 = d′i , deci, conform
i=1 i=1
ipotezei de induct, ie, există un multigraf neorientat G′ = (V, E ′ ) cu V = {v1 , . . . , vn } astfel ı̂ncât
dG′ (vi ) = d′i , ∀ i ∈ {1, . . . , n}.
Cazul 2) dn−2 = dn , deci s, i dn−1 = dn . Atunci d′1 ≤ d′2 ≤ . . . ≤ d′n−2 = dn s, i d′n−1 = d′n = dn − 1,
deci
max d′i = d′n−2.
i=1,n

P
n P
n−3 P
n−3
Avem d′i − 2d′n−2 = di + dn + (dn − 1) + (dn − 1) − 2dn = di + dn − 2 ≥ −1, deoarece dn ≥ 1.
i=1 i=1 i=1
P
n P
n
Pe de altă parte, d′i − 2d′n−2 = 2(m − 1) − 2d′n−2 , deci d′i − 2d′n−2 este un număr par. Astfel
i=1 i=1
P
n
rezultă că d′i − 2d′n−2 ≥ 0. Obt, inem că
i=1

n−3
X
max d′i = d′n−2 ≤ d′i + d′n−1 + d′n ,
i=1,n
i=1

deci, conform ipotezei de induct, ie (aplicată pentru numerele d′1 , d′2 , . . . , d′n rearanjate ı̂n ordine cres-
cătoare), rezultă din nou că există un multigraf neorientat G′ = (V, E ′ ) cu V = {v1 , . . . , vn } astfel
ı̂ncât dG′ (vi ) = d′i , ∀ i ∈ {1, . . . , n}.
În ambele cazuri, fie multigraful G = (V, E ′ ∪ {e}), unde e = [vn−1 , vn ], e 6∈ E ′ . Evident,
avem dG (vn−1 ) = dG′ (vn−1 ) + 1 = d′n−1 + 1 = dn−1, dG (vn ) = dG′ (vn ) + 1 = d′n + 1 = dn s, i
dG (vi ) = dG′ (vi ) = d′i = di pentru orice i ∈ {1, . . . , n − 2}. Astfel dG (vi ) = di , ∀ i ∈ {1, . . . , n}.
Demonstrat, ia prin induct, ie este ı̂ncheiată.
TEMA 3. GRAFURI 37

Observat, ia 3.3.3. Demonstrat, ia propozit, iei anterioare este constructivă, ea indicând un algoritm de
generare a unui multigraf neorientat cu gradele nodurilor date.
Exemplul 3.3.4. Numerele 1, 1, 1, 1, 2, 2, 3, 13 din exemplul anterior nu pot fi gradele nodurilor unui
P8 P7
multigraf neorientat, deoarece suma di = 24 este un număr par, dar d8 = 13 > 11 = di .
i=1 i=1
Exemplul 3.3.5. Numerele 1, 1, 1, 2, 4, 5, 5, 5 pot fi gradele nodurilor unui multigraf neorientat, deoarece
P
8 P7
suma di = 24 este un număr par s, i d8 = 5 ≤ 19 = di . Mai mult, conform demonstrat, iei propo-
i=1 i=1
zit, iei anterioare (partea ”⇐”), un multigraf având gradele nodurilor numerele date se construies, te
adăugând succesiv câte o muchie ı̂ntre două noduri de grade nenule maxime, grade care se mics, orează
cu 1, până când gradele devin toate egale cu zero. Acest procedeu este evident, iat ı̂n tabelul următor:
Pas Gradele rămase Muchia adăugată
1 1, 1, 1, 2, 4, 5, 5, 5 [v7 , v8 ]
2 1, 1, 1, 2, 4, 5, 4, 4 [v6 , v8 ]
3 1, 1, 1, 2, 4, 4, 4, 3 [v6 , v7 ]
4 1, 1, 1, 2, 4, 3, 3, 3 [v5 , v8 ]
5 1, 1, 1, 2, 3, 3, 3, 2 [v6 , v7 ]
6 1, 1, 1, 2, 3, 2, 2, 2 [v5 , v8 ]
7 1, 1, 1, 2, 2, 2, 2, 1 [v6 , v7 ]
8 1, 1, 1, 2, 2, 1, 1, 1 [v4 , v5 ]
9 1, 1, 1, 1, 1, 1, 1, 1 [v7 , v8 ]
10 1, 1, 1, 1, 1, 1, 0, 0 [v5 , v6 ]
11 1, 1, 1, 1, 0, 0, 0, 0 [v3 , v4 ]
12 1, 1, 0, 0, 0, 0, 0, 0 [v1 , v2 ]
– 0, 0, 0, 0, 0, 0, 0, 0 –
Multigraful obt, inut are matricea de adiacent, ă
 
0 1 0 0 0 0 0 0
 1 0 0 0 0 0 0 0 
 
 0 0 0 1 0 0 0 0 
 
 0 0 1 0 1 0 0 0 
A=  0 0 0
.

 1 0 1 0 2 
 0 0 0 0 1 0 3 1 
 
 0 0 0 0 0 3 0 2 
0 0 0 0 2 1 2 0

Definit, ia 3.3.3. O secvent, ă (d1 , d2 , . . . , dn ) de numere naturale (n ∈ N∗ ) se numes, te secvent, ă


grafică (secvent, ă de grade, s, ir grafic, s, ir de grade) dacă există un graf neorientat simplu
G = (V, E) cu V = {v1 , v2 , . . . , vn } astfel ı̂ncât dG (vi ) = di , ∀ i ∈ {1, 2, . . . , n}.
Teorema 3.3.1 (Havel-Hakimi). Fie d1 , d2 , . . . , dn ∈ N astfel ı̂ncât d1 ≤ d2 ≤ . . . ≤ dn s, i dn ≥ 1,
unde n ∈ N, n ≥ 2. Atunci (d1 , d2, . . . , dn ) este o secvent, ă grafică dacă s, i numai dacă dn ≤ n − 1 s, i
(d1 , d2 , . . . , dn−dn −1 , dn−dn − 1, dn−dn+1 − 1, . . . , dn−1 − 1) este secvent, ă grafică.
Demonstrat, ie. ”⇒” Fie G = (V, E) un graf neorientat simplu cu V = {v1 , . . . , vn } astfel ı̂ncât
dG (vi ) = di , ∀ i ∈ {1, . . . , n}. Deoarece graful G este simplu, adică nu cont, ine nici bucle, nici
muchii multiple, rezultă că gradul dn = dG (vn ) este egal cu numărul de noduri adiacente cu vn , deci
dn ≤ n − 1. Fie M mult, imea nodurilor adiacente cu vn , deci card (M) = dn . Avem două cazuri.
TEMA 3. GRAFURI 38

Cazul 1) M = {vn−dn , vn−dn +1 , . . . , vn−1 }. Atunci graful G′ = (V ′ , E ′ ) definit prin V ′ = V \{vn } =


{v1 , . . . , vn−1 }, E ′ = E \ {[vn , x] | x ∈ M} este un graf neorientat simplu având gradele nodurilor
dG′ (vi ) = dG (vi ) = di , pentru 1 ≤ i ≤ n − dn − 1,
dG′ (vi ) = dG (vi ) − 1 = di − 1, pentru n − dn ≤ i ≤ n − 1,
deci (d1 , d2, . . . , dn−dn −1 , dn−dn − 1, dn−dn +1 − 1, . . . , dn−1 − 1) este secvent, ă grafică.
Cazul 2) M 6= {vn−dn , vn−dn +1 , . . . , vn−1 }. Fie
A = {vn−dn , vn−dn +1 , . . . , vn−1 } \ M, B = M \ {vn−dn , vn−dn +1 , . . . , vn−1 }.
Cum card ({vn−dn , vn−dn +1 , . . . , vn−1 }) = card (M) = dn , rezultă că avem card (A) = card (B) ≥ 1.
Fie r = card (A) = card (B), A = {vj1 , vj2 , . . . , vjr } s, i B = {vk1 , vk2 , . . . , vkr }, unde {j1 , j2 , . . . , jr } ⊆
{n−dn , n−dn + 1, . . . , n−1} s, i {k1 , k2 , . . . , kr } ⊆ {1, 2, . . . , n−dn −1}. Pentru orice i ∈ {1, 2, . . . , r},
cum dG (vji ) = dji ≥ dki = dG (vki ) s, i vn nu este adiacent cu vji , dar este adiacent cu vki , rezultă că
există un nod vti ∈ V care este adiacent cu vji , dar nu este adiacent cu vki . Fie graful G1 = (V, E1 )
definit prin
 [r  [ r
E1 = E \ {[vn , vki ], [vti , vji ]} ∪ {[vn , vji ], [vti , vki ]}.
i=1 i=1
Atunci G1 este un graf neorientat simplu având aceleas, i grade ale nodurilor ca s, i G, adică dG1 (vi ) =
dG (vi ) = di , pentru orice i ∈ {1, 2, . . . , n}. În plus, ı̂n graful G1 mult, imea nodurilor adiacente cu
vn este chiar mult, imea {vn−dn , vn−dn +1 , . . . , vn−1 }. Conform demonstrat, iei de la Cazul 1 (ı̂nlocuind
G cu G1 ) rezultă din nou că (d1 , d2 , . . . , dn−dn −1 , dn−dn − 1, dn−dn +1 − 1, . . . , dn−1 − 1) este secvent, ă
grafică.
”⇐” Fie dn ≤ n − 1 s, i G′ = (V ′ , E ′ ) un graf neorientat simplu cu V ′ = {v1 , . . . , vn−1 } astfel ı̂ncât
dG′ (vi ) = di , pentru 1 ≤ i ≤ n − dn − 1,
dG′ (vi ) = di − 1, pentru n − dn ≤ i ≤ n − 1.
Atunci graful G = (V, E) definit prin V = V ′ ∪ {vn } = {v1 , . . . , vn } (cu vn 6∈ V ′ ) s, i
E = E ′ ∪ {[vn , vi ] | n − dn ≤ i ≤ n − 1}
este un graf neorientat simplu având gradele nodurilor
dG (vi ) = dG′ (vi ) = di , pentru 1 ≤ i ≤ n − dn − 1,
dG (vi ) = dG′ (vi ) + 1 = di − 1 + 1 = di , pentru n − dn ≤ i ≤ n − 1,
dG (vn ) = dn ,
deci (d1 , d2, . . . , dn ) este secvent, ă grafică.
Observat, ia 3.3.4. Demonstrat, ia teoremei anterioare este constructivă, ea indicând un algoritm re-
cursiv de generare a unui graf neorientat simplu cu gradele nodurilor date.
Exemplul 3.3.6. Verificăm dacă secvent, a (1, 1, 1, 2, 4, 5, 5, 5) din exemplul anterior este secvent, ă
grafică. Conform teoremei anterioare avem echivalentele:
(1, 1, 1, 2, 4, 5, 5, 5) este secvent, ă grafică
⇔ 5 ≤ 7 s, i (1, 1, 0, 1, 3, 4, 4) este secvent, ă grafică
⇔ 4 ≤ 6 s, i (1, 0, 0, 0, 2, 3) este secvent, ă grafică
⇔ 3 ≤ 5 s, i (0, 0, 0, −1, 1) este secvent, ă grafică.
Cum ultima secvent, ă nu este o secvent, ă grafică (deoarece gradele nu pot fi negative), rezultă că nici
secvent, a init, ială nu este secvent, ă grafică.
TEMA 3. GRAFURI 39

Exemplul 3.3.7. Verificăm dacă secvent, a (1, 1, 2, 3, 4, 5, 5, 5) este secvent, ă grafică. Conform teoremei
anterioare avem echivalentele:

S1 = (1, 1, 2, 3, 4, 5, 5, 5) este secvent, ă grafică


⇔ 5 ≤ 7 s, i S2 = (1, 1, 1, 2, 3, 4, 4) este secvent, ă grafică
⇔ 4 ≤ 6 s, i S3 = (1, 1, 0, 1, 2, 3) este secvent, ă grafică
⇔ 3 ≤ 5 s, i S4 = (1, 0, 0, 0, 1) este secvent, ă grafică
⇔ 1 ≤ 4 s, i S5 = (0, 0, 0, 0) este secvent, ă grafică.

Cum ultima secvent, ă, S5 , este o secvent, ă grafică, fiind secvent, a gradelor grafului simplu de ordin
4 s, i dimensiune 0, rezultă că s, i secvent, a init, ială, S1 , este secvent, ă grafică. Mai mult, conform
demonstrat, iei teoremei amintite (partea ”⇐”), avem succesiv:

S5 = (0, 0, 0, 0) este secvent, a gradelor grafului G5 = ({v1 , . . . , v4 }, E5 ) cu E5 = ∅;


S4 = (1, 0, 0, 0, 1) este secvent, a gradelor grafului G4 = ({v1 , . . . , v5 }, E4 ) cu
E4 = E5 ∪ {[v5 , v1 ]};
S3 = (1, 1, 0, 1, 2, 3) este secvent, a gradelor grafului G3 = ({v1 , . . . , v6 }, E3 ) cu
E3 = E4 ∪ {[v6 , v2 ], [v6 , v4 ], [v6 , v5 ]};
S2 = (1, 1, 1, 2, 3, 4, 4) este secvent, a gradelor grafului G2 = ({v1 , . . . , v7 }, E2 ) cu
E2 = E3 ∪ {[v7 , v3 ], [v7 , v4 ], [v7 , v5 ], [v7 , v6 ]};
S1 = (1, 1, 2, 3, 4, 5, 5, 5) este secvent, a gradelor grafului G1 = ({v1 , . . . , v8 }, E1 ) cu
E1 = E2 ∪ {[v8 , v3 ], [v8 , v4 ], [v8 , v5 ], [v8 , v6 ], [v8 , v7 ]}.

Graful G1 este reprezentat ı̂n Figura 3.3.1.

v2 v3

v1 v4

v8 v5

v7 v6

Figura 3.3.1:
TEMA 3. GRAFURI 40

3.4 Conexitate
Definit, ia 3.4.1. Fie G = (V, E) un graf.

a) Un lant, ı̂n graful G este o succesiune alternantă

[v1 , e1 , v2 , e2 , . . . , vk , ek , vk+1 ],

unde v1 , v2 , . . . , vk+1 ∈ V (noduri), e1 , e2 , . . . , ek ∈ E (muchii sau arce), k ∈ N, cu proprietatea


că pentru orice i ∈ {1, . . . , k} ei este o muchie sau un arc având extremităt, ile vi s, i vi+1 (adică
ei = [vi , vi+1 ] pentru un graf neorientat, respectiv ei = (vi , vi+1 ) sau ei = (vi+1 , vi ) pentru un
graf orientat). Nodurile v1 s, i vk+1 se numesc extremităt, ile lant, ului, iar nodurile v2 , . . . , vk
se numesc noduri intermediare. Numărul k de muchii sau arce (nu neapărat distincte) ale
lant, ului se numes, te lungimea lant, ului.

b) Un lant, se numes, te ı̂nchis dacă are extremităt, ile egale, respectiv deschis ı̂n caz contrar.

c) Un lant, se numes, te simplu dacă muchiile sau arcele sale sunt diferite două câte două (con-
siderând diferite s, i muchiile sau arcele multiple aflate pe pozit, ii diferite ı̂n E).

d) Un lant, deschis se numes, te elementar dacă nodurile sale sunt diferite două câte două. Un
lant, ı̂nchis se numes, te elementar dacă este simplu s, i, cu except, ia extremităt, ilor, nodurile
sale sunt diferite două câte două.

e) Un ciclu este un lant, ı̂nchis s, i simplu de lungime nenulă (adică cu cel put, in o muchie sau un
arc).

f ) Un drum este un lant, [v1 , e1 , v2 , e2 , . . . , vk , ek , vk+1 ] cu proprietatea că pentru orice i ∈ {1, . . . , k}
muchia sau arcul ei are extremitatea init, ială vi s, i extremitatea finală vi+1 (adică ei = (vi , vi+1 )
pentru graf orientat).
Un astfel de drum se notează s, i cu

(v1 , e1 , v2 , e2 , . . . , vk , ek , vk+1 ),

nodurile v1 s, i vk+1 numindu-se extremitatea init, ială, respectiv extremitatea finală a dru-
mului.

g) Un circuit este un drum ı̂nchis s, i simplu de lungime nenulă (adică un drum ce este s, i ciclu).

Observat, ia 3.4.1. Pentru grafurile neorientate not, iunile de lant, s, i de drum coincid; deci s, i not, iunile
de ciclu s, i de circuit coincid.
Observat, ia 3.4.2. Orice lant, elementar este s, i simplu.
Observat, ia 3.4.3. Pentru grafurile neorientate sau orientate simple orice lant, [v1 , e1 , v2 , e2 , . . . , vk , ek , vk+1 ]
sau drum (v1 , e1 , v2 , e2 , . . . , vk , ek , vk+1 ) este bine determinat de nodurile sale (deoarece muchia sau
arcul ei nu poate fi decât singura muchie sau singurul arc de la vi la vi+1 , ∀ i), deci poate fi notat,
pe scurt, doar prin nodurile succesive

[v1 , v2 , . . . , vk , vk+1 ], respectiv (v1 , v2 , . . . , vk , vk+1 ).


TEMA 3. GRAFURI 41

Exemplul 3.4.1. Pentru graful neorientat din Exemplul 3.1.1,

[1, e2 , 4, e9, 5, e4 , 2, e1 , 1, e2 , 4]

este un lant, (drum) deschis, nesimplu (cont, ine de două ori e2 ), neelementar (cont, ine de două ori 1),
de lungime 5.
În acelas, i graf, [1, e1 , 2, e3 , 2, e4 , 5, e7, 4, e9 , 5, e8 , 4, e2 , 1] este un ciclu (circuit) simplu s, i neelementar
(cont, ine de două ori 2), de lungime 7.
Pentru graful orientat simplu din Exemplul 3.1.2, [3, 1, 2, 4, 5] este un lant, ce nu este drum
(deoarece (4, 5) nu este arc, ci (5, 4)), iar (3, 1, 2, 5, 4) este un drum (s, i lant, ) deschis elementar
(s, i simplu) de lungime 4. În acelas, i graf, (1, 2, 3, 1) este un circuit (s, i ciclu) elementar, iar [2, 5, 4, 2]
este un ciclu elementar ce nu este circuit (deoarece (4, 2) nu este arc, ci (2, 4)).

Definit, ia 3.4.2. a) Un graf (neorientat sau orientat) se numes, te conex dacă pentru orice două
noduri distincte x, y există cel put, in un lant, de la x la y.

b) Un graf orientat se numes, te tare-conex dacă pentru orice două noduri distincte x, y există cel
put, in un drum de la x la y (deci, schimbând ordinea lui x s, i y, există cel put, in un drum s, i de
la y la x).

Observat, ia 3.4.4. Orice graf tare-conex este s, i conex (deoarece orice drum este s, i lant, ). Orice graf
cu un singur nod verifică definit, ia anterioară, deci este s, i conex s, i tare-conex.
Observat, ia 3.4.5. Deoarece pentru orice nod x există lant, ul [x] s, i drumul (x) de lungimi zero, rezultă
că ı̂n definit, ia anterioară putem renunt, a la condit, iile ca nodurile x s, i y să fie distincte.
De asemenea, deoarece prin eliminarea tuturor port, iunilor dintre noduri egale dintr-un lant, sau
drum se obt, ine un lant, sau un drum elementar având aceleas, i extremităt, i, rezultă că ı̂n definit, ia
anterioară putem ı̂nlocui termenii de ”lant, ” s, i ”drum” cu ”lant, elementar”, respectiv ”drum elemen-
tar”.
Exemplul 3.4.2. Graful neorientat din Exemplul 3.1.1 nu este conex, deoarece nu există lant, uri ı̂ntre
nodurile 1 s, i 3. Graful orientat din Exemplul 3.1.2 este conex, dar nu este tare-conex, deoarece nu
există drum de la nodul 4 la nodul 1 (des, i există drum de la nodul 1 la nodul 4!).

Definit, ia 3.4.3. a) O componentă conexă a unui graf (orientat sau neorientat) G = (V, E)
este un subgraf G[U] generat de o submult, ime U ⊆ V de noduri cu proprietatea că G[U] este
conex s, i maximal cu această proprietate (ı̂n raport cu incluziunea), adică pentru orice nod
x ∈ V \ U subgraful G[U ∪ {x}] nu mai este conex.

b) O componentă tare-conexă a unui graf orientat G = (V, E) este un subgraf G[U] generat
de o mult, ime U ⊆ V de noduri cu proprietatea că G[U] este tare-conex s, i maximal cu această
proprietate (ı̂n raport cu incluziunea), adică pentru orice noduri x1 , x2 , . . . , xp ∈ V \ U subgraful
G[U ∪ {x1 , x2 , . . . , xp }] nu mai este tare-conex.

Observat, ia 3.4.6. Un graf este conex dacă s, i numai dacă are o singură componentă conexă. Un graf
orientat este tare-conex dacă s, i numai dacă are o singură componentă tare-conexă. Numărul de
componente tare-conexe ale unui graf orientat este mai mare sau egal decât numărul de componente
conexe ale acelui graf, deoarece orice componentă tare-conexă este inclusă ı̂ntr-o componentă conexă
(conform definit, iei anterioare s, i Observat, iei 3.4.4).
Observat, ia 3.4.7. Orice nod izolat x generează o componentă conexă s, i o componentă tare-conexă,
ambele având forma G[{x}] = ({x}, ∅).
TEMA 3. GRAFURI 42

Propozit, ia 3.4.1. a) Fie G[V1 ], . . . , G[Vk ] componentele conexe (diferite) ale unui graf G = (V, E).
Atunci {V1 , . . . , Vk } este o partit, ie a mult, imii V (adică Vi 6= ∅ ∀ i, Vi ∩ Vj = ∅ ∀ i 6= j,
V1 ∪ · · · ∪ Vk = V ).

b) Fie G[V1′ ], . . . , G[Vr′ ] componentele tare-conexe (diferite) ale unui graf orientat G = (V, E).
Atunci {V1′ , . . . , Vr′ } este de asemenea o partit, ie a mult, imii V .

Exemplul 3.4.3. Componentele conexe ale grafului neorientat din Exemplul 3.1.1 sunt generate de
submult, imile de noduri V1 = {1, 2, 4, 5} s, i V2 = {3, 6}, deci acel graf are 2 componente conexe.
Componentele tare-conexe ale grafului orientat din Exemplul 3.1.2 sunt generate de submult, imile de
noduri V1 = {1, 2, 3}, V2 = {4} s, i V3 = {5}, deci acel graf are 3 componente tare-conexe.
Observat, ia 3.4.8. Submult, imile de muchii sau arce ale componentelor conexe ale unui graf formează de
asemenea o partit, ie a mult, imii de muchii sau arce a grafului (deoarece pentru orice muchie e = [x, y]
sau arc e = (x, y) nodurile x s, i y se află ı̂ntr-o aceeas, i componentă conexă s, i această componentă
va cont, ine s, i pe e). Afirmat, ia nu mai este valabilă pentru componentele tare-conexe. De exemplu,
pentru graful din Exemplul 3.1.2 arcul (5, 4) nu apart, ine niciunei componente tare-conexe.
Algoritmi pentru testarea conexităt, ii s, i tare-conexităt, ii unui graf, precum s, i pentru determinarea
componentelor conexe s, i tare-conexe ale unui graf, vor fi prezentat, i ı̂n sect, iunile următoare.

Definit, ia 3.4.4. a) Un arbore este un graf conex s, i fără cicluri.

b) O pădure este un graf fără cicluri.

c) Un arbore part, ial al unui graf G = (V, E) este un graf part, ial al lui G ce este arbore (adică
un arbore T = (V, F ) cu F ⊆ E).

Observat, ia 3.4.9. Arborii s, i pădurile sunt grafuri simple (deoarece orice buclă este un ciclu s, i orice
două muchii sau arce multiple formează un ciclu).
Observat, ia 3.4.10. Componentele conexe ale unei păduri sunt arbori.
Exemplul 3.4.4. Graful neorientat din Exemplul 3.1.1 nu este pădure (deoarece are cicluri), deci nici
arbore. Graful său part, ial reprezentat ı̂n Figura 3.4.1 este o pădure (având două componente conexe
arbori).

e1
1 2 3

e2 e4 e5

4 5 6

Figura 3.4.1:

Graful orientat din Exemplul 3.1.2 nu este arbore (deoarece are cicluri). Doi arbori part, iali ai săi
sunt reprezentat, i ı̂n Figurile 3.4.2 s, i 3.4.3.
TEMA 3. GRAFURI 43

1 2 1 2

5 5

3 4 3 4

Figura 3.4.2: Figura 3.4.3:

Proprietăt, ile teoretice s, i algoritmice de bază ale arborilor vor fi evident, iate ı̂n capitolul următor.

3.5 Parcurgerea grafurilor


Prin parcurgerea unui graf se ı̂nt, elege o metodă sistematică de vizitare succesivă a nodurilor sale (ı̂n
vederea prelucrării informat, iilor atas, ate ı̂n structura de date modelată prin graful dat).

Definit, ia 3.5.1. Fie G = (V, E) un graf s, i x ∈ V un nod arbitrar fixat. Parcurgerea ı̂n adâncime
(DF, ”depth first”) a grafului G pornind din nodul x, numit s, i rădăcină a acestei parcurgeri, constă
ı̂n:

• se viziteză nodul x, acesta devine nod curent;

• dacă nodul curent vi are succesori direct, i (adică noduri vj pentru care există muchie sau arc de
la vi la vj ) nevizitat, i, atunci se vizitează primul astfel de nod vj ; nodul vj devine nod curent s, i
se continuă procedeul de parcurgere pornind din acest nod;

• dacă nodul curent vj nu mai are succesori direct, i nevizitat, i, atunci se revine la nodul predecesor
direct vi (cel din care a fost vizitat); nodul vi redevine nod curent s, i se continuă procedeul de
parcurgere pornind din acest nod;

• dacă nodul curent nu mai are nici succesori direct, i nevizitat, i, nici predecesor direct (deci este
chiar radăcina x), atunci parcurgerea se ı̂ncheie.

Observat, ia 3.5.1. Pentru parcurgerea DF, considerând câte o muchie sau un arc de la fiecare nod
curent vi la primul său succesor direct nevizitat vj (care va deveni următorul nod curent) se obt, ine
un arbore, numit arbore DF.
Exemplul 3.5.1. Pentru graful din Exemplul 3.1.2, parcurgerea ı̂n adâncime pornind din nodul 2 este

DF (2) : 2, 3, 1, 4, 5

(considerând că ordinea dintre succesorii direct, i ai fiecărui nod este ordinea crescătoare). Arborele
DF corespunzător acestei parcurgeri este reprezentat ı̂n Figura 3.5.1.
TEMA 3. GRAFURI 44

2 1

3 4 5 2

1 4 5

Figura 3.5.1: Figura 3.5.2:

Pentru acelas, i graf, parcurgerea DF pornind din nodul 3 este

DF (3) : 3, 1, 2, 4, 5,

iar arborele DF corespunzător este reprezentat ı̂n Figura 3.5.2.


Prezentăm ı̂n continuare doi algoritmi, unul recursiv s, i altul nerecursiv, pentru implementarea
parcurgerii ı̂n adâncime.
Algoritmul 3.5.1 (parcurgerea DF, recursiv). Fie graful G = (V, E) având mult, imea de noduri
V = {1, . . . , n} s, i matricea de adiacent, ă A = (aij )i,j=1,n . Fie x ∈ V un nod arbitrar fixat. Pentru
implementarea parcurgerii DF (x) vom utiliza un vector V IZ având semnificat, ia

1, dacă nodul i a fost vizitat,
V IZ[i] = ∀ i ∈ {1, . . . , n}.
0, ı̂n caz contrar,

Pentru memorarea arborelui DF (x) vom utiliza un vector T AT A având semnificat, ia



0, dacă i = x (rădăcina),
T AT A[i] =
predecesorul direct al lui i, dacă i 6= x,

pentru orice nod i din parcurgerea DF .


Descrierea ı̂n pseudocod a algoritmului recursiv de parcurgere ı̂n adâncime pornind din nodul x
are forma
TEMA 3. GRAFURI 45

DF RECURSIV(x) :
VIZITEAZĂ(x); // se vizitează x, de exemplu se afis, ează x
V IZ[x] ← 1; // x a fost vizitat
for y = 1, n do
if (a[x, y] ≥ 1) and (V IZ[y] = 0) then
// y este primul succesor direct nevizitat al lui x
T AT A[y] ← x;
DF RECURSIV(y); // se continuă parcurgerea DF
// din nodul y

Algoritmul 3.5.2 (parcurgerea DF, nerecursiv). Fie din nou G = (V, E) un graf având mult, imea
de noduri V = {1, . . . , n} s, i matricea de adiacent, ă A = (aij )i,j=1,n . Fie x ∈ V un nod arbitrar
fixat. Pentru implementarea nerecursivă a parcurgerii DF (x) vom utiliza vectorii V IZ s, i T AT A cu
aceleas, i semnificat, ii ca ı̂n algoritmul anterior, un vector URM cu semnificat, ia
URM[i] = următorul succesor direct al nodului i,
s, i o structură de tip stivă S, memorată ca un vector, ce cont, ine nodurile vizitate s, i ı̂n curs de
prelucrare, adică de vizitare a tuturor succesorilor.
Descrierea ı̂n pseudocod a algoritmului are forma
DF(x) :
VIZITEAZĂ(x); // se vizitează x, de exemplu se afis, ează x
V IZ[x] ← 1; // x a fost vizitat
T AT A[x] ← 0;
varf ← 1; S[varf ] ← x; // x se introduce ı ^n v^arful stivei
while (varf > 0) do // stiva este nevidă
i ← S[varf ]; // i este nodul din v^ arful stivei
j ← URM[i] + 1; // j va fi următorul succesor direct
// nevizitat al lui i, dacă există
while (a[i, j] = 0) and (j ≤ n) do j ← j + 1;
if (j > n) then
// nodul i nu mai are succesori direct, i nevizitat, i
varf ← varf − 1; // s-a ^ ıncheiat prelucrarea lui i
// s, i ı
^l eliminăm din stivă
else
URM[i] ← j; // j este următorul succesor direct
// al lui i
if (V IZ[j] = 0) then // j nu a fost vizitat
VIZITEAZĂ(j); // se vizitează j
V IZ[j] ← 1; // j a fost vizitat
T AT A[j] ← i;
varf ← varf + 1;
S[varf ] ← j; // se introduce j ı ^n v^arful stivei

// stiva este vidă, nu mai există noduri neprelucrate,


// parcurgerea este ı^ncheiată.

Observat, ia 3.5.2. Pentru un graf cu n noduri s, i m muchii sau arce, implementarea anterioară a
parcurgerii DF are complexitatea O(n2 ), deoarece oricare din cele n noduri este vizitat (deci introdus
TEMA 3. GRAFURI 46

s, i extras din stivă) cel mult căte o dată, iar căutarea succesorilor direct, i j nevizitat, i ai fiecărui nod i
extras din stivă se efectuează ı̂n cel mult n pas, i, prin parcurgerea liniei i din matricea de adiacent, ă.
Reamintim notat, ia utilizată, pentru orice funct, ie f : N → N,

O(f ) = {g|g : N → N, ∃r > 0, ∃n0 ∈ N a.ı̂. g(n) ≤ rf (n) ∀n ≥ n0 }.

Dacă graful este memorat prin intermediul listelor de adiacent, ă, atunci cautarea succesorilor direct, i
j nevizitat, i ai fiecărui nod i extras din stivă se efectuează, prin parcurgerea lor succesivă, ı̂n exact
d(i) (pentru graf neorientat) sau d+ (i) (pentru graf orientat) pas, i. Cum, conform Propozit, iei 3.3.2,
P P +
d(x) = 2m s, i d (x) = m, obt, inem că ı̂n acest caz parcurgerea DF are complexitatea O(n+m).
x∈V x∈V

Observat, ia 3.5.3. Dacă G = (V, E) este un graf neorientat, atunci pentru orice nod x ∈ V componenta
conexă a nodului x este (indusă de) chiar mult, imea nodurilor vizitate prin parcurgerea DF (x).
Pe baza acestei observat, ii obt, inem următorul algoritm.
Algoritmul 3.5.3 (determinarea componentelor conexe). Fie din nou G = (V, E) un graf neori-
entat, V = {1, . . . , n} s, i fie A = (aij )i,j=1,n matricea de adiacent, ă a grafului G. Pentru determinarea
componentelor conexe ale grafului G vom utiliza un vector CC cu semnificat, ia

CC[i] = numărul componentei conexe ı̂n care se află nodul i,

∀ i ∈ {1, . . . , n} s, i o variabilă nrc ce reprezintă numărul de componente conexe. Evident, graful G


este conex dacă s, i numai dacă valoarea finală a variabilei nrc este egală cu 1.
Descrierea ı̂n pseudocod a algoritmului are forma
COMPONENTE CONEXE :
nrc ← 0;
for i = 1, n do CC[i] ← 0;
for i = 1, n do
if (CC[i] = 0) then // nodul i nu a fost vizitat
nrc ← nrc + 1; // nodurile din parcurgerea DF (i)
DF(i); // vor forma o nouă componentă conexă

unde funct, ia DF(i) este cea din Algoritmul 3.5.1 sau cea din Algoritmul 3.5.2, adăugând instruc-
t, iunea CC[i] ← nrc ı̂n funct, ia VIZITEAZĂ(i).
Observat, ia 3.5.4. Algoritmul anterior poate fi utilizat s, i pentru determinarea componentelor conexe
ale unui graf orientat, ı̂nlocuind condit, ia ”axy ≥ 1” din funct, ia DF RECURSIV(x) cu ”axy ≥ 1
sau ayx ≥ 1”, respectiv condit, ia ”aij = 0” din funct, ia DF(x) cu ”aij = 0 s, i aji = 0” (deoarece ı̂n
determinarea componentelor conexe nu se t, ine cont de orientarea arcelor).
Observat, ia 3.5.5. Dacă G = (V, E) este un graf orientat, atunci pentru orice nod x ∈ V componenta
tare-conexă a nodului x este (indusă de) mult, imea nodurilor y vizitate prin parcurgerea DF (x) a
grafului G cu proprietatea că y este vizitat s, i ı̂n parcurgerea DF (x) a grafului

G = (V, E), unde E = {(j, i)|(i, j) ∈ E},

numit transpusul (simetricul) lui G. Evident, orice drum (y, v1 , . . . , vk , x) ı̂n graful G corespunde
drumului (x, vk , . . . , v1 , y) ı̂n graful G, deci x s, i y sunt ı̂n aceeas, i componentă tare-conexă a lui G
dacă s, i numai dacă există un drum de la x la y ı̂n G s, i un drum de la x la y ı̂n G, adică y este vizitat
prin parcurgerea DF (x) atât ı̂n G cât s, i ı̂n G.
TEMA 3. GRAFURI 47

Matricea de adiacent, ă a grafului G este transpusa matricei de adiacent, ă a grafului G, deci pentru
parcurgerea DF (x) a grafului G putem utiliza tot matricea de adiacent, ă A a grafului dat G, ı̂nlocuind
condit, ia ”aij = 0” cu ”aji = 0”, iar condit, ia ”axy ≥ 1” cu ”ayx ≥ 1” ı̂n funct, iile DF(x), respectiv
DF RECURSIV(x). Astfel, algoritmul DF poate fi utilizat s, i pentru determinarea componentelor
tare-conexe, deci s, i pentru verificarea tare-conexităt, ii grafului.
Definit, ia 3.5.2. Fie G = (V, E) un graf s, i x ∈ V un nod arbitrar fixat. Parcurgerea ı̂n lăt, ime
(BF,”breadth first”, parcurgerea pe nivele) a grafului G pornind din nodul x, numit s, i rădăcină
a acestei parcurgeri, constă ı̂n:
• se viziteză nodul x, considerat nod de nivelul zero;
• se vizitează apoi succesorii direct, i nevizitat, i ai acestuia (diferit, i de x), considerat, i noduri de
nivelul 1;
• se vizitează apoi, pe rând, succesorii direct, i nevizitat, i ai acestora, considerat, i noduri de nivelul
2;
s, .a.m.d.;
• parcurgerea se ı̂ncheie când niciun nod de pe un nivel nu mai are succesori direct, i nevizitat, i.
Observat, ia 3.5.6. Analog parcurgerii DF, considerând câte o muchie sau un arc de la fiecare nod
curent v al parcurgerii BF la fiecare din nodurile nevizitate (de pe următorul nivel) pentru care v
este predecesorul direct, se obt, ine un arbore, numit arbore BF.
Exemplul 3.5.2. Pentru graful din Exemplul 3.1.2, parcurgerea ı̂n lăt, ime pornind din nodul 2 este
BF (2) : 2, 3, 4, 5, 1
(considerând din nou ordinea dintre succesorii direct, i ai fiecărui nod ca fiind ordinea crescătoare).
Arborele BF corespunzător acestei parcurgeri este reprezentat ı̂n Figura 3.5.3.

2 3

3 4 5 1 2

1 4 5

Figura 3.5.3: Figura 3.5.4:

Pentru acelas, i graf, parcurgerea BF pornind din nodul 3 este


BF (3) : 3, 1, 2, 4, 5,
iar arborele BF corespunzător este reprezentat ı̂n Figura 3.5.4.
TEMA 3. GRAFURI 48

Algoritmul 3.5.4 (parcurgerea BF). Fie graful G = (V, E) având mult, imea de noduri V =
{1, . . . , n} s, i matricea de adiacent, ă A = (aij )i,j=1,n . Fie x ∈ V un nod arbitrar fixat. Pentru imple-
mentarea parcurgerii BF (x) vom utiliza vectorii V IZ, T AT A, URM s, i S având aceleas, i semnificat, ii
ca la parcurgerea DF (x) (Algoritmul 3.5.2), cu deosebirea că vectorul S al nodurilor vizitate s, i ı̂n
curs de prelucrare este organizat s, i utilizat acum ca o structură de tip coadă.
Aceasta fiind singura modificare fat, ă de Algoritmul 3.5.2, obt, inem următoarea descriere ı̂n pseu-
docod a algoritmului de parcurgere ı̂n lăt, ime
BF(x) :
VIZITEAZĂ(x);
V IZ[x] ← 1;
T AT A[x] ← 0;
coada ← 1; // nodurile se adaugă la S pe pozit, ia "coada "
varf ← 1; // s, i se elimină de pe pozit, ia "varf "
S[coada] ← x;
while (varf ≤ coada) do // coada este nevidă
i ← S[varf ];
j ← URM[i] + 1;
while (a[i, j] = 0) and (j ≤ n) do j ← j + 1;
if (j > n) then
varf ← varf + 1;
else
URM[i] ← j;
if (V IZ[j] = 0) then
VIZITEAZĂ(j);
V IZ[j] ← 1;
T AT A[j] ← i;
coada ← coada + 1;
S[coada] ← j;

Observat, ia 3.5.7. Analog parcurgerii DF, implementarea anterioară a parcurgerii BF are complexi-
tatea O(n2 ), iar dacă graful este memorat prin intermediul listelor de adiacent, ă, atunci complexitatea
este O(n + m).
Observat, ia 3.5.8. Observat, iile 3.5.3, 3.5.4 s, i 3.5.5 s, i algoritmii corespunzători rămân valabile dacă
ı̂nlocuim parcurgerea DF cu parcurgerea BF.

3.6 Algoritmul Roy-Warshall


Definit, ia 3.6.1. Fie G = (V, E) un graf (neorientat sau orientat), unde V = {v1 , . . . , vn }. Ma-
tricea drumurilor asociată grafului G este matricea D = (dij )i,j=1,n definită prin

1, dacă ∃ µ = (vi , . . . , vj ) drum cu l(µ) > 0,
dij =
0, ı̂n caz contrar,

unde l(µ) reprezintă lungimea drumului µ.


TEMA 3. GRAFURI 49

Exemplul 3.6.1. Matricea drumurilor asociată grafului neorientat din Exemplul 3.1.1 este
 
1 1 0 1 1 0
 1 1 0 1 1 0 
 
 0 0 1 0 0 1 
D=  1
,
 1 0 1 1 0  
 1 1 0 1 1 0 
0 0 1 0 0 1

iar matricea drumurilor asociată grafului orientat din Exemplul 3.1.2 este
 
1 1 1 1 1
 1 1 1 1 1 
 
D=  1 1 1 1 1 .
 0 0 0 0 0 
0 0 0 1 0

Observat, ia 3.6.1. Evident, orice graf neorientat are matricea drumurilor simetrică.
Observat, ia 3.6.2. Conform Observat, iei 3.4.5, pentru i 6= j putem ı̂nlocui termenul de ”drum” cu
”drum elementar” ı̂n definit, ia matricei drumurilor.
Următorul algoritm determină matricea drumurilor unui graf pornind de la matricea de adiacent, ă.
Algoritmul 3.6.1 (Roy-Warshall). Fie G = (V, E) un graf simplu cu V = {v1 , . . . , vn } s, i fie A =
(aij )i,j=1,n matricea sa de adiacent, ă (având toate elementele 0 sau 1). Se calculează matricele
(k)
D (k) = (dij )i,j=1,n, k ∈ {0, 1, . . . , n},

definite prin

D (0) = A, (3.6.1)
(k) (k−1) (k−1) (k−1)
dij = dij ∨ dik dkj , ∀k, i, j ∈ {1, . . . , n}, (3.6.2)

unde 0 ∨ 0 = 0, 0 ∨ 1 = 1 ∨ 0 = 1 ∨ 1 = 1 (operat, ia de disjunct, ie, ”sau”).


Teorema 3.6.1 (de corectitudine a Algoritmului Roy-Warshall). În contextul Algoritmului
Roy-Warshall, ultima matrice calculată este chiar matricea drumurilor asociată grafului G, adică

D (n) = D.

Demonstrat, ie. Vom demonstra prin induct, ie după k ∈ {0, 1, . . . , n} că pentru orice i, j ∈ {1, . . . , n}
avem

(k) 1, dacă ∃ µ = (vi , . . . , vj ) drum cu l(µ) > 0 s, i I(µ) ⊆ {v1 , . . . , vk },
dij = (3.6.3)
0, ı̂n caz contrar,

unde l(µ) reprezintă lungimea drumului µ, I(µ) reprezintă mult, imea nodurilor intermediare ale dru-
mului µ, iar {v1 , . . . , vk } reprezintă mult, imea {vi |, 1 ≤ i ≤ k}, deci pentru k = 0 această mult, ime
este ∅.
Pentru k = 0 avem

(0) 1, dacă (vi , vj ) ∈ E,
dij = aij (conform (3.6.1)) s, i aij =
0, ı̂n caz contrar
TEMA 3. GRAFURI 50

(din definit, ia matricei de adiacent, ă), iar (vi , vj ) ∈ E dacă s, i numai dacă ∃ µ = (vi , . . . , vj ) drum cu
l(µ) > 0 s, i I(µ) = ∅, deci obt, inem egalitatea (3.6.3).
Presupunem acum egalitatea (3.6.3) adevărată pentru k − 1 (1 ≤ k ≤ n) s, i o demonstrăm pentru
k. Folosind (3.6.2), definit, ia operat, iilor ∨ s, i · s, i ipoteza de induct, ie avem echivalent, ele:
(k) (k−1) (k−1) (k−1)
dij = 1 ⇔ dij = 1 sau dik = dkj = 1 ⇔ ∃ µ = (vi , . . . , vj ) drum cu
l(µ) > 0, I(µ) ⊆ {v1 , . . . , vk−1} sau ∃ µ1 = (vi , . . . , vk ), µ2 = (vk , . . . , vj )
drumuri cu l(µ1 ), l(µ2 ) > 0, I(µ1 ), I(µ2) ⊆ {v1 , . . . , vk−1 }
⇔ ∃ µ = (vi , . . . , vj ) cu l(µ) > 0, I(µ) ⊆ {v1 , . . . , vk }, vk 6∈ I(µ) sau
∃ µ′ = (vi , . . . , vk , . . . , vj ) cu l(µ′ ) > 0, I(µ′) ⊆ {v1 , . . . , vk }, vk ∈ I(µ′ )

(µ′ se obt, ine parcurgând ı̂ntâi µ1 apoi µ2 s, i, reciproc, µ1 , µ2 sunt port, iunile din µ′ dintre vi s, i prima
aparit, ie a lui vk ı̂n I(µ′ ), respectiv dintre ultima aparit, ie a lui vk ı̂n I(µ′ ) s, i vj )

⇔ ∃ µ = (vi , . . . , vj ) drum cu l(µ) > 0 s, i I(µ) ⊆ {v1 , . . . , vk }.

Demonstrat, ia prin induct, ie a egalităt, ii (3.6.3) este astfel ı̂ncheiată.


Pentru k = n condit, ia I(µ) ⊆ {v1 , . . . , vn } poate fi eliminată, fiind ı̂ntotdeauna adevărată, deci
din (3.6.3) s, i Definit, ia 3.6.1 obt, inem că
(n)
dij = dij , ∀ i, j ∈ {1, . . . , n},

adică egalitatea din enunt, .


Observat, ia 3.6.3. Pentru n fixat, Algoritmul Roy-Warshall necesită 2n3 operat, ii (câte o operat, ie · s, i
∨ pentru fiecare (k, i, j) ∈ {1, . . . , n} × {1, . . . , n} × {1, . . . , n}), deci acest algoritm are complexitatea
Θ(n3 ). Reamintim notat, ia utilizată, pentru orice funct, ie f : N → N,

Θ(f ) = {g|g : N → N, ∃r1 , r2 > 0, ∃n0 ∈ N a.ı̂. r1 f (n) ≤ g(n) ≤ r2 f (n) ∀n ≥ n0 }.

Observat, ia 3.6.4. Algoritmul Roy-Warshall rămâne evident valabil s, i pentru grafuri nesimple, cu
modificarea

(0) 1, dacă aij > 0,
dij = ∀ i, j ∈ {1, . . . , n}.
0, dacă aij = 0,

Exemplul 3.6.2. Pentru graful din Exemplul 3.1.2, prin aplicarea Algoritmului Roy-Warshall obt, inem
matricele:
 
0 1 0 0 0
 0 0 1 1 1 
 
D (0) = A =  1 1 0 0 0  (matricea de adiacent, ă);

 0 0 0 0 0 
0 0 0 1 0

   
0 1 0 0 0 0 1 1 1 1
 0 0 1 1 1   0 0 1 1 1 
   
D (1)
=
 1 1 0 0 0 ; D = 

(2)
 1 1 1 1 1 

 0 0 0 0 0   0 0 0 0 0 
0 0 0 1 0 0 0 0 1 0
TEMA 3. GRAFURI 51

(2) (1) (1) (1)


(deoarece, de exemplu, d13 = d13 ∨ d12 d23 = 0 ∨ 1 · 1 = 0 ∨ 1 = 1);
   
1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1    
  1 1 1 1 1 
D (3) = 
 1 1 1 1 1 ; D = 
 (4)
 1 1 1 1 1 ;

 0 0 0 0 0   0 0 0 0 0 
0 0 0 1 0 0 0 0 1 0

 
1 1 1 1 1
 1 1 1 1 1 
 
D (5)
=
 1 1 1 1 1  = D (matricea drumurilor).

 0 0 0 0 0 
0 0 0 1 0

Observat, ia 3.6.5. Conform ecuat, iilor (3.6.3), Algoritmul Roy-Warshall este un algoritm specific
metodei programării dinamice.
(k) (k−1) (k) (k−1)
Conform ecuat, iilor (3.6.2) s, i definit, iei operat, iei ∨ avem dik = dik s, i dkj = dkj , ∀ k, i, j ∈
{1, . . . , n}, deci pentru implementarea algoritmului putem utiliza o singură matrice D. Astfel obt, inem
următoarea descriere ı̂n pseudocod a algoritmului
ROY WARSHALL :
for i = 1, n do // init, ializări
for j = 1, n do
d[i, j] ← a[i, j];
for k = 1, n do
for i = 1, n do
for j = 1, n do
d[i, j] ← d[i, j] ∨ d[i, k]d[k, j];

Pentru grafuri oarecare (simple sau nesimple) init, ializarea are forma
for i = 1, n do // init, ializări
for j = 1, n do
if (a[i, j] > 0) then
d[i, j] ← 1;
else
d[i, j] ← 0;

Observat, ia 3.6.6. Dacă G = (V, E) este un graf neorientat s, i V = {1, . . . , n}, atunci pentru orice nod
x ∈ V componenta conexă a nodului x este (indusă de) mult, imea {x} ∪ {y|y ∈ V \ {x}, dxy = 1}.
Astfel Algoritmul Roy-Warshall poate fi utilizat pentru determinarea componentelor conexe s, i
pentru verificarea conexităt, ii grafului.
Algoritmul 3.6.2 (determinarea componentelor tare-conexe). Dacă G = (V, E) este un graf
orientat s, i V = {1, . . . , n}, atunci pentru orice nod x ∈ V componenta tare-conexă a nodului x este
(indusă de) mult, imea
{x} ∪ {y|y ∈ V \ {x}, dxy = dyx = 1},
deci Algoritmul Roy-Warshall poate fi utilizat pentru determinarea componentelor tare-conexe s, i
pentru verificarea tare-conexităt, ii grafului. Descrierea ı̂n pseudocod a algoritmului are forma
TEMA 3. GRAFURI 52

COMPONENTE TARE CONEXE :


nrc ← 0; // numărul de componente tare-conexe
for i = 1, n do
CT C[i] ← 0; // vectorul componentelor tare-conexe
// CT C[i] = numărul componentei tare-conexe ı ^n care se află nodul i
ROY WARSHALL;
for i = 1, n do
if (CT C[i] = 0) then
nrc ← nrc + 1;
CT C[i] ← nrc;
for j = i + 1, n do
if (CT C[j] = 0) and (d[i, j] = 1) and (d[j, i] = 1) then
CT C[j] ← nrc;
Tema 4

Arbori s, i arborescent, e

4.1 Numărul ciclomatic


Propozit, ia 4.1.1 (Dirac). Fie G = (V, E) un graf neorientat simplu s, i
δ(G) = min d(x)
x∈V

gradul minim al nodurilor din G.


a) G cont, ine un lant, deschis elementar µ astfel ı̂ncât
l(µ) ≥ δ(G),
unde l(µ) reprezintă lungimea lant, ului µ.
b) Dacă δ(G) ≥ 2, atunci G cont, ine un ciclu elementar C astfel ı̂ncât
l(C) ≥ δ(G) + 1.

Definit, ia 4.1.1. Un graf se numes, te par dacă toate nodurile sale au gradele pare.
Propozit, ia 4.1.2 (Veblen). Fie G = (V, E) un graf cu E 6= ∅. Atunci graful G este par dacă s, i
numai dacă există C1 , . . . , Ck cicluri elementare muchie-disjuncte (două câte două) astfel ı̂ncât
E = E(C1 ) ∪ · · · ∪ E(Ck ) (k ∈ N⋆ ), (4.1.1)
unde E(Ci ) reprezintă mult, imea muchiilor ciclului Ci , ∀ i ∈ {1, . . . , k}.
Propozit, ia 4.1.3. Fie G = (V, E) un graf. Atunci (P(E), ∆, ·) este un spat, iu vectorial peste corpul
finit cu două elemente (Z2 , +, ·), unde
P(E) = {F |F ⊆ E}, A∆B = (A \ B) ∪ (B \ A) (diferent, a simetrică),
b
0 · A = ∅, b
1 · A = A, ∀ A ∈ P(E).
Definit, ia 4.1.2. Spat, iul vectorial (P(E), ∆, ·) din propozit, ia anterioară se numes, te spat, iul muchi-
ilor grafului G.
Propozit, ia 4.1.4. Fie G = (V, E) un graf s, i
C(E) = {F ⊆ E|(V, F ) = graf par}.
Atunci C(E) este un subspat, iu vectorial al spat, iului muchiilor grafului G.

53
TEMA 4. ARBORI S, I ARBORESCENT, E 54

Propozit, ia 4.1.5. Fie G = (V, E) un graf s, i

C0 (E) = {F ⊆ E|∃ C = ciclu elementar ı̂n G a.ı̂. F = E(C)},

unde E(C) este mult, imea muchiilor ciclului C. Atunci subspat, iul vectorial al spat, iului muchiilor lui
G generat de C0 (E) este subspat, iul C(E) din propozit, ia anterioară.
Demonstrat, ie. Evident, C0 (E) ⊆ C(E). Conform Propozit, iei 4.1.2, pentru orice F ∈ C(E), F 6= ∅,
există F1 , . . . , Fk ∈ C0 (E) disjuncte două câte două a.ı̂. F = F1 ∪ · · · ∪ Fk , deci F = F1 ∆ . . . ∆Fk =
b
1 · F1 ∆ . . . ∆b 1 · Fk .
Definit, ia 4.1.3. Subspat, iul C(E) din Propozit, ia 4.1.4 se numes, te spat, iul ciclurilor grafului G.
Dimensiunea acestui subspat, iu se numes, te numărul ciclomatic al grafului G s, i se notează cu γ(G).
Propozit, ia 4.1.6 (Listing). Fie G = (V, E) o pădure cu n noduri, m muchii s, i k componente
conexe. Atunci
m − n + k = 0.
Demonstrat, ie. Demonstrăm egalitatea din enunt, prin induct, ie după m.
Pentru m = 0 rezultă că toate nodurile sunt izolate, deci fiecare nod formează o componentă
conexă, adică k = n s, i egalitatea m − n + k = 0 este verificată.
Presupunem adevărată egalitatea din enunt, pentru orice pădure cu m − 1 muchii (m ≥ 1) s, i o
demonstrăm pentru pădurea G cu m muchii. Fie

G′ = (V, E ′ ), unde E ′ = E \ {e}, cu e ∈ E, e = [x, y].

Evident G′ este o pădure cu n noduri, m − 1 muchii s, i k + 1 componente conexe (deoarece


componentele conexe din G ce nu cont, in x s, i y rămân componente conexe s, i ı̂n G′ , iar componenta
conexă din G ce cont, ine x s, i y se partit, ionează ı̂n două componente conexe ı̂n G′ , una cont, inând pe
x s, i cealaltă pe y). Aplicând ipoteza de induct, ie pentru graful G′ avem

(m − 1) − n + (k + 1) = 0, deci m − n + k = 0.

Corolarul 4.1.1. Orice arbore cu n noduri are m = n − 1 muchii.


Demonstrat, ie. Se aplică propozit, ia anterioară, cu k = 1.
Propozit, ia 4.1.7. Un graf este conex dacă s, i numai dacă are arbori part, iali.
Demonstrat, ie. Dacă graful G = (V, E) are un arbore part, ial T , atunci pentru orice x, y ∈ V , x 6= y,
există un lant, [x, . . . , y] ı̂n T (fiind conex), deci s, i ı̂n G, s, i astfel G este conex.
Reciproc, demonstrăm că orice graf conex G = (V, E) are arbori part, iali prin induct, ie după
numărul p de cicluri elementare ale lui G.
Pentru p = 0 rezultă că ı̂nsus, i G este un arbore, deci arbore part, ial ı̂n G.
Presupunem adevărată afirmat, ia pentru orice graf conex cu cel mult p − 1 cicluri elementare
(p ≥ 1) s, i o demonstrăm pentru graful conex G = (V, E) cu p cicluri elementare. Fie e = [x, y] o
muchie a lui G aflată pe un ciclu elementar C s, i fie G′ = (V, E \ {e}). Graful G′ rămâne conex (ı̂ntre
x s, i y există lant, ul [x, v1 , . . . , vk , y], unde [x, v1 , . . . , vk , y, x] este ciclul C) s, i are cel mult p − 1 cicluri
elementare. Conform ipotezei de induct, ie, există un arbore part, ial T ı̂n G′ , deci s, i ı̂n G.
TEMA 4. ARBORI S, I ARBORESCENT, E 55

Propozit, ia 4.1.8. Fie G = (V, E) un graf, T = (V, F ) un arbore part, ial al lui G s, i e ∈ E \ F .
Atunci graful part, ial
T + e = (V, F ∪ {e})
are un unic ciclu elementar s, i acest ciclu cont, ine muchia e.
Demonstrat, ie. Fie e = [x, y]. T fiind arbore part, ial, există un lant, elementar µ = [x, v1 , . . . , vk , y] ı̂n
T , deci µ + e = [x, v1 , . . . , vk , y, x] este un ciclu elementar ı̂n T + e.
Unicitatea acestui ciclu rezultă din unicitatea lant, ului elementar µ (dacă ar exista două lant, uri
elementare distincte µ1 = [x, . . . , y] s, i µ2 = [x, . . . , y] ı̂n T , port, iunile lor muchie-disjuncte ar produce
un ciclu, contradict, ie cu T = arbore).
Teorema 4.1.1 (Teorema numărului ciclomatic). Orice graf G = (V, E) cu n noduri, m muchii
s, i k componente conexe are numărul ciclomatic

γ(G) = m − n + k.

Demonstrat, ie. Demonstrăm egalitatea din enunt, ı̂n două etape.


Etapa 1) Presupunem că graful G este conex, deci k = 1. Fie T = (V, F ) un arbore part, ial al lui
G (există, conform Propozit, iei 4.1.7). Conform Corolarului 4.1.1, card (F ) = n − 1. Fie

E \ F = {e1 , . . . , em−n+1 }.

Pentru orice i ∈ {1, . . . , m − n + 1}, fie Ci mult, imea muchiilor ciclului elementar unic din T + ei
(conform Propozit, iei 4.1.8). Atunci

B = {C1 , . . . , Cm−n+1 }

este o bază a spat, iului ciclurilor C(E) (numită bază de cicluri a grafului G). Rezultă că

γ(G) = card (B) = m − n + 1 = m − n + k.

Etapa 2) Fie acum G un graf oarecare s, i G1 , . . . , Gk componentele sale conexe. Fie ni s, i mi


numerele de noduri, respectiv muchii ale componentei Gi . Evident, n = n1 + · · · + nk s, i m =
m1 + · · · + mk .
Deoarece subspat, iile ciclurilor componentelor G1 , . . . , Gk sunt liniar independente, avem

γ(G) = γ(G1 ) + · · · + γ(Gk ).

Dar, conform etapei 1), γ(Gi ) = mi − ni + 1 ∀ i ∈ {1, . . . , k}, s, i astfel prin adunare rezultă că
γ(G) = m − n + k.
Observat, ia 4.1.1. Demonstrat, ia teoremei anterioare este constructivă, indicând următorul algoritm
de determinare a unei baze de cicluri pentru graful G:

• se determină componentele conexe G1 , . . . , Gk ;

• pentru fiecare componentă Gi , se determină un arbore part, ial T (de exemplu arborele DF sau
BF ) s, i ciclurile elementare C1 , . . . , Cmi −ni +1 din grafurile T + ei , pentru fiecare muchie ei din
Gi ce nu apart, ine lui T ;

• ciclurile astfel determinate formează ı̂mpreună o bază de cicluri pentru graful G.


TEMA 4. ARBORI S, I ARBORESCENT, E 56

Exemplul 4.1.1. Fie graful G reprezentat ı̂n Figura 4.1.1.

1 2 3

4 5 6

Figura 4.1.1:

Numărul său ciclomatic este γ(G) = m − n + k = 9 − 7 + 1 = 3.


Considerăm arborele part, ial T reprezentat ı̂n Figura 4.1.2.

1 2 3

4 5 6

Figura 4.1.2:

Aplicând algoritmul din observat, ia anterioară se obt, ine baza de cicluri {C1 , C2 , C3 } unde

C1 = {[1, 4], [4, 2], [2, 1]}, C2 = {[4, 5], [5, 2], [2, 4]} s, i C3 = {[5, 6], [6, 3], [3, 2], [2, 5]}.

4.2 Teorema de caracterizare a arborilor


Teorema 4.2.1 (de caracterizare a arborilor). Fie G = (V, E) un graf cu n noduri. Următoarele
afirmat, ii sunt echivalente:

1) G este un arbore (adică este conex s, i fără cicluri);

2) G este fără cicluri s, i are m = n − 1 muchii;

3) G este conex s, i are m = n − 1 muchii;

4) G este fără cicluri s, i maximal cu această proprietate, adică dacă se adaugă o muchie ı̂ntre
oricare două noduri graful obt, inut cont, ine cicluri;

5) G este conex s, i minimal cu această proprietate, adică dacă se elimină o muchie oarecare graful
obt, inut devine neconex;

6) ı̂ntre oricare două noduri ale lui G există un unic lant, elementar.
TEMA 4. ARBORI S, I ARBORESCENT, E 57

Demonstrat, ie. 1) ⇒ 2) Fie G un arbore, adică s, i conex s, i fără cicluri. Deci 0 = γ(G) = m − n + 1 s, i
astfel m = n − 1.
2) ⇒ 3) Fie G fără cicluri s, i cu m = n − 1 muchii. Avem 0 = γ(G) = n − 1 − n + k, unde k
reprezintă numărul de componente conexe ale lui G, deci k = 1, adică G este conex.
3) ⇒ 4) Fie G conex s, i cu m = n − 1 muchii. Avem γ(G) = n − 1 − n + 1 = 0, deci G este fără
cicluri. Fie G + e = (V, E ∪ {e}), e 6∈ E. Graful G + e rămâne conex s, i are n noduri s, i m + 1 = n
muchii. Astfel γ(G + e) = n − n + 1 = 1, adică G + e cont, ine un ciclu (elementar).
4) ⇒ 5) Fie G fără cicluri maximal. Dacă G nu ar fi conex, atunci adăugând o muchie ı̂ntre două
noduri x s, i y din componente conexe diferite ale lui G s-ar obt, ine un graf fără cicluri (deoarece nu
există lant, ı̂ntre x s, i y ı̂n G), contradict, ie cu ipoteza. Deci G este conex.
Fie G − e = (V, E \ {e}), e ∈ E, e = [x, y]. Dacă graful G − e ar fi conex, atunci ar exista un
lant, elementar [x, v1 , . . . , vk , y] ı̂n G − e s, i astfel [x, v1 , . . . , vk , y, x] ar fi un ciclu ı̂n G, contradict, ie cu
ipoteza. Deci G − e este neconex.
5) ⇒ 6) Fie G conex minimal. Fie x, y ∈ V .
Dacă x 6= y, rezultă că există un lant, elementar [x, . . . , y].
Dacă x = y există de asemenea lant, ul elementar [x] de lungime zero.
Dacă ı̂ntre nodurile x s, i y ar exista două lant, uri elementare distincte µ1=[x = v1 , v2 , . . . , vi = y]
s, i µ2 = [x = w1 , w2 , . . . , wj = y], atunci notând cu e = [vk , vk+1 ] prima muchie a lant, ului µ1 ce nu
apart, ine lant, ului µ2 , graful G − e = (V, E \ {e}) ar rămâne conex (deoarece ı̂ntre vk s, i vk+1 avem
lant, ul [vk , vk−1 , . . . , v1 = x = w1 , w2, . . . , wj = y = vi , vi−1 , . . . , vk+1 ]), contradict, ie cu ipoteza. Deci
ı̂ntre x s, i y există un unic lant, elementar.
6) ⇒ 1) Fie G cu proprietatea că ı̂ntre orice două noduri există un unic lant, elementar. Evident,
G este conex. Dacă G ar avea un ciclu elementar C = [x, v1 , . . . , vk , x] atunci [x, v1 ] s, i [v1 , . . . , vk , x]
ar fi două lant, uri elementare ı̂ntre x s, i v1 , contradict, ie cu ipoteza. Deci G nu are cicluri elementare,
s, i nici neelementare (deoarece orice ciclu neelementar s-ar descompune ı̂n cicluri elementare muchie-
disjuncte).
Observat, ia 4.2.1. Un arbore de ordinul 1 este format dintr-un singur nod izolat (de grad zero), iar
arbore de ordin n ≥ 2 nu are noduri izolate (fiind conex), deci are gradele nodurilor mai mari sau
egale cu 1.
Propozit, ia 4.2.1 (de caracterizare a secvent, ei gradelor nodurilor unui arbore). Fie d1 , d2 ,
. . ., dn ∈ N∗ , unde n ∈ N, n ≥ 2. Atunci numerele d1 , d2 , . . . , dn sunt gradele nodurilor unui arbore
de ordinul n dacă s, i numai dacă
Xn
di = 2n − 2.
i=1

Demonstrat, ie. ”⇒” Fie T = (V, E) un arbore cu V = {v1 , . . . , vn } astfel ı̂ncât dT (vi ) = di , ∀ i ∈
{1, . . . , n}. Conform Corolarului 4.1.1 rezultă că T are m = n − 1 muchii, deci aplicând Propozit, ia
3.3.2 avem n
X
di = 2m = 2n − 2.
i=1
P
n
”⇐” Demonstrăm că dacă di = 2n − 2 cu d1 , d2 , . . . , dn ∈ N∗ , n ∈ N, n ≥ 2, atunci există un
i=1
arbore T = (Vn , E) cu Vn = {v1 , . . . , vn } astfel ı̂ncât dT (vi ) = di , ∀ i ∈ {1, . . . , n}, prin induct, ie după
n.
Pentru n = 2 rezultă că d1 + d2 = 2, deci d1 = d2 = 1. Luând E = {[v1 , v2 ]} rezultă că
T = ({v1 , v2 }, E) este un arbore (fiind conex s, i având 2 − 1 = 1 muchii) s, i dT (vi ) = 1 = di ,
∀ i ∈ {1, 2}.
TEMA 4. ARBORI S, I ARBORESCENT, E 58

Presupunem afirmat, ia adevărată pentru n − 1 s, i o demonstrăm pentru n, unde n ∈ N, n ≥ 3.


Pn
Fie di = 2n − 2, d1 , d2 , . . . , dn ∈ N∗ . Presupunem că d1 ≥ d2 ≥ . . . ≥ dn . Atunci dn = 1 (deoarece
i=1
P
n
dacă dn ≥ 2 ar rezulta că di ≥ 2n > 2n − 2, fals) s, i d1 ≥ 2 (deoarece dacă d1 = 1 ar rezulta că
i=1
P
n
di = n < 2n − 2, fals). Fie
i=1

d1 − 1, dacă i = 1,
d′i =
di , dacă i ∈ {2, . . . , n − 1}.

Atunci d′1 , d′2 , . . . , d′n−1 ∈ N∗ s, i


n−1
X n−1
X n
X
d′i = d1 − 1 + di = di − 2 = 2n − 4 = 2(n − 1) − 2,
i=1 i=2 i=1

deci, conform ipotezei de induct, ie, există un arbore T ′ = (Vn−1 , E ′ ) cu Vn−1 = {v1 , . . . , vn−1 } astfel
ı̂ncât dT ′ (vi ) = d′i , ∀ i ∈ {1, . . . , n − 1}. Fie graful

T = (Vn , E ′ ∪ {[v1 , vn ]}),

unde Vn = {v1 , . . . , vn }, cu vn 6∈ Vn−1 . Cum T ′ este conex si are n − 1 − 1 = n − 2 muchii, rezultă că
s, i T este conex (nodul nou, vn , este adiacent cu v1 ) s, i are n − 2 + 1 = n − 1 muchii, deci s, i T este
un arbore. Avem dT (v1 ) = dT ′ (v1 ) + 1 = d′1 + 1 = d1 , dT (vn ) = 1 = dn s, i dT (vi ) = dT ′ (vi ) = d′i = di
pentru orice i ∈ {2, . . . , n − 1}. Astfel dT (vi ) = di , ∀ i ∈ {1, . . . , n}.
Demonstrat, ia prin induct, ie este ı̂ncheiată.
Observat, ia 4.2.2. Demonstrat, ia propozit, iei anterioare este constructivă, ea indicând un algoritm de
generare a unui arbore cu gradele nodurilor date.
Exemplul 4.2.1. Numerele 1, 1, 2, 3, 4, 5, 5, 5 din Exemplul 3.3.7 nu pot fi gradele nodurilor unui ar-
P8
bore, deoarece suma di = 26 6= 2 · 8 − 2.
i=1
Exemplul 4.2.2. Numerele 1, 1, 1, 1, 1, 2, 3, 4 pot fi gradele nodurilor unui arbore, deoarece suma
P8
di = 14 = 2 · 8 − 2. Mai mult, conform demonstrat, iei propozit, iei anterioare (partea ”⇐”),
i=1
un arbore având gradele nodurilor numerele date se construies, te adăugând succesiv câte o muchie
ı̂ntre un nod de grad maxim s, i un nod de grad 1, grade care se mics, orează cu 1, până când gradele
devin toate egale cu zero. Acest procedeu este evident, iat ı̂n tabelul următor:
Pas Gradele rămase Muchia adăugată
1 1, 1, 1, 1, 1, 2, 3, 4 [v8 , v1 ]
2 0, 1, 1, 1, 1, 2, 3, 3 [v8 , v2 ]
3 0, 0, 1, 1, 1, 2, 3, 2 [v7 , v3 ]
4 0, 0, 0, 1, 1, 2, 2, 2 [v8 , v4 ]
5 0, 0, 0, 0, 1, 2, 2, 1 [v7 , v5 ]
6 0, 0, 0, 0, 0, 2, 1, 1 [v6 , v7 ]
7 0, 0, 0, 0, 0, 1, 0, 1 [v8 , v6 ]
– 0, 0, 0, 0, 0, 0, 0, 0 –
Arborele obt, inut este reprezentat ı̂n Figura 4.2.1.
TEMA 4. ARBORI S, I ARBORESCENT, E 59

v2 v3

v1 v4

v8 v5

v7 v6

Figura 4.2.1:

4.3 Teorema de caracterizare a arborescent, elor


Definit, ia 4.3.1. Fie G = (V, E) un graf orientat. Un nod x ∈ V se numes, te rădăcină a grafului
G dacă pentru orice nod y ∈ V \ {x} există cel put, in un drum de la x la y.
Exemplul 4.3.1. În graful din Exemplul 3.1.2 nodurile 1, 2 s, i 3 sunt rădăcini, iar nodurile 4 s, i 5 nu
sunt rădăcini.
Definit, ia 4.3.2. a) O arborescent, ă este un arbore care are o rădăcină.

b) O arborescent, ă part, ială a unui graf orientat G = (V, E) este un graf part, ial al lui G ce este
arborescent, ă (adică o arborescent, ă T = (V, F ) cu F ⊆ E).
Exemplul 4.3.2. Graful din Exemplul 3.1.2 nu este arborescent, ă (are cicluri, deci nu este arbore).
Două arborescent, e part, iale ale sale sunt reprezentate ı̂n Figurile 4.3.1 s, i 4.3.2.

1 2 1 2

5 5

3 4 3 4

Figura 4.3.1: Figura 4.3.2:

Definit, ia 4.3.3. Un graf orientat G = (V, E) se numes, te quasi-tare conex dacă pentru orice două
noduri x, y ∈ V există un nod z ∈ V s, i drumuri de la z la x s, i de la z la y.
Observat, ia 4.3.1. Ca s, i ı̂n definit, iile conexităt, ii s, i tare-conexităt, ii, s, i ı̂n Definit, iile 4.3.1 s, i 4.3.3 putem
ı̂nlocui termenul de ”drum” cu ”drum elementar” (conform Observat, iei 3.4.5).
TEMA 4. ARBORI S, I ARBORESCENT, E 60

Observat, ia 4.3.2. Evident, orice graf quasi-tare conex este conex. Reciproca nu este adevărată. De
exemplu, graful reprezentat ı̂n Figura 4.3.3 este conex, dar nu este quasi-tare conex (pentru nodurile
x = 1 s, i y = 4 nu există noduri z din care să avem drumuri la x s, i la y).

1 2

3 4

Figura 4.3.3:

Observat, ia 4.3.3. Orice graf tare-conex este quasi-tare conex (deoarece pentru orice noduri x, y luând
z = x există drumuri (z, . . . , x) s, i (z, . . . , y)). Reciproca nu este adevărată. De exemplu, graful din
Exemplul 3.1.2 este quasi-tare conex, dar nu este tare-conex.
Propozit, ia 4.3.1. Un graf orientat este quasi-tare conex dacă s, i numai dacă are (cel put, in) o
rădăcină.
Demonstrat, ie. ”⇒” Fie G = (V, E) un graf quasi-tare conex, V = {v1 , . . . , vn }. Demonstrăm prin
induct, ie după k ∈ {1, . . . , n} că există un nod xk ∈ V cu drumuri (xk , . . . , v1 ), (xk , . . . , v2 ), . . . , (xk , . . . , vk ).
Pentru k = 1 luăm x1 = v1 .
Presupunem adevărată afirmat, ia pentru k − 1 s, i o demonstrăm pentru k. Deoarece graful este
quasi-tare conex, rezultă că există un nod xk ∈ V cu drumuri (xk , . . . , xk−1 ) s, i (xk , . . . , vk ). Conform
ipotezei de induct, ie, există drumuri (xk−1 , . . . , v1 ), . . . , (xk−1 , . . . , vk−1 ), deci există drumuri

(xk , . . . , xk−1 , . . . , v1 ), . . . , (xk , . . . , xk−1 , . . . , vk−1), (xk , . . . , vk ).

Demonstrat, ia prin induct, ie este ı̂ncheiată.


Luând k = n, nodul xn este o rădăcină a grafului G.
”⇐” Fie G = (V, E) s, i z ∈ V o rădăcină a lui G. Pentru orice noduri x, y ∈ V există drumuri
(z, . . . , x) s, i (z, . . . , y), deci G este quasi-tare conex.
Teorema 4.3.1 (de caracterizare a arborescent, elor). Fie G = (V, E) un graf orientat cu n
noduri. Următoarele afirmat, ii sunt echivalente:

1) G este quasi-tare conex s, i fără cicluri;

2) G este quasi-tare conex s, i are m = n − 1 arce;

3) G este o arborescent, ă (adică arbore cu rădăcină);

4) există un nod x ∈ V astfel ı̂ncât pentru orice nod v ∈ V există un unic drum de la x la v;

5) G este quasi-tare conex s, i minimal cu această proprietate, adică dacă se elimină un arc oarecare
graful obt, inut nu mai este quasi-tare conex;

6) G este conex s, i există un nod x ∈ V astfel ı̂ncât d− (x) = 0 s, i d− (v) = 1 ∀ v ∈ V \ {x};


TEMA 4. ARBORI S, I ARBORESCENT, E 61

7) G este fără cicluri s, i există un nod x ∈ V astfel ı̂ncât d− (x) = 0 s, i d− (v) = 1 ∀ v ∈ V \ {x}.
Demonstrat, ie. 1) ⇒ 2) Fie G quasi-tare conex s, i fără cicluri. Fiind quasi-tare conex, G este conex.
Deci G este un arbore s, i astfel are m = n − 1 arce (conform Teoremei de caracterizare a arborilor).
2) ⇒ 3) Fie G quasi-tare conex s, i cu m = n − 1 arce. Fiind quasi-tare conex, G este conex s, i are
rădăcină (conform propozit, iei anterioare). Fiind conex cu m = n − 1 arce, G este arbore (conform
teoremei amintite mai sus).
3) ⇒ 4) Fie G arborescent, ă s, i x o rădăcină a lui G. Deci pentru orice nod v ∈ V există un drum
de la x la v. Graful G fiind un arbore, acest drum, fiind s, i lant, , este unic.
4) ⇒ 5) Fie G cu proprietatea 4). Deci x este o rădăcină a lui G s, i astfel G este quasi-tare
conex (conform propozit, iei anterioare). Fie e = (y, z) ∈ E un arc arbitrar fixat. Demonstrăm că
G − e = (V, E \ {e}) nu este quasi-tare conex prin reducere la absurd. Dacă G − e ar fi quasi-tare
conex, atunci ar exista un nod v ∈ V s, i drumuri (v, . . . , y) s, i (v, . . . , z) ı̂n G − e. x fiind rădăcină
ı̂n G, s-ar obt, ine două drumuri distincte (x, . . . , v, . . . , y, z) s, i (x, . . . , v, . . . , z) de la x la z ı̂n G,
contradict, ie cu ipoteza.
5) ⇒ 6) Fie G quasi-tare conex minimal. Fiind quasi-tare conex, G este conex. Conform
propozit, iei anterioare, G are o rădăcină x. Demonstrăm că d− (x) = 0 prin reducere la absurd.
Dacă am avea d− (x) > 0, atunci ar exista un arc e = (y, x) ∈ E, iar G − e ar avea ı̂n continuare
rădăcina x (deoarece există drum elementar (x, . . . , y) ı̂n G, deci s, i ı̂n G − e) s, i astfel G − e ar rămâne
quasi-tare conex (conform propozit, iei anterioare), contradict, ie cu ipoteza.
Fie acum v ∈ V \ {x} un nod arbitrar fixat. x fiind rădăcină, există un drum (x, . . . , y, v) de
lungime nenulă (v 6= x), deci d− (v) ≥ 1 (∃(y, v) ∈ E). Demonstrăm că d− (v) = 1 prin reducere la
absurd. Dacă am avea d− (v) > 1, atunci ar exista două arce diferite e1 = (y1, v),e2 = (y2 , v) ∈ E, iar
G − e1 ar avea ı̂n continuare rădăcina x (deoarece există un drum (x, . . . , y2 , v) ı̂n G − e1 ) s, i astfel
G − e1 ar rămâne quasi-tare conex (conform propozit, iei anterioare), contradict, ie cu ipoteza.
P −
6) ⇒ 7) Fie G cu proprietatea 6). Conform Propozit, iei 3.3.2, m = d (t) = n − 1, deci G este
t∈V
un arbore (conform Teoremei de caracterizare a arborilor) s, i astfel nu are cicluri.
P −
7) ⇒ 1) Fie G cu proprietatea 7). Din nou, m = d (t) = n − 1, deci G este un arbore s, i astfel
t∈V
este conex. Rezultă că pentru orice nod y ∈ V există un lant, elementar unic [x, v1 , . . . , vk , y].
Deoarece d− (x) = 0 nu putem avea (v1 , x) ∈ E, deci (x, v1 ) ∈ E. Cum (x, v1 ) ∈ E s, i d− (v1 ) = 1,
nu putem avea (v2 , v1 ) ∈ E, deci (v1 , v2 ) ∈ E.
Continuând ı̂n acest mod (induct, ie!) obt, inem (v2 , v3 ) ∈ E, . . . , (vk , y) ∈ E, deci lant, ul [x, v1 , . . . , vk , y]
este un drum de la x la y.
Rezultă că x este o rădăcină ı̂n G s, i astfel, conform propozit, iei anterioare, G este quasi-tare
conex.
Corolarul 4.3.1. Orice arborescent, ă G = (V, E) are o unică rădăcină x s, i aceasta verifică pro-
prietăt, ile 4), 6) s, i 7) din teorema anterioară.
Demonstrat, ie. Concluzia rezultă imediat din demonstrat, ia teoremei anterioare.

4.4 Numărarea arborilor part, iali


Definit, ia 4.4.1. Fie G = (V, E) un graf fără bucle, unde V = {v1 , . . . , vn }. Matricea de
admitant, ă (matricea gradelor) asociată grafului G este matricea M = (mij )i,j=1,n definită prin:
mii = dG (vi ), ∀ i ∈ {1, . . . , n};
−mij = numărul de muchii sau arce dintre nodurile vi s, i vj , ∀ i, j ∈ {1, . . . , n}, i 6= j.
TEMA 4. ARBORI S, I ARBORESCENT, E 62

Exemplul 4.4.1. Fie G graful reprezentat ı̂n Figura 4.4.1.

1 2

3 4

Figura 4.4.1:

Matricea de admitant, ă a acestui graf este


 
2 −1 −1 0 0
 −1 5 −2 −1 −1 
 
M =  −1 −2 4 −1 0 .

 0 −1 −1 2 0 
0 −1 0 0 1

Observat, ia 4.4.1. Matricea de admitant, ă este o matrice simetrică (s, i pentru grafuri orientate!) s, i are
toate sumele pe linii s, i pe coloane egale cu zero.
Observat, ia 4.4.2. Definit, ia 4.4.1 se poate extinde s, i pentru grafuri cu bucle, considerând drept matrice
de admitant, ă a unui astfel de graf matricea de admitant, ă a grafului obt, inut prin eliminarea tuturor
buclelor.
Teorema 4.4.1 (Kirchoff-Trent, de numărare a arborilor part, iali). Fie G = (V, E) un graf
fără bucle având matricea de admitant, ă M = (mij )i,j=1,n , n ≥ 2. Atunci numărul t(G) de arbori
part, iali ai grafului G verifică egalitatea

t(G) = (−1)i+j det[M]ij , ∀ i, j ∈ {1, . . . , n},

unde [M]ij reprezintă matricea obt, inută din M prin eliminarea liniei i s, i coloanei j.
Observat, ia 4.4.3. Teorema anterioară este valabilă s, i pentru grafuri cu bucle, folosind Observat, ia
4.4.2.
Exemplul 4.4.2. Aplicând teorema anterioară rezultă că numărul arborilor part, iali ai grafului G din
Exemplul 4.4.1 este

2 −1 0 0

−1 4 −1 0
t(G) = det[M]22 = = 12.

0 −1 2 0
0 0 0 1

Definit, ia 4.4.2. a) Graful neorientat simplu Kn = (V, E) definit prin

V = {v1 , . . . , vn }, E = {[vi , vj ]|i, j ∈ {1, . . . , n}, i 6= j}

se numes, te graf complet de ordinul n, unde n ∈ N⋆ .


TEMA 4. ARBORI S, I ARBORESCENT, E 63

b) Graful neorientat simplu Kp,q = (V, E) definit prin


V = {x1 , . . . , xp , y1, . . . , yq }, E = {[xi , yj ]|i ∈ {1, . . . , p}, j ∈ {1, . . . , q}}
se numes, te graf bipartit complet, unde p, q ∈ N⋆ .
În particular, un graf bipartit complet de forma K1,q se numes, te graf stea.
Exemplul 4.4.3. Graful complet K6 este reprezentat ı̂n Figura 4.4.2.

2 3

1 4

6 5

Figura 4.4.2:

Graful bipartit complet K3,2 este reprezentat ı̂n Figura 4.4.3 ({x1 , x2 , x3 } = {1, 2, 3} s, i {y1 , y2 } =
{4, 5}), iar graful stea K1,6 este reprezentat ı̂n Figura 4.4.4 (x1 = 1 s, i {y1, . . . , y6 } = {2, . . . , 7}).

1 3 4

2 2 1 5

3 7 6

Figura 4.4.3: Figura 4.4.4:

Corolarul 4.4.1. Graful complet Kn are nn−2 arbori part, iali.


Demonstrat, ie. Matricea de admitant, ă a grafului Kn este
 
n − 1 −1 . . . −1
 −1 n − 1 . . . −1 
M =  ...
 ( de tipul n × n),
... ... ... 
−1 −1 . . . n − 1
deci conform teoremei anterioare avem

n − 1 −1 ... −1

−1 n − 1 ... −1
t(Kn ) = det[M]11 =

... ... ... ...
−1 −1 ... n− 1
TEMA 4. ARBORI S, I ARBORESCENT, E 64

(determinant de ordinul n − 1). Adunând toate liniile la prima linie, apoi adunând linia obt, inută la
celălalte linii obt, inem

1 1 ... 1 1 1 . . . 1

−1 n − 1 . . . −1 0 n . . . 0
t(Kn ) = n−2
... ... ... ... = n .
=
. . . . . . . . . . . .
−1 −1 . . . n − 1 0 0 ... n

Observat, ia 4.4.4. Corolarul anterior poate fi reformulat astfel: numărul arborilor ce pot fi construit, i
cu n noduri date (numit, i s, i arbori etichetat, i) este egal cu nn−2 .
Corolarul 4.4.2. Graful bipartit complet Kp,q are pq−1 q p−1 arbori part, iali.

4.5 Numărarea arborescent, elor part, iale


Definit, ia 4.5.1. Fie G = (V, E) un graf orientat fără bucle, unde V = {v1 , . . . , vn }. Matricea
gradelor de intrare asociată grafului G este matricea M = (mij )i,j=1,n definită prin:

mii = d−
G (vi ), ∀ i ∈ {1, . . . , n};

−m−
ij = numărul de arce de la nodul vi la nodul vj , ∀ i, j ∈ {1, . . . , n}, i 6= j.

Exemplul 4.5.1. Pentru graful orientat G din Examplul 3.1.2, matricea gradelor de intrare este
 
1 −1 0 0 0
 0 2 −1 −1 −1 
 
M =  −1 −1 1 0 0 
.
 0 0 0 2 0 
0 0 0 −1 1

Observat, ia 4.5.1. Matricea gradelor de intrare are toate sumele pe coloane egale cu zero.
Observat, ia 4.5.2. Definit, ia 4.5.1 se poate extinde s, i pentru grafuri orientate cu bucle, considerând
drept matrice a gradelor de intrare a unui astfel de graf matricea gradelor de intrare a grafului obt, inut
prin eliminarea tuturor buclelor.
Teorema 4.5.1 (de numărare a arborescent, elor part, iale). Fie G = (V, E) un graf orientat
fără bucle cu V = {v1 , . . . , vn }, n ≥ 2, s, i fie M = (mij )i,j=1,n matricea gradelor de intrare asociată
grafului G.

a) Pentru orice nod vi ∈ V , numărul de arborescent, e part, iale ale grafului G ce au ca rădăcină
nodul vi este egal cu
det[M ]ii
(unde [M ]ii reprezintă matricea obt, inută din M prin eliminarea liniei i s, i coloanei i).

b) Numărul total de arborescent, e part, iale ale grafului G este egal cu


n
X
det[M ]ii .
i=1
TEMA 4. ARBORI S, I ARBORESCENT, E 65

Observat, ia 4.5.3. Teorema anterioară este valabilă s, i pentru grafuri cu bucle, folosind Observat, ia
4.5.2.
Exemplul 4.5.2. Aplicând teorema anterioară pentru graful G din Exemplul 3.1.2 rezultă că numărul
arborescent, elor part, iale având rădăcina 1 este egal cu

2 −1 −1 −1

−1 1 0 0
det[M ]11 = = 2.
0 0 2 0
0 0 −1 1

Numărul total de arborescent, e part, iale ale grafului G este egal cu

det[M ]11 + det[M ]22 + det[M ]33 + det[M ]44 + det[M ]55
= 2 + 2 + 4 + 0 + 0 = 8.
Tema 5

Arbori part, iali de cost minim

Problema determinării arborilor part, iali de cost minim are numeroase aplicat, ii practice. În continuare
vom prezenta doi algoritmi fundamentali pentru rezolvarea acestei probleme.

5.1 Expunerea problemei


Definit, ia 5.1.1. Un graf ponderat este o pereche (G, c), unde G = (V, E) este un graf iar c : E →
R este o funct, ie numită pondere (cost). Pentru orice e ∈ E, c(e) se numes, te ponderea (costul)
muchiei sau arcului e.
Definit, ia 5.1.2. Fie (G, c) un graf ponderat, G = (V, E).

a) Dacă H = (U, F ) este un subgraf al lui G, atunci costul (ponderea) lui H este
X
c(H) = c(e)
e∈F

(adică suma costurilor muchiilor sau arcelor sale).

b) Un arbore part, ial T ⋆ = (V, F ) al lui G cu proprietatea că

c(T ⋆ ) = min{c(T )|T = arbore part, ial al lui G}

se numes, te arbore part, ial de cost minim (APM) al grafului ponderat (G, c).

Observat, ia 5.1.1. Conform Propozit, iei 4.1.7, un graf ponderat are arbori part, iali de cost minim dacă
s, i numai dacă este conex.
Observat, ia 5.1.2. Pentru un graf ponderat conex dat, arborele part, ial de cost minim nu este neapărat
unic. De exemplu, graful ponderat din Figura 5.1.1 are 4 arbori part, iali de cost minim, reprezentat, i
ı̂n Figurile 5.1.2–5.1.5.

66
TEMA 5. ARBORI PART, IALI DE COST MINIM 67

30 40
1 2 3

10 20 10

4 5 6
30 40

Figura 5.1.1:

30 40 1 2 3
1 2 3

10 20 10 10 20 10

4 5 6 4 5 6
30 40

Figura 5.1.2: Figura 5.1.3:

30 40
1 2 3 1 2 3

10 20 10 10 20 10

4 5 6 4 5 6
40 30

Figura 5.1.4: Figura 5.1.5:

În cazul ı̂n care costurile muchiilor sunt diferite două câte două avem următorul rezultat.
Propozit, ia 5.1.1. Un graf ponderat conex având costurile muchiilor diferite două câte două are un
unic arbore part, ial de cost minim.
Demonstrat, ie. Fie (G, c) un graf ponderat conex cu G = (V, E), astfel ı̂ncât c(e1 ) 6= c(e2 ) pentru
orice e1 6= e2 , e1 , e2 ∈ E. Demonstrăm că acest graf are un unic APM prin reducere la absurd.
Presupunem că există doi arbori part, iali de cost minim T1 = (V, F1 ) s, i T2 = (V, F2 ). Fie f =
[x, y] ∈ E astfel ı̂ncât
c(f ) = min{c(e) | e ∈ F1 ∆F2 }, (5.1.1)
unde F1 ∆F2 = (F1 \ F2 ) ∪ (F2 \ F1 ) este diferent, a simetrică a mult, imilor F1 s, i F2 . Analizăm cazul
f ∈ F1 \ F2 (cazul f ∈ F2 \ F1 fiind analog).
Conform Teoremei numărului ciclomatic, graful H = T2 + f = (V, F2 ∪ {f }) obt, inut din arborele
part, ial T2 prin adăugarea muchiei f cont, ine un ciclu elementar unic C s, i f ∈ E(C). Arborele T1 nu
TEMA 5. ARBORI PART, IALI DE COST MINIM 68

cont, ine cicluri, deci există o muchie f ′ = [x′ , y ′] ∈ E(C) astfel ı̂ncât f ′ 6∈ F1 . Cum f ∈ F1 rezultă că
f ′ 6= f , deci f ′ ∈ E(C) \ {f }. Cum E(C) \ {f } ⊆ F2 , deducem că f ′ ∈ F2 \ F1 , deci f ′ ∈ F1 ∆F2 .
Atunci, din alegerea muchiei f conform proprietăt, ii (5.1.1) s, i din ipoteza că muchiile grafului G au
costurile diferite, avem
c(f ) < c(f ′ ).
Fie
T = (T2 + f ) − f ′
graful part, ial al lui G obt, inut din T2 prin adăugarea muchiei f s, i eliminarea muchiei f ′ , adică
T = (V, F ), unde F = (F2 ∪ {f }) \ {f ′ }.
Evident, T este conex (ı̂ntre nodurile x′ s, i y ′ există lant, ul obt, inut din ciclul C prin eliminarea
muchiei f ′ ) s, i are n − 1 muchii (deoarece T2 are n − 1 muchii). Conform Teoremei de caracterizare
a arborilor rezultă că T este un arbore part, ial al grafului G.
Deoarece c(f ) < c(f ′ ) obt, inem

c(T ) = c(T2 ) + c(f ) − c(f ′ ) < c(T2 ),

ceea ce contrazice faptul că arborele part, ial T2 are costul minim.
Observat, ia 5.1.3. Reciproca propozit, iei anterioare nu este adevărată. De exemplu, graful ponderat
din Figura 5.1.6 are un unic arbore part, ial de cost minim, reprezentat ı̂n Figura 5.1.7, des, i nu are
costurile muchiilor diferite (c([1, 2]) = c([2, 3]) = c([2, 5]) s, i c([1, 4]) = c([3, 6])).

20 20 20 20
1 2 3 1 2 3

10 20 10 10 20 10

4 5 6 4 5 6
30 40

Figura 5.1.6: Figura 5.1.7:

5.2 Algoritmii lui Kruskal s, i Prim


Algoritmul 5.2.1 (Kruskal). Fie (G, c) un graf ponderat conex cu G = (V, E), V = {v1 , . . . , vn }.
Algoritmul are n − 1 pas, i.

• La pasul i, i = 1, n − 1, dintre muchiile neselectate la pas, ii anteriori se selectează o muchie


ei ∈ E de cost minim cu proprietatea că nu formează cicluri cu muchiile {e1 , . . . , ei−1 } selectate
la pas, ii anteriori.

Algoritmul 5.2.2 (Prim). Fie (G, c) un graf ponderat conex cu G = (V, E), V = {v1 , . . . , vn }.
Algoritmul are n pas, i.

• La pasul 0 se selectează un nod arbitrar x0 ∈ V .


TEMA 5. ARBORI PART, IALI DE COST MINIM 69

• La pasul i, i = 1, n − 1, se selectează o muchie ei = [xj , xi ] ∈ E de cost minim cu proprietatea


că are ca extremităt, i un nod xj ∈ V selectat la un pas anterior s, i celălalt nod xi ∈ V neselectat
la pas, ii anteriori; se selectează s, i nodul xi .

Teorema 5.2.1 (de corectitudine a algoritmilor Kruskal s, i Prim). În contextul Algoritmilor
Kruskal sau Prim, fie F = {e1 , . . . , en−1 } mult, imea muchiilor selectate. Atunci T = (V, F ) este un
arbore part, ial de cost minim al grafului ponderat (G, c).
Demonstrat, ie. Vom prezenta o demonstrat, ie comună a corectitudinii celor doi algoritmi. Fie T0 =
(V, ∅) s, i Ti = (V, {e1 , . . . , ei }), ∀ i ∈ {1, 2, . . . , n − 1}, unde e1 , e2 , . . . , en−1 sunt muchiile selectate, ı̂n
această ordine, de Algoritmul Kruskal sau de Algoritmul Prim.
Graful G fiind conex, selectarea muchiei ei este posibilă la fiecare pas i, iar Ti este o pădure
part, ială a lui G (afirmat, ie evidentă pentru Algoritmul Kruskal, iar pentru Algoritmul Prim este o
consecint, ă a faptului că nodurile neselectate la pasul i sunt izolate ı̂n Ti ).
Demonstrăm prin induct, ie după i ∈ {0, 1, . . . , n − 1} că există un APM T ⋆ = (V, F ⋆ ) astfel ı̂ncât

Ti ⊆ T ⋆ (adică {e1 , . . . , ei } ⊆ F ⋆ ). (5.2.1)

Pentru i = 0 afirmat, ia este evidentă, luând T ⋆ orice APM (există, deoarece G este conex).
Presupunem (5.2.1) adevărată pentru i − 1, adică există T ⋆ = (V, F ⋆ ) APM cu Ti−1 ⊆ T ⋆ s, i o
demonstrăm pentru i (i ∈ {1, 2, . . . , n − 1}).
Fie ei = [xj , xi ] muchia selectată de Algoritmul Kruskal sau de Algoritmul Prim la pasul i. În
cazul Algoritmului Prim, xj este nodul selectat la un pas anterior (j ≤ i − 1). Avem două cazuri.
Cazul 1) ei ∈ F ⋆ . Atunci {e1 , . . . , ei } ⊆ F ⋆ , deci Ti ⊆ T ⋆ .
Cazul 2) ei 6∈ F ⋆ . Conform Teoremei numărului ciclomatic, graful H = T ⋆ + ei = (V, F ⋆ ∪ {ei })
obt, inut din T ⋆ prin adăugarea muchiei ei cont, ine un ciclu elementar unic

Ci = [xj , w0 , . . . , wk , xi , xj ]

având ultima muchie chiar muchia ei . Cum Ti = Ti−1 +ei este o pădure, rezultă că xj s, i xi sunt ı̂n com-
ponente conexe diferite ale lui Ti−1 (ı̂n caz contrar Ti ar cont, ine un ciclu de forma [xj , y0 , . . . , yr , xi , xj ]
având ultima muchie ei ). Rezultă că lant, ul elementar

µi = [xj , w0 , . . . , wk , xi ]

(obt, inut din ciclul Ci prin eliminarea muchiei ei ) cont, ine o muchie e′i = [x′ , y ′] astfel ı̂ncât x′ este
ı̂n aceeas, i componentă conexă cu xj ı̂n pădurea Ti−1 , iar y ′ nu este ı̂n această componentă conexă.
Evident, rezultă că e′i nu este muchie a lui Ti−1 , adică e′i 6∈ {e1 , . . . , ei−1 }, iar graful Ti′ = Ti−1 + e′i
nu cont, ine cicluri. De asemenea, e′i 6= ei , deci e′i ∈ F ∗ .
Pe de o parte, din descrierea Algoritmului Kruskal deducem că

c(ei ) ≤ c(e′i )

(deoarece muchia e′i nu formează cicluri cu {e1 , . . . , ei−1 }, deci ei fiind muchia selectată la pasul i
verifică această inegalitate).
Pe de altă parte, din descrierea Algoritmului Prim deducem că la pasul i nodul x′ era deja selectat
la un pas anterior (fiind ı̂n aceeas, i componentă conexă cu xj ı̂n Ti−1 ), iar nodul y ′ nu era selectat la
un pas anterior (nefiind ı̂n acea componentă conexă), deci din nou avem

c(ei ) ≤ c(e′i )
TEMA 5. ARBORI PART, IALI DE COST MINIM 70

(ei fiind muchia selectată la pasul i verifică această inegalitate).


Continuăm demonstrat, ia comună pentru cei doi algoritmi. Fie

T ⋆⋆ = (T ⋆ + ei ) − e′i

graful part, ial al lui G obt, inut din T ⋆ prin adăugarea muchiei ei s, i eliminarea muchiei e′i , adică
T ⋆⋆ = (V, F ⋆⋆ ), unde F ⋆⋆ = F ⋆ ∪ {ei } \ {e′i }.
Evident, T ⋆⋆ este conex (T ⋆ este conex iar ı̂ntre nodurile x′ s, i y ′ după eliminarea muchiei e′i
rămâne lant, ul obt, inut din ciclul Ci prin eliminarea acestei muchii) s, i are n − 1 muchii (deoarece
T ⋆ are n − 1 muchii). Conform Teoremei de caracterizare a arborilor rezultă că T ⋆⋆ este un arbore
part, ial al grafului G.
Deoarece c(ei ) ≤ c(e′i ) obt, inem

c(T ⋆⋆ ) ≤ c(T ⋆ )

s, i cum T ⋆ este un APM rezultă că s, i T ⋆⋆ este un APM (s, i, ı̂n plus, c(T ⋆⋆ ) = c(T ⋆ )). Cum Ti ⊆ T ⋆⋆ ,
demonstrat, ia prin induct, ie a relat, iei (5.2.1) este completă.
Luând i = n−1 ı̂n această relat, ie obt, inem că T ⊆ T ⋆ , unde T = Tn−1 = (V, F ), F = {e1 , . . . , en−1 }
(mult, imea muchiilor selectate de algoritm) iar T ⋆ este un APM. Dar T s, i T ⋆ au fiecare câte n − 1
muchii, deci T = T ⋆ s, i astfel T este un APM al grafului dat.
Exemplul 5.2.1. Fie graful ponderat (G, c) reprezentat ı̂n Figura 5.2.1, unde costul fiecărei muchii
este scris lângă segmentul corespunzător acesteia.

30 50 100
1 2 3 4
20
90
70 60 6
110 70 120
0
15

5 80
40
10
7 8 9 10
100 30 130

Figura 5.2.1:

Aplicarea Algoritmului Kruskal este evident, iată ı̂n următorul tabel:


Pas Muchia selectată Costul ei
1 [5, 8] 10
2 [3, 6] 20
3 [1, 2] 30
4 [8, 9] 30
5 [2, 3] 50
6 [2, 5] 60
7 [4, 6] 90
8 [7, 8] 100
9 [4, 10] 120
TEMA 5. ARBORI PART, IALI DE COST MINIM 71

Arborele part, ial de cost minim obt, inut este reprezentat ı̂n Figura 5.2.2. Costul acestui APM este de
510.

30 50
1 2 3 4
20
90
60 6
120
5
10
7 8 9 10
100 30

Figura 5.2.2:

Aplicarea Algoritmului Prim pentru acelas, i graf este evident, iată ı̂n următorul tabel:
Pas Muchia selectată Costul ei Nodul selectat
0 - - 1
1 [1, 2] 30 2
2 [2, 3] 50 3
3 [3, 6] 20 6
4 [2, 5] 60 5
5 [5, 8] 10 8
6 [8, 9] 30 9
7 [6, 4] 90 4
8 [8, 7] 100 7
9 [4, 10] 120 10
Arborele part, ial de cost minim obt, inut este deci acelas, i cu cel obt, inut prin aplicarea Algoritmului
Kruskal.
Observat, ia 5.2.1. Algoritmii Kruskal s, i Prim sunt specifici metodei de programare Greedy.
Algoritmul Kruskal selectează muchii, ı̂n ordinea crescătoare a costurilor, subgrafurile induse pe
parcurs de acestea nefiind neapărat conexe. Algoritmul Prim selectează muchii s, i noduri, nu neapărat
ı̂n ordinea crescătoare a costurilor muchiilor, iar subgrafurile induse pe parcurs de muchiile selectate
sunt conexe.
În implementări optime, se poate arăta că Algoritmul Kruskal are complexitatea O (m ln n) (fi-
ind necesară sortarea muchiilor după cost), iar Algoritmul Prim are complexitatea O (n2 ) ı̂n cazul
memorării grafului prin matricea de adiacent, ă (o astfel de implementare va fi prezentată ı̂n contin-
uare), unde n s, i m reprezintă numerele de noduri, respectiv de muchii ale grafului dat. Graful fiind
conex, m ≥ n − 1.
Pentru grafuri simple, m ≤ n(n−1)2
. Folosind s, i inegalitatea ln n ≤ n − 1, obt, inem că Algoritmul
Kruskal este mai eficient pentru grafuri ”sărace” ı̂n muchii, iar Algoritmul Prim este mai eficient
pentru grafuri ”bogate” ı̂n muchii.
Observat, ia 5.2.2. Pentru implementarea Algoritmului Kruskal, memorăm graful ponderat conex
(G, c), unde G = (V, E), V = {1, . . . , n}, E = {e1 , . . . , em }, ı̂ntr-o matrice cu 3 linii s, i m coloane
TEMA 5. ARBORI PART, IALI DE COST MINIM 72

P = (pik ) i = 1, 3 având semnificat, ia:


k = 1, m

dacă ek = [xk , yk ] ∈ E, atunci p1k = xk , p2k = yk s, i p3k = c(ek ).

Utilizăm un vector S cu semnificat, ia



1, dacă ek a fost selectată,
S[k] =
0, ı̂n caz contrar,

∀ k ∈ {1, . . . , m} s, i un vector CC cu semnificat, ia


CC[i] = numărul componentei conexe ı̂n care se află nodul i ı̂n graful indus de muchiile selectate,
∀ i ∈ {1, . . . , n}.
Astfel o muchie [x, y] nu formează cicluri cu muchiile selectate dacă s, i numai dacă

CC[x] 6= CC[y].

Descrierea ı̂n pseudocod a algoritmului are următoarea formă.


KRUSKAL :
SORTARE(P ); // se sortează coloanele matricei P
// crescător după costurile muchiilor
for i = 1, m do S[i] ← 0;
for i = 1, n do CC[i] ← i;
cost ← 0; // costul APM
poz ← 0; // căutarea următoarei muchii ek ce va fi
ıncepe de pe pozit, ia poz + 1
// selectată ^
for l = 1, n − 1 do // pasul l
k ← poz;
repeat
k ← k + 1; x ← p1k ; y ← p2k ; c ← p3k ;
while (CC[x] = CC[y]);
S[k] ← 1; // selectăm ek = [x, y]
cost ← cost + c; poz ← k;
aux ← CC[y]; // actualizăm vectorul CC prin unificarea
// componentelor conexe ale lui x s, i y
for i = 1, n do
if (CC[i] = aux) then CC[i] ← CC[x];

Observat, ia 5.2.3. Pentru implementarea Algoritmului Prim, memorăm graful ponderat conex s, i
simplu (G, c), unde G = (V, E), V = {1, . . . , n}, E = {e1 , . . . , em }, cu ajutorul unei matrice
C = (cij )i,j=1,n a costurilor (directe) având semnificat, ia

 c([i, j]), dacă [i, j] ∈ E,
cij = 0, dacă i = j, (5.2.2)

∞, ı̂n rest,

∀i, j ∈ {1, . . . , n}. Pentru grafuri neorientate, matricea C este simetrică. În cazul grafurilor nesimple
putem lua
cij = min{c(e)|e = [i, j] ∈ E}.
TEMA 5. ARBORI PART, IALI DE COST MINIM 73

Utilizăm un vector S cu semnificat, ia



1, dacă nodul i a fost selectat,
S[i] =
0, ı̂n caz contrar

s, i doi vectori t s, i T AT A având semnificat, ia

t[i] = costul minim al unei muchii [i, j] de la nodul i la un nod selectat j,


T AT A[i] = nodul j ce atinge minimul ı̂n t[i], ∀ i ∈ {1, . . . , n}.

Descrierea ı̂n pseudocod a algoritmului are următoarea formă.


PRIM :
S[1] ← 1; // selectăm nodul 1
cost ← 0; // costul APM
for i = 2, n do // init, ializări
S[i] ← 0; t[i] ← ci1 ; T AT A[i] ← 1;
for l = 1, n − 1 do // căutăm nodul y s, i muchia [x, y]
// ce vor fi selectate la pasul l
min ← ∞;
for i = 2, n do
if (S[i] = 0) and (t[i] < min) then
min ← t[i]; y ← i;
S[y] ← 1; // selectăm nodul y
x ← T AT A[y]; // s, i muchia [x, y]
cost ← cost + cxy ;
for i = 2, n do // actualizăm vectorii t s, i T AT A
if (S[i] = 0) and (t[i] > ciy ) then
t[i] ← ciy ; T AT A[i] ← y;
Tema 6

Grafuri euleriene

6.1 Definit, ii s, i exemple


Definit, ia 6.1.1. a) Fie G = (V, E) un graf. Un lant, simplu, ciclu, drum simplu sau circuit ı̂n
graful G ce cont, ine toate muchiile sau arcele lui G se numes, te eulerian.

b) Un graf neorientat se numes, te eulerian dacă are (cel put, in) un ciclu eulerian.

c) Un graf orientat se numes, te eulerian dacă are (cel put, in) un circuit eulerian.
Exemplul 6.1.1. Graful neorientat reprezentat ı̂n Figura 6.1.1 este eulerian, un ciclu eulerian al său
fiind C = [1, 2, 3, 4, 10, 9, 3, 6, 2, 5, 8, 7, 5, 1].

1 2 3 4

5 6

7 8 9 10

Figura 6.1.1:

Exemplul 6.1.2. Fie graful orientat reprezentat ı̂n Figura 6.1.2. Un drum eulerian ı̂n acest graf este
(1, 2, 3, 4, 6, 3, 5, 6, 1, 5, 4).

74
TEMA 6. GRAFURI EULERIENE 75

2 3

1 4

5 6

Figura 6.1.2:

Observat, ia 6.1.1. Existent, a lant, urilor, ciclurilor, drumurilor sau circuitelor euleriene nu este influent, ată
de prezent, a unor eventuale noduri izolate, deci putem analiza ı̂n continuare doar grafurile fără noduri
izolate.

6.2 Grafuri euleriene neorientate


Teorema 6.2.1 (Euler, de caracterizare a grafurilor euleriene neorientate). Un graf neori-
entat fără noduri izolate este eulerian dacă s, i numai dacă este conex s, i par.
Demonstrat, ie. ”⇒” Fie G = (V, E) un graf neorientat eulerian, fără noduri izolate. Fie C un ciclu
eulerian al lui G. Neexistând noduri izolate, orice nod x ∈ V are o muchie incidentă, s, i cum această
muchie apart, ine lui C rezultă că s, i nodul x apart, ine lui C. Deci C cont, ine s, i toate nodurile lui
G. Rezultă că G este conex, ı̂ntre orice două noduri distincte x, y ∈ V existând un lant, elementar
cont, inut ı̂n ciclul C.
Cum C cont, ine toate muchiile lui G rezultă că

dG (x) = dC (x) = par, ∀ x ∈ V


(orice ciclu este evident un subgraf par).
”⇐” Fie G = (V, E) un graf neorientat conex, par s, i fără noduri izolate. Conform Propozit, iei
4.1.2, graful G are o descompunere ı̂n cicluri elementare muchie-disjuncte C1 , . . . , Ck , k ≥ 1.
Dacă k = 1, atunci C1 este un ciclu eulerian ı̂n G.
Dacă k ≥ 2, graful G fiind conex, ciclul C1 are un nod comun cu un alt ciclu din {C2 , . . . , Ck }. Fie
C2 acest ciclu s, i C2′ ciclul obt, inut pornind din nodul comun s, i parcurgând ı̂ntâi C1 apoi C2 . Spunem
că C2′ se obt, ine prin concatenarea (alipirea) ciclurilor C1 s, i C2 .
Dacă k = 2, atunci C2′ este un ciclu eulerian ı̂n G.
Dacă k ≥ 3, din conexitatea lui G obt, inem că C2′ are un nod comun cu un alt ciclu din
{C3 , . . . , Ck }, fie acesta C3 , s, i fie C3′ ciclul obt, inut prin concatenarea ciclurilor C2′ s, i C3 . Continuând
acest procedeu de concatenare a ciclurilor, rezultă (prin induct, ie după k) că obt, inem un ciclu Ck′ ce
este eulerian ı̂n G.
Exemplul 6.2.1. Graful din Exemplul 6.1.1 este conex, par s, i fără noduri izolate, deci este eulerian.
Observat, ia 6.2.1. Demonstrat, ia teoremei anterioare este constructivă, ea indicând un algoritm de
determinare a unui ciclu eulerian ı̂ntr-un graf neorientat conex, par s, i fără noduri izolate.
Prezentăm ı̂n continuare un algoritm pentru determinarea unui ciclu eulerian bazat pe arborele
DF al grafului dat.
TEMA 6. GRAFURI EULERIENE 76

Algoritmul 6.2.1 (de determinare a unui ciclu eulerian). Fie G = (V, E) un graf neorientat
conex, par s, i fără noduri izolate. Verificarea conexităt, ii, cu neglijarea nodurilor izolate, poate fi
efectuată cu ajutorul parcurgerii DF (Algoritmul 3.5.3), iar verificarea parităt, ii poate fi efectuată cu
ajutorul Propozit, iei 3.3.1. Fie T = (V, F ) arborele DF al lui G, considerând ca rădăcină a parcurgerii
DF un nod x1 ∈ V arbitrar fixat. Un ciclu eulerian ı̂n G poate fi obt, inut astfel:

• se pornes, te din nodul rădăcină x1 ;

• se parcurg cu prioritate muchiile (neparcurse anterior) ce nu apart, in arborelui DF (adică dacă


există o astfel de muchie [x, y], incidentă cu nodul curent x, se parcurge această muchie s, i nodul
curent devine y, iar dacă nu există o astfel de muchie se parcurge, dacă există, o muchie [x, z]
a arborelui DF , incidentă cu nodul curent x, s, i nodul curent devine z).

• se continuă parcurgerea ı̂n modul descris mai sus, cât timp este posibil.

Exemplul 6.2.2. Arborele DF (1) al grafului din Exemplul 6.1.1 este reprezentat ı̂n Figura 6.2.1.
Aplicând algoritmul anterior obt, inem ciclul eulerian

[1, 5, 8, 7, 5, 2, 6, 3, 9, 10, 4, 3, 2, 1].

1 2 3 4

5 6

7 8 9 10

Figura 6.2.1:

Observat, ia 6.2.2. Datorită necesităt, ii parcurgerii DF , dar s, i a tuturor muchiilor grafului dat, com-
plexitatea Algoritmului 6.2.1 este O(m), unde m reprezintă numărul de muchii ale grafului dat.
Observat, ia 6.2.3. Pentru implementarea Algoritmului 6.2.1, ı̂n cazul grafurilor simple putem memora
arborele DF tot ı̂n matricea de adiacent, ă A considerând

aij = 2 dacă muchia [i, j] apart, ine arborelui DF .

Algoritmul descris ı̂n pseudocod are forma


TEMA 6. GRAFURI EULERIENE 77

CICLU EULERIAN(x) :
i ← x; // i este nodul curent al ciclului eulerian
repeat
VIZITEAZĂ(i); // se vizitează nodul i,
// de exemplu se afis, ează i
j ← 1;
while (a[i, j] 6= 1 and j ≤ n) do // căutăm [i, j] 6∈ DF
j ← j + 1;
if (j ≤ n) then // există, deci [i, j] ∈ ciclu eulerian
a[i, j] ← 0; a[j, i] ← 0; // eliminăm [i, j] din graf
i ← j;
else
j ← 1;
while (a[i, j] 6= 2 and j ≤ n) do // căutăm [i, j] ∈ DF
j ← j + 1;
if (j ≤ n) then // există, deci [i, j] ∈ ciclu eulerian
a[i, j] ← 0; a[j, i] ← 0; // eliminăm [i, j] din graf
i ← j;
while (j ≤ n);

Observat, ia 6.2.4. În cazul grafurilor nesimple, pentru implementarea Algoritmului 6.2.1 graful dat
poate fi memorat cu ajutorul matricei de adiacent, ă, iar arborele DF poate fi memorat cu ajutorul
vectorului T AT A. Verificarea dacă [i, j] ∈ DF revine la ”T AT A[i] = j sau T AT A[j] = i”, iar
eliminarea unei muchii [i, j] din graf revine la ”aij ← aij − 1 s, i aji ← aji − 1”.
Corolarul 6.2.1. Un graf neorientat fără noduri izolate are un lant, eulerian deschis dacă s, i nu-
mai dacă este conex s, i are exact două noduri de grade impare. În plus, orice lant, eulerian are ca
extremităt, i cele două noduri de grade impare.
Demonstrat, ie. ”⇒” Fie G = (V, E) un graf neorientat fără noduri izolate, având un lant, eulerian
deschis µ = [x, v1 , . . . , vk , y]. Evident, G este conex.
Fie G′ = (V, E ∪ {e}), unde e = [y, x], e 6∈ E (muchie nouă). Adăugând muchia e la lant, ul µ
obt, inem un ciclu eulerian C = [x, v1 , . . . , vk , y, x] ı̂n graful G′ . Conform Teoremei 6.2.1, G′ este conex
s, i par. Rezultă că

dG (x) = dG′ (x) − 1 = impar,


dG (y) = dG′ (y) − 1 = impar,
dG (z) = dG′ (z) = par ∀ z ∈ V \ {x, y}.

”⇐” Fie G = (V, E) un graf neorientat conex, fără noduri izolate, cu exact două noduri x s, i y
de grade impare. Fie G′ graful definit ca mai sus. Rezultă că G′ este conex s, i par, deci conform
Teoremei 6.2.1 el cont, ine un ciclu eulerian C = [x, v1 , . . . , vk , y, x]. Eliminând muchia e = [y, x] de
pe ciclul C obt, inem un lant, eulerian deschis µ = [x, v1 , . . . , vk , y] ı̂n graful G.
Observat, ia 6.2.5. Folosind trecerea ı̂ntre grafurile G s, i G′ s, i ı̂ntre lant, ul eulerian deschis µ s, i ciclul
eulerian C din demonstrat, ia corolarului anterior, precum s, i Algoritmul 6.2.1, se obt, ine un algoritm
pentru determinarea lant, urilor euleriene deschise ı̂ntr-un graf dat.
TEMA 6. GRAFURI EULERIENE 78

6.3 Grafuri euleriene orientate


Teorema 6.3.1 (de caracterizare a grafurilor euleriene orientate). Un graf orientat fără
noduri izolate este eulerian dacă s, i numai dacă este conex s, i d+ (x) = d− (x), pentru orice nod x.
Demonstrat, ie. Demonstrat, ia este analogă cu cea a Teoremei 6.2.1, ı̂nlocuind ”ciclu” cu ”circuit” s, i
”d(x) = par” cu ”d+ (x) = d− (x)”.
Existent, a unui circuit se obt, ine pornind dintr-un nod arbitrar s, i parcurgând succesiv arce cât
timp este posibil (revenirea ı̂n nodul init, ial este asigurată de condit, ia d+ (x) = d− (x) ∀x).
Corolarul 6.3.1. Un graf orientat fără noduri izolate are un drum eulerian deschis dacă s, i numai
dacă este conex s, i are două noduri x s, i y astfel ı̂ncât d+ (x) = d− (x) + 1, d+ (y) = d− (y) − 1,
d+ (z) = d− (z) pentru orice nod z diferit de x s, i y. În plus, orice drum eulerian are ca extremitate
init, ială nodul x s, i ca extremitate finală nodul y.
Demonstrat, ie. Demonstrat, ia este analogă cu cea a Corolarului 6.2.1, utilizând acum Teorema 6.3.1.

Exemplul 6.3.1. Graful din Exemplul 6.1.2 este conex, fără noduri izolate s, i
d+ (1) = d− (1) + 1, d+ (4) = d− (4) − 1, d+ (z) = d− (z) ∀ z ∈ V \ {1, 4},
deci graful are drumuri euleriene de forma (1, . . . , 4).
Observat, ia 6.3.1. Demonstrat, ia Teoremei 6.3.1 este constructivă, ea indicând un algoritm de de-
terminare a unui circuit eulerian ı̂ntr-un graf orientat ce verifică ipotezele teoremei. De asemenea,
analog Observat, iei 6.2.5, acest algoritm poate fi utilizat s, i pentru determinarea unui drum eulerian
deschis ı̂ntr-un graf orientat ce verifică ipotezele Corolarului 6.3.1.
Tema 7

Grafuri hamiltoniene

7.1 Definit, ii s, i exemple


Definit, ia 7.1.1. a) Fie G = (V, E) un graf. Un lant, elementar, ciclu elementar, drum elementar
sau circuit elementar ı̂n graful G ce cont, ine toate nodurile lui G se numes, te hamiltonian.

b) Un graf neorientat se numes, te trasabil dacă are un singur nod sau are (cel put, in) un lant,
hamiltonian deschis.

c) Un graf neorientat se numes, te hamiltonian dacă are (cel put, in) un ciclu hamiltonian.

d) Un graf orientat se numes, te trasabil dacă are un singur nod sau are (cel put, in) un drum
hamiltonian deschis.

e) Un graf orientat se numes, te hamiltonian dacă are (cel put, in) un circuit hamiltonian.
Observat, ia 7.1.1. Orice graf hamiltonian este trasabil, deoarece prin eliminarea unei muchii a unui
ciclu hamiltonian rămâne un lant, hamiltonian deschis, iar prin eliminarea unui arc al unui circuit
hamiltonian rămâne un drum hamiltonian deschis. Reciproca nu este adevărată. De exemplu, un
graf format dintr-un drum deschis elementar este trasabil, dar nu este hamiltonian.
Exemplul 7.1.1. Graful orientat din Exemplul 6.1.2 este hamiltomian, un circuit hamiltonian fiind
C = (1, 2, 3, 5, 4, 6, 1). El este s, i trasabil, 6 drumuri hamiltoniene deschise obt, inându-se prin elim-
inarea a câte unuia din arcele circuitului C s, i anume µ1 = C \ {(1, 2)} = (2, 3, 5, 4, 6, 1), µ2 =
C \ {(2, 3)} = (3, 5, 4, 6, 1, 2), µ3 = C \ {(3, 5)} = (5, 4, 6, 1, 2, 3), µ4 = C \ {(5, 4)} = (4, 6, 1, 2, 3, 5),
µ5 = C \ {(4, 6)} = (6, 1, 2, 3, 5, 4), µ6 = C \ {(6, 1)} = (1, 2, 3, 5, 4, 6).
Definit, ia 7.1.2. Fie G = (V, E) un graf. Un nod x ∈ V se numes, te punct (nod, vârf ) de
articulat, ie al grafului G dacă Gx \ {x} este un graf neconex, unde Gx este componenta conexă a
lui G care cont, ine nodul x.
Exemplul 7.1.2. Graful din Exemplul 6.1.1 are puncte de articulat, ie s, i anume nodurile 2, 3 s, i 5.
Lema 7.1.1. a) Orice graf neorientat hamiltonian este conex s, i nu are puncte de articulat, ie.
b) Orice graf orientat hamiltonian este tare-conex s, i nu are puncte de articulat, ie.
Demonstrat, ie. a) Un ciclu hamiltonian C al grafului G este (induce) un graf part, ial, conex s, i fără
puncte de articulat, ie al lui G, deci s, i graful G este conex s, i nu are puncte de articulat, ie. Analog se
obt, ine afirmat, ia de la punctul b), utilizând faptul că un circuit hamiltonian este tare-conex.

79
TEMA 7. GRAFURI HAMILTONIENE 80

Observat, ia 7.1.2. Reciprocele afirmat, iilor din lema anterioară nu sunt adevărate. De exemplu, graful
orientat din Figura 7.1.1 este tare-conex s, i nu are puncte de articulat, ie, dar nu este hamiltonian
(deoarece nodurile 2 s, i 4 au gradele egale cu 2, deci un circuit hamiltonian C ar trebui să cont, ină
arcele (1, 2), (2, 3), (3, 4), (4, 1), iar pentru a cont, ine s, i nodul 5 circuitul C ar trebui să traverseze
de două ori nodul 1, fals). Analog, dacă eliminăm orientările arcelor acestui graf, obt, inem un graf
neorientat conex s, i fără puncte de articulat, ie, dar care nu este hamiltonian.

1 2

4 3

Figura 7.1.1:

Exemplul 7.1.3. Graful eulerian din Exemplul 6.1.1 nu este hamiltonian, deoarece are puncte de
articulat, ie.
Exemplul 7.1.4. Graful reprezentat ı̂n Figura 7.1.2 este hamiltonian, un ciclu hamiltonian al său fiind
C = [1, 2, 3, 4, 8, 7, 6, 5, 1]. Acest graf nu este eulerian, având 4 noduri de grade impare.

1 2 3 4

5 6 7 8

Figura 7.1.2:

Observat, ia 7.1.3. Spre deosebire de problemele euleriene studiate ı̂n sect, iunea anterioară, problemele
de testare a hamiltoneităt, ii sau a trasabilităt, ii unui graf s, i de determinare a unui ciclu, lant, deschis,
circuit sau drum deschis hamiltonian optim ı̂ntr-un graf ponderat sunt probleme pentru care nu se
cunosc (până ı̂n prezent) algoritmi de rezolvare cu complexitate polinomială (numite s, i probleme
NP). Dispunem totus, i de numeroase condit, ii fie necesare, fie suficiente, pentru ca un graf dat să fie
hamiltonian sau trasabil. Câteva astfel de condit, ii vor fi prezentate ı̂n continuare.
Observat, ia 7.1.4. Este evident că ı̂ntr-un graf cu n ≥ 3 noduri orice lant, , ciclu, drum sau circuit
hamiltonian nu utilizează bucle s, i nici muchii sau arce multiple, deci este suficient să studiem hamil-
toneitatea pentru grafurile simple.
TEMA 7. GRAFURI HAMILTONIENE 81

7.2 Grafuri hamiltoniene neorientate


Lema 7.2.1 (Bondy, Chvátal). Fie G = (V, E) un graf neorientat simplu cu n ≥ 3 noduri. Fie
x, y ∈ V astfel ı̂ncât
x 6= y, [x, y] 6∈ E s, i d(x) + d(y) ≥ n.
Atunci graful G este hamiltonian dacă s, i numai dacă graful

G + [x, y] = (V, E ∪ {[x, y]})

este hamiltonian.
Demonstrat, ie. Evident, dacă G este hamiltonian atunci orice ciclu hamiltonian ı̂n G este ciclu hamil-
tonian s, i ı̂n G + [x, y], deci G + [x, y] este hamiltonian.
Reciproc, fie G + [x, y] hamiltonian s, i C un ciclu hamiltonian ı̂n acest graf.
Cazul 1) Dacă C nu cont, ine muchia [x, y], atunci C este un ciclu hamiltonian ı̂n graful G.
Cazul 2) Dacă C cont, ine muchia [x, y], atunci prin eliminarea muchiei [x, y] din ciclul C obt, inem
un lant, hamiltonian

µ = [x = v1 , v2 , . . . , vn = y]

ı̂n graful G. Fie

A = {i ∈ {1, . . . , n − 1}|[x, vi+1 ] ∈ E},


B = {i ∈ {1, . . . , n − 1}|[vi , y] ∈ E}.

Avem card (A) = d(x) s, i card (B) = d(y), deci, conform ipotezei,

card (A) + card (B) ≥ n.

Cum A ∪ B ⊆ {1, . . . , n − 1}, avem card (A ∪ B) ≤ n − 1, deci

card (A ∩ B) = card (A) + card (B) − card (A ∪ B) ≥ n − (n − 1) = 1,

adică A ∩ B 6= ∅. Fie k ∈ A ∩ B. Atunci

[x = v1 , v2 , . . . , vk , y = vn , vn−1 , . . . , vk+1 , x]

este un ciclu hamiltonian ı̂n graful G.


Definit, ia 7.2.1. Fie G un graf neorientat simplu cu n ≥ 3 noduri. Închiderea lui G, notată cu
cl(G), este graful neorientat simplu obt, inut din G prin adăugarea repetată a tuturor muchiilor [x, y]
ı̂ntre noduri distincte s, i neadiacente x, y cu d(x) + d(y) ≥ n ı̂n graful curent.
Observat, ia 7.2.1. Dacă H = cl(G), atunci pentru orice noduri distincte x, y cu [x, y] 6∈ E(H) avem
dH (x) + dH (y) < n, unde E(H) este mult, imea muchiilor grafului H.
Observat, ia 7.2.2. Graful cl(G) este bine definit, nedepinzând de ordinea de adăugare a muchiilor.
Acest fapt poate fi demonstrat prin induct, ie după numărul muchiilor adăugate.
TEMA 7. GRAFURI HAMILTONIENE 82

Exemplul 7.2.1. Fie G graful reprezentat ı̂n Figura 7.2.1.

2 3

1 4

6 5

Figura 7.2.1:

Adăugând succesiv muchiile [1, 5] (deoarece d(1) + d(5) = 4 + 2 ≥ n = 6), [2, 4] (deoarece
d(2) + d(4) = 2 + 4 ≥ n, ı̂n graful curent), [2, 5] (deoarece d(2) + d(5) = 3 + 3 ≥ n, ı̂n graful curent!),
[2, 6], [3, 5] s, i [3, 6], obt, inem ı̂nchiderea cl(G) = K6 , unde K6 este graful complet cu 6 noduri.
Lema 7.2.2 (Lema ı̂nchiderii; Bondy, Chvátal). Fie G un graf neorientat simplu cu n ≥ 3
noduri. Atunci G este hamiltonian dacă s, i numai dacă graful cl(G) este hamiltonian.
Demonstrat, ie. Concluzia este evidentă conform Lemei 7.2.1 s, i definit, iei anterioare.
Lema 7.2.3. Fie G un graf neorientat simplu cu n ≥ 3 noduri. Dacă avem cl(G) = Kn , atunci G
este hamiltonian.
Demonstrat, ie. Concluzia rezultă folosind lema anterioară s, i faptul că graful complet Kn , n ≥ 3, este
evident hamiltonian (orice succesiune de forma [v1 , v2 , . . . , vn , v1 ] cu nodurile v1 , . . . , vn distincte este
un ciclu hamiltonian ı̂n Kn ).
Observat, ia 7.2.3. Reciproca lemei anterioare nu este adevărată. De exemplu graful G reprezentat ı̂n
Figura 7.2.2 este hamiltonian, dar cl(G) = G 6= K6 .

2 3

1 4

6 5

Figura 7.2.2:

Teorema 7.2.1 (Chvátal). Fie G = (V, E) un graf neorientat simplu cu n ≥ 3 noduri având gradele

d1 ≤ d2 ≤ · · · ≤ dn .
TEMA 7. GRAFURI HAMILTONIENE 83

Dacă pentru orice k ∈ N⋆ este verificată proprietatea


n
dk ≤ k < ⇒ dn−k ≥ n − k,
2
atunci G este hamiltonian.
Demonstrat, ie. Dacă am avea d1 = 0, atunci din ipoteză ar rezulta că dn−1 ≥ n − 1, s, i cum graful G
este simplu s-ar obt, ine că nodul de grad dn−1 ar fi adiacent cu toate celelalte noduri, contradict, ie cu
d1 = 0. Deci d1 ≥ 1 s, i astfel graful G nu are noduri izolate.
Demonstrăm că are loc egalitatea cl(G) = Kn s, i conform lemei anterioare rezultă astfel că G este
hamiltonian. Fie
H = cl(G).
Presupunem prin reducere la absurd că H 6= Kn , deci ∃ x, y ∈ V , x 6= y astfel ı̂ncât [x, y] 6∈ E(H)
(unde E(H) reprezintă mult, imea muchiilor lui H). Conform Observat, iei 7.2.1, pentru orice x, y ∈ V ,
x 6= y cu [x, y] 6∈ E(H) avem

dH (x) + dH (y) ≤ n − 1. (7.2.1)

Fie atunci x, y ∈ V , x 6= y cu [x, y] 6∈ E(H) s, i de sumă dH (x) + dH (y) maximă.


Presupunem că dH (x) ≤ dH (y). Fie k = dH (x).
Evident, k ≥ dG (x) ≥ 1, iar din (7.2.1) obt, inem
n−1
k≤ s, i dH (y) ≤ n − 1 − k. (7.2.2)
2
Fie
A = {v ∈ V |v 6= y, [v, y] 6∈ E(H)}.
Avem card (A) = n − 1 − dH (y), deci din (7.2.2) avem

card (A) ≥ k. (7.2.3)

Din alegerea lui x s, i y, pentru orice v ∈ A avem

dH (v) + dH (y) ≤ dH (x) + dH (y),

deci dH (v) ≤ dH (x). Cum dG (v) ≤ dH (v) obt, inem că

dG (v) ≤ k, ∀ v ∈ A. (7.2.4)

Din (7.2.3) s, i (7.2.4) rezultă că ı̂n G există cel put, in k noduri v având dG (v) ≤ k, s, i folosind ordonarea
d1 ≤ · · · ≤ dn a gradelor ı̂n G deducem că

dk ≤ k. (7.2.5)

Fie
B = {v ∈ V |v 6= x, [x, v] 6∈ E(H)}.
Avem card (B) = n − 1 − dH (x), deci

card (B) = n − 1 − k. (7.2.6)


TEMA 7. GRAFURI HAMILTONIENE 84

Din alegerea lui x s, i y, pentru orice v ∈ B avem

dH (x) + dH (v) ≤ dH (x) + dH (y),

deci dH (v) ≤ dH (y), s, i conform (7.2.2) rezultă că

dH (v) ≤ n − 1 − k.

Cum dG (v) ≤ dH (v) obt, inem că

dG (v) ≤ n − 1 − k, ∀ v ∈ B. (7.2.7)

Din (7.2.6) s, i (7.2.7) rezultă că ı̂n G există cel put, in n − 1 − k noduri v diferite de x s, i având
dG (v) ≤ n − 1 − k. Cum
dG (x) ≤ dH (x) = k ≤ n − 1 − k,
rezultă că ı̂n G există cel put, in n − k noduri v având dG (v) ≤ n − 1 − k, s, i folosind ordonarea
d1 ≤ · · · ≤ dn a gradelor ı̂n G deducem că

dn−k ≤ n − 1 − k. (7.2.8)

Din (7.2.2), (7.2.5) s, i (7.2.8) obt, inem


n
dk ≤ k < s, i dn−k < n − k,
2
contradict, ie cu ipoteza teoremei. Demonstrat, ia este ı̂ncheiată.
Observat, ia 7.2.4. Dacă graful G verifică ipoteza Teoremei lui Chvátal atunci cl(G) = Kn . Reciproca
nu este adevărată. De exemplu, graful G din Exemplul 7.2.1 are cl(G) = Kn , dar nu verifică ipoteza
Teoremei lui Chvátal (are gradele, ı̂n ordine crescătoare, 2, 2, 3, 3, 4, 4, deci d2 ≤ 2 < n2 dar d4 < 4).
Astfel nici reciproca Teoremei lui Chvátal nu este adevărată.
Corolarul 7.2.1 (Teorema lui Bondy). Fie G un graf neorientat simplu cu n ≥ 3 noduri având
gradele
d1 ≤ d2 ≤ · · · ≤ dn .
Dacă pentru orice p, q ∈ N⋆ este verificată proprietatea

dp ≤ p, dq ≤ q, p 6= q ⇒ dp + dq ≥ n,

atunci G este hamiltonian.


Demonstrat, ie. Se arată că graful G verifică ipoteza Teoremei lui Chvátal s, i astfel este hamiltonian.

Observat, ia 7.2.5. Teorema lui Chvátal generalizează Teorema lui Bondy. Această generalizare este
strictă. De exemplu, graful reprezentat ı̂n Figura 7.2.3 are gradele, ı̂n ordine crescătoare, 3, 3, 3, 4, 5, 5, 5, 6,
deci verifică ipoteza Teoremei lui Chvátal dar nu verifică ipoteza Teoremei lui Bondy (d3 = 3 ≤ 3,
d4 = 4 ≤ 4, dar d3 + d4 = 7 < n = 8).
TEMA 7. GRAFURI HAMILTONIENE 85

2 3

1 4

8 5

7 6

Figura 7.2.3:

Corolarul 7.2.2 (Teorema lui Pósa). Fie G un graf neorientat simplu cu n ≥ 3 noduri având
gradele
d1 ≤ d2 ≤ · · · ≤ dn .
Dacă

dk > k, ∀ k < n−1
2
,
n−1
dk+1 > k, pentru k = 2
s, i n = impar,
atunci G este hamiltonian.
Demonstrat, ie. Se arată că graful G verifică ipoteza Teoremei lui Bondy (corolarul anterior) s, i astfel
este hamiltonian.
Observat, ia 7.2.6. Teorema lui Bondy generalizează Teorema lui Pósa. Generalizarea este strictă. De
exemplu, graful reprezentat ı̂n Figura 7.2.4 are gradele, ordonate crescător, 2, 2, 4, 4, 4, 4, deci verifică
ipoteza Teoremei lui Bondy, dar nu verifică ipoteza Teoremei lui Pósa.

2 3

1 4

6 5

Figura 7.2.4:

Corolarul 7.2.3 (Teorema lui Ore). Fie G = (V, E) un graf neorientat simplu cu n ≥ 3 noduri.
Dacă pentru orice două noduri x, y distincte s, i neadiacente avem
d(x) + d(y) ≥ n,
TEMA 7. GRAFURI HAMILTONIENE 86

atunci G este hamiltonian.


Demonstrat, ie. Se arată că graful G verifică ipoteza Teoremei lui Pósa (corolarul anterior) s, i astfel
este hamiltonian.
Observat, ia 7.2.7. Teorema lui Pósa generalizează Teorema lui Ore. Această generalizare este strictă.
De exemplu, graful reprezentat ı̂n Figura 7.2.5 are gradele, ordonate crescător, 2, 3, 3, 4, 4, 4, deci
verifică ipoteza Teoremei lui Pósa, dar nu verifică ipoteza Teoremei lui Ore.

2 3

1 4

6 5

Figura 7.2.5:

Corolarul 7.2.4 (Teorema lui Dirac). Fie G = (V, E) un graf neorientat simplu cu n ≥ 3 noduri.
Dacă
n
d(x) ≥ , ∀ x ∈ V,
2
atunci G este hamiltonian.
Demonstrat, ie. Se arată că graful G verifică ipoteza Teorema lui Ore (corolarul anterior), deci este
hamiltonian.
Observat, ia 7.2.8. Teorema lui Ore generalizează Teorema lui Dirac. Această generalizare este strictă.
De exemplu, graful reprezentat ı̂n Figura 7.2.6 verifică ipoteza Teoremei lui Ore, dar nu verifică
ipoteza Teoremei lui Dirac.

2 3

1 4

6 5

Figura 7.2.6:
TEMA 7. GRAFURI HAMILTONIENE 87

Corolarul 7.2.5. Fie G = (V, E) un graf neorientat simplu cu n ≥ 2 noduri. Dacă


n−1
d(x) ≥ , ∀ x ∈ V,
2
atunci G este trasabil.
Demonstrat, ie. Fie v0 6∈ V un nod nou s, i fie graful neorientat G′ = (V ′ , E ′ ) definit prin

V ′ = V ∪ {v0 }, E ′ = E ∪ {[v0 , x] | x ∈ V }.

Evident, G′ este un graf simplu cu n′ = n + 1 ≥ 3 noduri,


n+1 n′
dG′ (x) = d(x) + 1 ≥ = , ∀x ∈ V,
2 2
n+1 n′
dG′ (v0 ) = n ≥ = ,
2 2
deci conform Teoremei lui Dirac (corolarul anterior) rezultă că G′ este hamiltonian. Fie C un ciclu
hamiltonian ı̂n G′ . Atunci lant, ul deschis obt, inut prin eliminarea nodului v0 din ciclul C este elementar
(deoarece ciclul C este elementar) s, i cont, ine toate nodurile lui G (deoarece ciclul C cont, ine toate
nodurile lui G′ ), deci este un lant, hamiltonian ı̂n G s, i astfel graful G este trasabil.

7.3 Grafuri hamiltoniene orientate


Definit, ia 7.3.1. Fie G un graf orientat s, i H un subgraf al lui G. Un H-ocol ı̂n graful G este un
drum deschis elementar µ de lungime l(µ) ≥ 2 având doar extremităt, ile ı̂n H.
Observat, ia 7.3.1. În contextul definit, iei anterioare avem 2 ≤ card (V (H)) ≤ card (V (G)) − 1 (unde
V (G) s, i V (H) reprezintă mult, imile de noduri ale grafurilor G, respectiv H).
Lema 7.3.1 (Lema ocolului). Fie G un graf orientat tare-conex fără puncte de articulat, ie s, i fie
H un subgraf al lui G astfel ı̂ncât

2 ≤ card (V (H)) ≤ card (V (G)) − 1.

Atunci G cont, ine cel put, in un H-ocol.


Demonstrat, ie. Cum V (G) \ V (H) 6= ∅ s, i G este conex, rezultă că există două noduri x s, i y adiacente
ı̂n G cu x ∈ V (H) s, i y ∈ V (G) \ V (H). Fie z ∈ V (H), z 6= x. Cum x nu este punct de articulat, ie
ı̂n G, rezultă că graful G \ {x} este conex, deci există un lant, elementar de la y la z ı̂n G care nu
cont, ine nodul x. Fie µ = [y = t0 , t1 , . . . , tr = z] acest lant, s, i fie j ∈ {1, . . . , r} cel mai mic indice
astfel ı̂ncât tj ∈ V (H) (există, deoarece tr = z ∈ V (H)). Atunci [x, y, t1 , . . . , tj ] este un lant, deschis
elementar de lungime mai mare sau egală cu 2 având doar extremităt, ile x s, i tj ı̂n H.
Fie acum µ∗ = [v0 , v1 , . . . , vk ] un lant, deschis elementar de lungime l(µ∗ ) = k ≥ 2 având doar
extremităt, ile v0 s, i vk ı̂n H (există, conform construct, iei anterioare) cu proprietatea că are un număr
minim de arce de forma (vi , vi−1 ) ∈ E(G) (numite arce inverse pentru lant, ul µ∗ ). Demonstrăm prin
reducere la absurd că acest număr minim este chiar egal cu zero s, i astfel va rezulta că toate arcele
lui µ∗ au forma (vi−1 , vi ) ∈ E(G) (numite arce directe pentru lant, ul µ∗ ), adică µ∗ este un drum de
la v0 la vk , deci µ∗ este un un H-ocol ı̂n G.
Presupunem prin absurd că µ∗ cont, ine un arc invers (vi , vi−1 ) ∈ E(G), unde i ∈ {1, . . . , k}. Cum
G este tare-conex, rezultă că există un drum elementar ı̂n G de forma µ1 = (s = w0 , w1, . . . , wp = vi )
TEMA 7. GRAFURI HAMILTONIENE 88

cu s ∈ V (H), w1 , . . . , wp ∈ V (G) \ V (H). Dacă i = k, atunci p = 0 s, i µ1 = (s), cu s = vk .


Analog, există un drum elementar ı̂n G de forma µ2 = (vi−1 = u0 , u1, . . . , uq = t) cu t ∈ V (H),
u0 , . . . , uq−1 ∈ V (G) \ V (H). Dacă i = 1, atunci q = 0 s, i µ2 = (t), cu t = v0 . Avem două cazuri.
Cazul 1) s 6= t. Atunci (s = w0 , w1 , . . . , wp = vi , vi−1 = u0 , u1, . . . , uq = t) este un drum ı̂n
G cu proprietatea că s, t ∈ V (H) s, i w1 , . . . , wp , u0, . . . , uq−1 ∈ V (G) \ V (H), deci, eliminând toate
eventualele port, iuni dintre noduri egale, se obt, ine un H-ocol de la s la t ı̂n G, contradict, ie cu alegerea
lui µ∗ .
Cazul 2) s = t. Atunci cum v0 6= vk , rezultă că t 6= v0 sau s 6= vk . Avem două subcazuri.
a) t 6= v0 . Atunci µ′ = [v0 , v1 , . . . , vi−1 = u0, u1 , . . . , uq = t] este un lant, ı̂n G cu proprietatea că
v0 , t ∈ V (H) s, i v1 , . . . , vi−1 , u1 , . . . , uq−1 ∈ V (G) \ V (H). Arcele (u0 , u1 ), . . . , (uq−1, uq ) sunt directe
ı̂n µ′ , deci arcele inverse ale lui µ′ se găsesc doar ı̂n port, iunea [v0 , v1 , . . . , vi−1 ]. Cum această port, iune
apare s, i ı̂n µ∗ s, i nu cont, ine arcul (vi , vi−1 ), care este arc invers ı̂n µ∗ , rezultă că numărul de arce
inverse ale lui µ′ este mai mic sau egal cu p − 1. Eliminând toate eventualele port, iuni dintre noduri
egale din µ′ , se obt, ine un lant, elementar deschis de la v0 la t de lungime mai mare sau egală cu 2
cu proprietatea că doar extremităt, ile v0 s, i t sunt ı̂n H s, i având numărul de arce inverse mai mic sau
egal cu p − 1, contradict, ie cu alegerea lui µ∗ .
b) s 6= vk . Atunci µ′′ = [s = w0 , w1 , . . . , wp = vi , vi+1 , . . . , vk ] este un lant, ı̂n G cu proprietatea că
s, vk ∈ V (H) s, i w1 , . . . , wp , vi+1 , . . . , vk−1 ∈ V (G) \ V (H). Arcele (w1 , w2 ), . . . , (wp−1, wp ) sunt directe
ı̂n µ′′ , deci arcele inverse ale lui µ′′ se găsesc doar ı̂n port, iunea µ′ = [vi , vi+1 , . . . , vk ]. Cum această
port, iune apare s, i ı̂n µ∗ s, i nu cont, ine arcul (vi , vi−1 ), care este arc invers ı̂n µ∗ , rezultă că numărul de
arce inverse ale lui µ′′ este mai mic sau egal cu p − 1. Eliminând toate eventualele port, iuni dintre
noduri egale din µ′′ , se obt, ine un lant, elementar deschis de la s la vk de lungime mai mare sau egală
cu 2 cu proprietatea că doar extremităt, ile s s, i vk sunt ı̂n H s, i având numărul de arce inverse mai
mic sau egal cu p − 1, contradict, ie cu alegerea lui µ∗ .
Demonstrat, ia prin reducere la absurd este ı̂ncheiată.
Lema 7.3.2 (Kőnig-Veress). Fie G un graf orientat simplu, µ un drum elementar deschis de la x
la y ı̂n G s, i z ∈ V (G) \ V (µ).
a) Dacă nu există niciun drum elementar µ′ de la x la y ı̂n G astfel ı̂ncât V (µ′ ) = V (µ) ∪ {z},
atunci
dµ (z) ≤ l(µ) + 2,
unde dµ (z) reprezintă numărul de noduri ale lui µ ce sunt adiacente cu z ı̂n G, numit gradul nodului
z relativ la drumul µ, iar l(µ) reprezintă lungimea drumului µ.
b) Dacă µ este un drum elementar deschis de lungime maximă ı̂n G, atunci
dµ (z) ≤ l(µ).
Demonstrat, ie. a) Fie µ = (x = v0 , v1 , . . . , vk = y), deci l(µ) = k. Fie
A = {i ∈ {1, . . . , k} | (z, vi ) ∈ E(G)},
B = {i ∈ {1, . . . , k} | (vi−1 , z) ∈ E(G)}.
Notând cu d+ µ (z) numărul de noduri vi ∈ V (µ) cu proprietatea că (z, vi ) ∈ E(G) (numit gradul de
ies, ire al nodului z relativ la drumul µ) s, i cu d− µ (z) numărul de noduri vi ∈ V (µ) cu proprietatea
că (vi , z) ∈ E(G) (numit gradul de intrare al nodului z relativ la drumul µ), avem

+ card (A) + 1, dacă (z, v0 ) ∈ E(G),
dµ (z) =
card (A), dacă (z, v0 ) 6∈ E(G),

card (B) + 1, dacă (vk , z) ∈ E(G),
d−
µ (z) =
card (B), dacă (vk , z) 6∈ E(G)
TEMA 7. GRAFURI HAMILTONIENE 89

s, i dµ (z) = d+ −
µ (z) + dµ (z).
Dacă ar exista un indice i ∈ A ∩ B, atunci

µ′ = (x = v0 , v1 , . . . , vi−1 , z, vi , vi+1 , . . . , vk = y)

ar fi un drum elementar de la x la y ı̂n G astfel ı̂ncât V (µ′ ) = V (µ) ∪ {z}, contradict, ie cu ipoteza.
Deci A ∩ B = ∅.
Folosind relat, iile anterioare s, i faptul că A ∪ B ⊆ {1, 2, . . . , k}, rezultă că

dµ (z) = d+ −
µ (z) + dµ (z) ≤ card (A) + card (B) + 2 = card (A ∪ B) + 2 ≤ k + 2.

b) Dacă µ este un drum elementar deschis de lungime maximă ı̂n G, atunci utilizând notat, iile s, i
relat, iile de la demonstrat, ia punctului a), avem (z, v0 ) 6∈ E(G) (deoarece ı̂n caz contrar (z, v0 , v1 , . . . , vk )
ar fi un drum elementar deschis ı̂n G de lungime l(µ) + 1, contradict, ie), (vk , z) 6∈ E(G) (deoarece ı̂n
caz contrar (v0 , v1 , . . . , vk , z) ar fi un drum elementar deschis ı̂n G de lungime l(µ)+1, contradict, ie) s, i,
din nou, A ∩ B = ∅ (deoarece dacă ar exista i ∈ A ∩ B, atunci µ′ = (v0 , v1 , . . . , vi−1 , z, vi , vi+1 , . . . , vk )
ar fi un drum elementar deschis ı̂n G de lungime l(µ) + 1, contradict, ie), deci

dµ (z) = d+ −
µ (z) + dµ (z) = card (A) + card (B) = card (A ∪ B) ≤ k.

Teorema 7.3.1 (Meyniel). Fie G = (V, E) un graf orientat simplu, tare-conex, cu n ≥ 2 noduri.
Dacă pentru orice două noduri x, y distincte s, i neadiacente avem

d(x) + d(y) ≥ 2n − 1,

atunci G este hamiltonian.


Demonstrat, ie. Arătăm că G nu cont, ine puncte de articulat, ie prin reducere la absurd. Într-adevăr,
dacă ar exista v ∈ V astfel ı̂ncât G \ {v} ar fi neconex, atunci notând cu A s, i B două componente
conexe ale grafului G \ {v} ar rezulta că pentru orice noduri a ∈ A s, i b ∈ B avem

d+ (a) ≤ card (A), d− (a) ≤ card (A), d+ (b) ≤ card (B), d− (b) ≤ card (B)

(deoarece toate nodurile adiacente cu a ı̂n G sunt din {v} ∪ A \ {a}, toate nodurile adiacente cu b ı̂n
G sunt din {v} ∪ B \ {b}, iar G este simplu), deci nodurile a, b sunt distincte s, i neadiacente s, i

d(a) + d(b) = d+ (a) + d− (a) + d+ (b) + d− (b) ≤ 2(card (A) + card (B)) ≤ 2(n − 1),

contradict, ie cu ipoteza teoremei.


Graful G este tare-conex, deci cont, ine circuite elementare. Într-adevăr, pentru orice două noduri
distincte s s, i t există drumuri elementare (s = x0 , x1 , . . . , xp = t) s, i (t = y0 , y1 , . . . , yq = s) ı̂n G, deci
luând cel mai mic indice i ∈ {1, . . . , q} pentru care există j ∈ {0, . . . , p} astfel ı̂ncât yi = xj (există
astfel de indici, deoarece yq = x0 ), rezultă că (t = y0 , y1 , . . . , yi = xj , xj+1 , . . . , xp = t) este un circuit
elementar in G.
Fie C un circuit elementar de lungime maximă ı̂n G. Demonstrăm că circuitul C are lungimea
l(C) = n prin reducere la absurd s, i astfel va rezulta că C este un circuit hamiltonian ı̂n G.
Presupunem prin absurd că l(C) < n. Conform Lemei ocolului rezultă că G cont, ine cel put, in un
C-ocol. Fie µ1 = (x, . . . , y) un C-ocol ı̂n G cu proprietatea că subdrumul elementar µ2 de la x la y
al circuitului C este de lungime minimă.
Fie µ3 subdrumul elementar de la y la x al circuitului C.
TEMA 7. GRAFURI HAMILTONIENE 90

Notăm

V1 = V (µ1 ) \ {x, y}, V2 = V (µ2 ) \ {x, y}, V3 = V (µ3 ), V4 = V \ (V1 ∪ V2 ∪ V3 ).

Avem l(µ1 ) ≥ 2 (din definit, ia C-ocolului), deci V1 6= ∅.


De asemenea, avem s, i V2 6= ∅ (deoarece ı̂n caz contrar circuitul C ′ obt, inut prin parcurgerea ı̂ntâi
a drumului µ1 apoi a drumului µ3 ar fi un circuit elementar ı̂n G de lungime l(C ′ ) = l(µ1 ) + l(µ3 ) =
l(µ1 ) + l(C) − l(µ2 ) = l(µ1 ) + l(C) − 1 ≥ l(C) + 1, contradit, ie cu alegerea lui C).
Fie nodurile v1 ∈ V1 s, i v2 ∈ V2 arbitrar fixate.
Graful G fiind simplu, avem
dV1 (v1 ) ≤ 2card (V1 ) − 2 (7.3.1)
(unde, pentru orice v ∈ V s, i U ⊆ V , dU (v) reprezintă numărul de arce din G având o extremitate
egală cu v s, i cealaltă extremitate din U, numit gradul nodului v relativ la U).
Avem (v1 , v2 ) 6∈ E (deoarece ı̂n caz contrar drumul µ′1 obt, inut prin parcurgerea ı̂ntâi a subdru-
mului dintre x s, i v1 al lui µ1 apoi a arcului (v1 , v2 ) ar fi un C ocol ı̂n G de la x la v2 cu proprietatea
că subdrumul elementar µ′2 de la x la v2 al circuitului C este de lungime l(µ′2 ) < l(µ2 ), contradit, ie
cu alegerea lui µ1 ). Analog, avem (v2 , v1 ) 6∈ E (deoarece ı̂n caz contrar drumul µ′′1 obt, inut prin
parcurgerea ı̂ntâi a arcului (v2 , v1 ) apoi a subdrumului dintre v1 s, i y al lui µ1 ar fi un C ocol ı̂n G de
la v2 la y cu proprietatea că subdrumul elementar µ′′2 de la v2 la y al circuitului C este de lungime
l(µ′′2 ) < l(µ2 ), contradit, ie cu alegerea lui µ1 ). Cum nodurile v1 ∈ V1 s, i v2 ∈ V2 sunt arbitrare, rezultă
că
dV2 (v1 ) = 0, dV1 (v2 ) = 0. (7.3.2)
Nu există un drum elementar µ′3 de la y la x ı̂n G cu proprietatea că V (µ′3 ) = V (µ3 ) ∪ {v1 }
(deoarece ı̂n caz contrar circuitul C ′′ obt, inut prin parcurgerea ı̂ntâi a drumului µ2 apoi a drumului
µ′3 ar fi un circuit elementar ı̂n G de lungime l(C ′′ ) = l(µ2 ) + l(µ′3 ) = l(µ2 ) + l(µ3 ) + 1 = l(C) + 1,
contradit, ie cu alegerea lui C), deci conform Lemei Kőnig-Veress rezultă că dV3 (v1 ) ≤ l(µ3 ) + 2, adică

dV3 (v1 ) ≤ card (V3 ) + 1. (7.3.3)

Nu există z ∈ V4 astfel ı̂ncât (v1 , z), (z, v2 ) ∈ E (deoarece ı̂n caz contrar drumul µ′1 obt, inut prin
parcurgerea ı̂ntâi a subdrumului dintre x s, i v1 al lui µ1 apoi a arcului (v1 , z), apoi a arcului (z, v2 ) ar
fi un C ocol ı̂n G de la x la v2 cu proprietatea că subdrumul elementar µ′2 de la x la v2 al circuitului
C este de lungime l(µ′2 ) < l(µ2 ), contradit, ie cu alegerea lui µ1 ). Cum G este simplu rezultă că

d+ −
V4 (v1 ) + dV4 (v2 ) ≤ card (V4 )

(unde, pentru orice v ∈ V s, i U ⊆ V , d+ U (v) reprezintă numărul de arce din G având extremitatea
init, ială egală cu v s, i extremitatea finală din U, numit gradul de ies, ire al nodului v relativ la U,
iar d− U (v) reprezintă numărul de arce din G având extremitatea init, ială din U s, i extremitatea finală
egală cu v, numit gradul de intrare al nodului v relativ la U). Analog, nu există z ∈ V4 astfel
ı̂ncât (v2 , z), (z, v1 ) ∈ E (deoarece ı̂n caz contrar drumul µ′′1 obt, inut prin parcurgerea ı̂ntâi a arcului
(v2 , z), apoi a arcului (z, v1 ), apoi a subdrumului dintre v1 s, i y al lui µ1 ar fi un C ocol ı̂n G de
la v2 la y cu proprietatea că subdrumul elementar µ′′2 de la v2 la y al circuitului C este de lungime
l(µ′′2 ) < l(µ2 ), contradit, ie cu alegerea lui µ1 ), deci

d+ −
V4 (v2 ) + dV4 (v1 ) ≤ card (V4 ).

Prin adunarea ultimelor două inegalităt, i rezultă că

dV4 (v1 ) + dV4 (v2 ) ≤ 2card (V4 ). (7.3.4)


TEMA 7. GRAFURI HAMILTONIENE 91

Fie acum µ∗3 un drum elementar de lungime maximă de la y la x ı̂n G cu proprietatea

V3 ⊆ V (µ∗3 ) ⊆ V2 ∪ V3

(există astfel de drumuri, de exemplu µ3 ).


Notăm
V3∗ = V (µ∗3 ), V2∗ = V (C) \ V3∗ ,
deci V2∗ = (V2 ∪ V3 ) \ V3∗ = V2 \ V3∗ (deoarece V3 ⊆ V (µ∗3 ) = V3∗ ), prin urmare V2∗ ⊆ V2 .
Avem V2∗ 6= ∅ (deoarece ı̂n caz contrar circuitul C ∗ obt, inut prin parcurgerea ı̂ntâi a drumului µ1
apoi a drumului µ∗3 ar fi un circuit elementar ı̂n G de lungime l(C ∗ ) = l(µ1 )+l(µ∗3) = l(µ1 )+l(C)−1 ≥
l(C) + 1, contradit, ie cu alegerea lui C).
Cum nodul v2 ∈ V2 a fost arbitrar fixat, iar ∅ = 6 V2∗ ⊆ V2 , ı̂n continuare considerăm că

v2 ∈ V2∗

s, i rezultatele de mai sus rămân valabile. Graful G fiind simplu, avem

dV2∗ (v2 ) ≤ 2card (V2∗ ) − 2.

Nu există un drum elementar µ′′3 de la y la x ı̂n G cu proprietatea că V (µ′′3 ) = V (µ∗3 ) ∪ {v2 }
(deoarece ı̂n caz contrar am avea V3 ⊆ V (µ′′3 ) ⊆ V2 ∪ V3 s, i l(µ′′3 ) = l(µ∗3 ) + 1, contradit, ie cu alegerea
lui µ∗3 ), deci conform Lemei Kőnig-Veress rezultă că dV3∗ (v2 ) ≤ l(µ∗3 ) + 2, adică

dV3∗ (v2 ) ≤ card (V3∗ ) + 1.

Prin adunarea ultimelor două inegalităt, i obt, inem

dV2∗ (v2 ) + dV3∗ (v2 ) ≤ 2card (V2∗ ) + card (V3∗ ) − 1.

Cum card (V2∗ ) + card (V3∗ ) = card (V (C)) = card (V2 ) + card (V3 ) s, i card (V2∗ ) ≤ card (V2 ) (deoarece
V2∗ ⊆ V2 ), rezultă că
dV2∗ (v2 ) + dV3∗ (v2 ) ≤ 2card (V2 ) + card (V3 ) − 1.
Dar, cum V2∗ ∪ V3∗ = V (C) = V2 ∪ V3 s, i V2∗ ∩ V3∗ = V2 ∩ V3 = ∅, avem

dV2∗ (v2 ) + dV3∗ (v2 ) = dV (C) (v2 ) = dV2 (v2 ) + dV3 (v2 ),

deci inegalitatea anterioară devine

dV2 (v2 ) + dV3 (v2 ) ≤ 2card (V2 ) + card (V3 ) − 1. (7.3.5)

Evident,

d(v1 ) = dV1 (v1 ) + dV2 (v1 ) + dV3 (v1 ) + dV4 (v1 ), d(v2 ) = dV1 (v2 ) + dV2 (v2 ) + dV3 (v2 ) + dV4 (v2 )

s, i
card (V1 ) + card (V2 ) + card (V3 ) + card (V4 ) = card (V ) = n,
deci prin adunarea relat, iilor (7.3.1), (7.3.2), (7.3.3), (7.3.4), (7.3.5) rezultă că

d(v1 ) + d(v2 ) ≤ 2n − 2

s, i cum nodurile v1 , v2 sunt distincte s, i neadiacente se obt, ine o contradict, ie cu ipoteza teoremei.
Demonstrat, ia prin reducere la absurd este ı̂ncheiată.
TEMA 7. GRAFURI HAMILTONIENE 92

Corolarul 7.3.1 (Teorema lui Nash-Williams). Fie G = (V, E) un graf orientat simplu cu n ≥ 2
noduri. Dacă
n n
d+ (x) ≥ s, i d− (x) ≥ , ∀ x ∈ V,
2 2
atunci G este hamiltonian.
Demonstrat, ie. Arătăm că G este tare-conex. Fie x, y ∈ V , x 6= y. Avem două cazuri.
Cazul 1. (x, y) ∈ E. Atunci acest arc este un drum de la x la y.
Cazul 2. (x, y) 6∈ E. Fie

X = {z ∈ V | (x, z) ∈ E}, Y = {z ∈ V | (z, y) ∈ E}.

Avem X, Y ⊆ V \ {x, y}, deci X ∪ Y ⊆ V \ {x, y}, prin urmare card (X ∪ Y ) ≤ n − 2.


Graful G fiind simplu, avem
n n
card (X) = d+ (x) ≥ , card (Y ) = d− (y) ≥ ,
2 2
deci
n n
card (X ∩ Y ) = card (X) + card (Y ) − card (X ∪ Y ) ≥ + − (n − 2) = 2,
2 2
prin urmare X ∩ Y = 6 ∅. Fie z ∈ X ∩ Y . Atunci (x, z), (z, y) ∈ E, deci (x, z, y) este un drum de la x
la y.
Conform cazurilor analizate, rezultă că graful G este tare-conex.
Pentru orice x, y ∈ V avem
n
d(x) + d(y) = d+ (x) + d− (x) + d+ (y) + d− (y) ≥ 4 · = 2n > 2n − 1,
2
deci aplicând Teorema lui Meyniel rezultă că graful G este hamiltonian.
Corolarul 7.3.2 (Teorema lui Ghouila-Houri). Fie G = (V, E) un graf orientat simplu, tare-
conex, cu n ≥ 2 noduri. Dacă
d(x) ≥ n, ∀ x ∈ V,
atunci G este hamiltonian.
Demonstrat, ie. Pentru orice x, y ∈ V avem

d(x) + d(y) ≥ n + n = 2n > 2n − 1,

deci aplicând Teorema lui Meyniel rezultă că graful G este hamiltonian.
Tema 8

Grafuri turneu

8.1 Definit, ii s, i exemple


Definit, ia 8.1.1. Un graf turneu (pe scurt turneu) este un graf orientat simplu cu proprietatea
că ı̂ntre orice două noduri distincte există exact un arc (adică pentru orice noduri x 6= y avem exact
unul dintre arcele (x, y), (y, x)).
Exemplul 8.1.1. În Figura 8.1.1 este reprezentat un graf turneu cu 6 noduri.

2 3

1 4

6 5

Figura 8.1.1:

Propozit, ia 8.1.1. Fie G = (V, E) un graf turneu cu n noduri. Atunci:


n(n − 1)
a) G are m = arce;
+ −
2
b) d (x) + d (x) = n − 1, pentru orice x ∈ V ;
P + P − n(n − 1)
c) d (x) = d (x) = .
x∈V x∈V 2
Demonstrat, ie. a) Din definit, ia grafului turneu, numărul de arce este egal cu numărul de perechi
n(n − 1)
neordonate [x, y] cu x, y ∈ V s, i x 6= y, deci m = Cn2 = .
2
b) Din definit, ia grafului turneu, pentru orice x ∈ V avem d(x) = n−1, deci d+ (x)+d− (x) = n−1.
P + P − n(n − 1)
c) Utilizând a), conform Propozit, iei 3.3.2 avem d (x) = d (x) = m = .
x∈V x∈V 2

93
TEMA 8. GRAFURI TURNEU 94

Corolarul 8.1.1. Dacă G = (V, E) este un graf turneu cu n noduri, atunci


n−1 n−1
max d+ (x) ≥ s, i max d− (x) ≥ .
x∈V 2 x∈V 2
Demonstrat, ie. Demonstrăm prima inegalitate din enunt, prin reducere la absurd. Presupunem că
n−1 n−1 P + n(n − 1)
max d+ (x) < , deci d+ (x) < pentru orice x ∈ V , deci d (x) < , contradict, ie
x∈V 2 2 x∈V 2
cu egalitatea de la punctul c) din Propozit, ia 8.1.1.
Analog se demonstrează s, i a doua inegalitate din enunt, .
Propozit, ia 8.1.2. Fie G = (V, E) un graf turneu cu n noduri. Atunci
X 2 X − 2
d+ (x) = d (x) .
x∈V x∈V

Demonstrat, ie. Utilizând Propozit, ia 8.1.1 avem


X 2 X 2
d+ (x) = n − 1 − d− (x)
x∈V x∈V
X 2 
= (n − 1)2 − 2(n − 1)d− (x) + d− (x)
x∈V
X X 2
= n(n − 1)2 − 2(n − 1) d− (x) + d− (x)
x∈V x∈V
n(n − 1) X − 2
= n(n − 1)2 − 2(n − 1) · + d (x)
2 x∈V
X 2
= d− (x) .
x∈V

Propozit, ia 8.1.3. Fie G = (V, E) un graf turneu.


a) Fie v ∈ V astfel ı̂ncât d+ (v) = max d+ (x). Atunci pentru orice nod x ∈ V cu x 6= v există un
x∈V
drum de la v la x de lungime 1 sau 2.
b) Fie w ∈ V astfel ı̂ncât d− (w) = max d− (x). Atunci pentru orice nod x ∈ V cu x 6= w există
x∈V
un drum de la x la w de lungime 1 sau 2.
Demonstrat, ie. a) Demonstrăm afirmat, ia din enunt, prin reducere la absurd. Presupunem că există
un nod y ∈ V , y 6= v pentru care nu există niciun drum de la v la y de lungime 1 sau 2. Fie
k = d+ (v) s, i fie {x ∈ V | (v, x) ∈ E} = {x1 , x2 , . . . , xk } mult, imea celor k succesori direct, i ai nodului
v. Cum (v, y) 6∈ E (deoarece ı̂n caz contrar ar exista drumul (v, y) de lungime 1) s, i (xi , y) 6∈ E pentru
orice 1 ≤ i ≤ k (deoarece ı̂n caz contrar ar exista drumul (v, xi , y) de lungime 2), iar graful G este
turneu, rezultă că (y, v) ∈ E s, i (y, xi ) ∈ E pentru orice 1 ≤ i ≤ k, deci nodurile v, x1 , x2 , . . . , xk sunt
succesori direct, i ai nodului y. Rezultă că d+ (y) ≥ 1 + k, deci d+ (y) > k = d+ (v), contradict, ie cu
ipoteza că d+ (v) = max d+ (x).
x∈V
Afirmat, ia de la punctul b) se demonstrează analog.
TEMA 8. GRAFURI TURNEU 95

8.2 Grafuri turneu hamiltoniene


Teorema 8.2.1 (Camion). Orice graf turneu tare-conex cu n ≥ 2 noduri este hamiltonian.
Demonstrat, ie. Din definit, ia grafului turneu, orice două noduri distincte sunt adiacente, deci sunt
verificate ipotezele Teoremei lui Meyniel, prin urmare graful este hamiltonian.
Observat, ia 8.2.1. Conform Lemei 7.1.1, reciproca Teoremei lui Camion este adevărată. Astfel un
graf turneu cu n ≥ 2 noduri este hamiltonian dacă s, i numai dacă este tare-conex.
Teorema 8.2.2 (Rédei). Orice graf turneu este trasabil.
Demonstrat, ie. Fie G = (V, E) un graf turneu cu n noduri. Fie x, y 6∈ V , x 6= y două noduri noi s, i
fie graful orientat G′ = (V ′ , E ′ ) definit prin

V ′ = V ∪ {x, y}, E ′ = E ∪ {(x, y)} ∪ {(v, x), (y, v) | v ∈ V }.

Evident, G′ este un graf turneu cu n′ = n + 2 ≥ 3 noduri. G′ este tare-conex, deoarece pentru


orice v1 , v2 ∈ V el cont, ine drumurile (v1 , x, y, v2), (v1 , x), (v1 , x, y), (x, y, v1), (x, y), (y, v1), (y, v1 , x).
Conform Teoremei lui Camion (corolarul anterior) rezultă că G′ este hamiltonian. Fie C un circuit
hamiltonian ı̂n G′ . C cont, ine arcul (x, y), deoarece acesta este singurul arc din G′ incident cu y
spre interior, deci ı̂n circuitul C nodurile x s, i y sunt consecutive, ı̂n această ordine. Atunci prin
eliminarea nodurilor x s, i y din circuitul C se obt, ine un drumul deschis elementar (deoarece circuitul
C este elementar) ce cont, ine toate nodurile lui G (deoarece circuitul C cont, ine toate nodurile lui
G′ ), deci este un drum hamiltonian ı̂n G s, i astfel graful G este trasabil.
Exemplul 8.2.1. Graful orientat din Figura 8.1.1 este un graf turneu, deci, conform Teoremei lui
Rédei, el este trasabil. Un drum hamiltonian ı̂n acest graf este (2, 6, 4, 1, 3, 5). Graful nu este tare-
conex (nu există drumuri de la nodul 1 la nodul 2) deci conform Teoremei lui Camion rezultă că el
nu este hamiltonian.
Tema 9

Colorări ı̂n grafuri

9.1 Colorarea nodurilor


Definit, ia 9.1.1. Fie G = (V, E) un graf neorientat s, i k ∈ N∗ .
a) O k-colorare a (nodurilor) grafului G (o colorare a (nodurilor) grafului G cu cel
mult k culori) este o funct, ie c : V → {1, 2, . . . , k} cu proprietatea că

c(x) 6= c(y), ∀ x, y ∈ V a.ı̂. x 6= y s, i [x, y] ∈ E; (9.1.1)

pentru orice x ∈ V , c(x) reprezintă culoarea asociată nodului x.


b) Graful G se numes, te k-colorabil dacă admite cel put, in o k-colorare.
c) Numărul
χ(G) = min{k ∈ N∗ | G este k-colorabil}
se numes, te numărul cromatic al grafului G.
Observat, ia 9.1.1. Condit, ia (9.1.1) din definit, ia anterioară exprimă faptul că orice două noduri dis-
tincte s, i adiacente trebuie colorate cu culori diferite.
Observat, ia 9.1.2. Pentru orice graf neorientat G = (V, E) cu n noduri avem

χ(G) ∈ {1, 2, . . . , n}

(G este n-colorabil, deoarece putem colora fiecare nod vi ∈ V cu culoarea i).


Mai mult, χ(G) = 1 dacă s, i numai dacă nu există muchii care să nu fie bucle (chiar E = ∅, dacă
G este graf simplu), iar χ(G) = n dacă s, i numai dacă Kn ⊆ G (chiar G = Kn , dacă G este graf
simplu).
Exemplul 9.1.1. Pentru graful G reprezentat ı̂n Figura 7.2.5, o 4-colorare este reprezentată ı̂n Figura
9.1.1 (cu culorile ROS, U=1, GALBEN=2, ALBASTRU=3, VERDE=4), iar o 3-colorare este reprezen-
tată ı̂n Figura 9.1.2.
Acest graf nu are 2-colorări (subgraful generat de submult, imea de noduri {1, 2, 3} este complet,
deci colorarea nodurilor din această submult, ime necesită 3 culori), deci are numărul cromatic χ(G) =
3.

96
TEMA 9. COLORĂRI ÎN GRAFURI 97

2 3

1 4

6 5

Figura 9.1.1:

2 3

1 4

6 5

Figura 9.1.2:

9.2 Colorarea muchiilor


Definit, ia 9.2.1. Fie G = (V, E) un graf neorientat s, i k ∈ N.
a) O k-colorare a muchiilor grafului G (o colorare a muchiilor grafului G cu cel mult
k culori) este o corespondent, ă c : E → {1, 2, . . . , k} ce asociază fiecărei muchii e ∈ E o culoare
unică c(e) ∈ {1, 2, . . . , k}, cu proprietatea că
c(e) 6= c(f ), ∀ e = [x, y], f = [u, v] ∈ E a.ı̂. e 6= f s, i {x, y} ∩ {u, v} =
6 ∅. (9.2.1)
b) Graful G se numes, te k-muchie-colorabil dacă admite cel put, in o k-colorare a muchiilor.
c) Numărul
χ′ (G) = min{k ∈ N | G este k-muchie-colorabil}
se numes, te numărul muchie-cromatic (indicele cromatic) al grafului G.
Observat, ia 9.2.1. Condit, ia (9.2.1) din definit, ia anterioară exprimă faptul că orice două muchii dis-
tincte care au (cel put, in) o extremitate comună trebuie colorate cu culori diferite.
Observat, ia 9.2.2. Pentru orice graf neorientat G = (V, E) cu m muchii avem
χ′ (G) ∈ {0, 1, . . . , m}
(G este m-muchie-colorabil, deoarece putem colora fiecare muchie ei ∈ E cu culoarea i).
Mai mult, χ′ (G) = 0 dacă s, i numai dacă E = ∅. Dacă G este graf simplu, atunci χ′ (G) = m dacă
s, i numai dacă m = 1 sau G = K1,m (graf stea) sau G = K3 .
TEMA 9. COLORĂRI ÎN GRAFURI 98

Exemplul 9.2.1. Pentru graful G reprezentat ı̂n Figura 7.2.5, o 5-colorare a muchiilor este reprezentată
ı̂n Figura 9.2.1 (cu culorile ROS, U=1, GALBEN=2, ALBASTRU=3, VERDE=4, GRI=5), iar o 4-
colorare a muchiilor este reprezentată ı̂n Figura 9.2.2.
Acest graf nu are 3-colorări ale muchiilor (muchiile [1, 2], [1, 3], [1, 5], [1, 6] au nodul 1 comun,
deci colorarea lor necesită 4 culori), deci are numărul muchie-cromatic χ′ (G) = 4.

2 3

1 4

6 5

Figura 9.2.1:

2 3

1 4

6 5

Figura 9.2.2:

Teorema 9.2.1 (Vizing). Fie G = (V, E) un graf neorientat simplu s, i

∆(G) = max d(x)


x∈V

gradul maxim al nodurilor din G. Atunci

χ′ (G) ∈ {∆(G), ∆(G) + 1}.

Demonstrat, ie. Din definit, ia lui ∆(G) rezultă că există un nod x ∈ V astfel ı̂ncât d(x) = ∆(G).
Atunci nodul x este extremitate pentru ∆(G) muchii din E, deci pentru colorarea acestor k muchii
trebuie folosite ∆(G) culori diferite, s, i astfel rezultă că

χ′ (G) ≥ ∆(G).

Rămâne de demonstrat că


χ′ (G) ≤ ∆(G) + 1,
TEMA 9. COLORĂRI ÎN GRAFURI 99

deci că graful G admite cel put, in o ∆(G) + 1-colorare a muchiilor.


Fie E = {e1 , e2 , . . . , em }, m ∈ N (unde E = ∅ pentru m = 0).
Demonstrăm prin induct, ie după i ∈ {0, 1, . . . , m} că graful part, ial

Gi = (V, {e1 , e2 , . . . , ei }) este ∆(G) + 1-muchie-colorabil (9.2.2)

(unde {e1 , e2 , . . . , ei } = ∅ pentru i = 0).


Pentru i = 0 avem Gi = (V, ∅), deci Gi este ∆(G) + 1-muchie-colorabil (fiind chiar 0-muchie-
colorabil!).
Presupunem acum că relat, ia (9.2.2) este adevărată pentru i − 1 s, i o demonstrăm pentru i (i ∈
{1, 2, . . . , m}). Fie c : {e1 , e2 , . . . , ei−1 } → {1, . . . , ∆(G) + 1} o ∆(G) + 1-colorare a muchiilor grafului
Gi−1 = (V, {e1 , e2 , . . . , ei−1 }) s, i fie ei = [x1 , y1 ]. Avem două cazuri.
Cazul 1) Există o culoare p1 ∈ {1, . . . , ∆(G) + 1} disponibilă atât pentru x1 cât s, i pentru y1
(prin culoare disponibilă pentru un nod ı̂nt, elegând o culoare care este diferită de toate culorile
muchiilor incidente cu acel nod). Atunci colorând muchia ei = [x1 , y1] cu culoarea p1 , adică luând
c(ei ) = p1 obt, inem că funct, ia c : {e1 , e2 , . . . , ei } → {1, . . . , ∆(G) + 1} este o ∆(G) + 1-colorare a
muchiilor grafului Gi .
Cazul 2) Nu există nicio culoare disponibilă atât pentru x1 cât s, i pentru y1 . Cum dGi−1 (y1 ) <
dG (y1 ) ≤ ∆(G), rezultă că există o culoare p1 ∈ {1, . . . , ∆(G) + 1} disponibilă pentru y1 . Conform
ipotezei cazului analizat, această culoare nu este disponibilă s, i pentru x1 , deci există o muchie
[x1 , y2 ] ∈ {e1 , e2 , . . . , ei−1 } colorată cu culoarea p1 . Avem două subcazuri.
Cazul 2.1) Există o culoare p2 ∈ {1, . . . , ∆(G) + 1} disponibilă atât pentru x1 cât s, i pentru y2 .
Atunci recolorând muchia [x1 , y2 ] cu culoarea p2 s, i colorând muchia ei = [x1 , y1 ] cu culoarea p1 , adică
luând 

p2 , dacă e = [x1 , y2 ],

c (e) = c(e), dacă e ∈ {e1 , . . . , ei−1 } \ {[x1 , y2 ]},


p1 , dacă e = [x1 , y1 ],
obt, inem o ∆(G) + 1-colorare, c′ , a muchiilor grafului Gi .
Cazul 2.2) Nu există nicio culoare disponibilă atât pentru x1 cât s, i pentru y2 . Cum dGi−1 (y2 ) ≤
dG (y2 ) ≤ ∆(G), rezultă că există o culoare p2 ∈ {1, . . . , ∆(G) + 1} disponibilă pentru y2 , deci p2 6= p1
(culoarea p1 a muchiei [x1 , y2 ] nu este disponibilă pentru y2 ). Conform ipotezei cazului analizat,
această culoare nu este disponibilă s, i pentru x1 , deci există o muchie [x1 , y3] ∈ {e1 , e2 , . . . , ei−1 }
colorată cu culoarea p2 . Din nou, avem două subcazuri.
Cazul 2.2.1) Există o culoare p3 ∈ {1, . . . , ∆(G) + 1} disponibilă atât pentru x1 cât s, i pentru y3 .
Atunci recolorând muchia [x1 , y3] cu culoarea p3 , muchia [x1 , y2 ] cu culoarea p2 s, i colorând muchia
ei = [x1 , y1] cu culoarea p1 , obt, inem o ∆(G) + 1-colorare a muchiilor grafului Gi .
Cazul 2.2.2) Nu există nicio culoare disponibilă atât pentru x1 cât s, i pentru y3 . Atunci culoarea
p1 (disponibilă pentru nodul y1 ) poate să fie sau să nu fie disponibilă pentru nodul y3 .
Dacă p1 nu este disponibilă pentru y3 , atunci cum dGi−1 (y3) ≤ dG (y3 ) ≤ ∆(G), rezultă că există
o culoare p3 ∈ {1, . . . , ∆(G) + 1} disponibilă pentru y3 , deci p3 6= p1 s, i p3 6= p2 (culoarea p2 a muchiei
[x1 , y3 ] nu este disponibilă pentru y3 ). Conform ipotezei cazului analizat, această culoare nu este
disponibilă s, i pentru x1 , deci există o muchie [x1 , y4 ] ∈ {e1 , e2 , . . . , ei−1 } colorată cu culoarea p3 .
Continuând acest procedeu, cum nodul x1 are un număr finit de muchii incidente ı̂n graful Gi ,
rezultă că avem următoarele două alternative.
Cazul I) Există k ≥ 1 astfel ı̂ncât pentru muchia [x1 , yk ] (egală cu ei pentru k = 1, respectiv
colorată cu culoarea pk−1 pentru k ≥ 2) există o culoare pk ∈ {1, . . . , ∆(G) + 1} disponibilă atât
pentru x1 cât s, i pentru yk . Atunci recolorând muchia [x1 , yk ] cu culoarea pk , muchia [x1 , yk−1] cu
TEMA 9. COLORĂRI ÎN GRAFURI 100

culoarea pk−1 , . . . , muchia [x1 , y2] cu culoarea p2 s, i colorând muchia ei = [x1 , y1 ] cu culoarea p1 ,
obt, inem o ∆(G) + 1-colorare a muchiilor grafului Gi .
Cazul II) În caz contrar, există k ≥ 3 astfel ı̂ncât pentru muchia [x1 , yk ] (colorată cu culoarea
pk−1 ) există j ≤ k − 2 astfel ı̂ncât culoarea pj , disponibilă pentru nodul yj (s, i cu care este colorată
muchia [x1 , yj+1]) este disponibilă s, i pentru yk . Fie k cel mai mic indice (adică primul) cu această
proprietate, deci culorile p1 , p2 , . . . , pk−1 (disponibile pentru nodurile y1 , y2 , . . ., respectiv yk−1 s, i cu
care sunt colorate muchiile [x1 , y2 ], [x1 , y3], . . ., respectiv [x1 , yk ]) sunt distincte două câte două, s, i
fie pk = pj , unde j ∈ {1, . . . , k − 2} este cel mai mic indice (adică primul) cu proprietatea că pj
este o culoare disponibilă pentru yk (deci culorile p1 , . . . , pj−1 nu sunt disponibile pentru yk ). Fie
p0 ∈ {1, . . . , ∆(G) + 1} o culoare disponibilă pentru nodul x1 (există, deoarece dGi−1 (x1 ) < dG (x1 ) ≤
∆(G)), deci p0 6∈ {p1 , . . . , pk−1 } (culorile p1 , . . . , pk−1 ale muchiilor [x1 , y2], . . ., respectiv [x1 , yk ] nu
sunt disponibile pentru x1 ).
Fie H graful part, ial al lui Gi−1 indus de muchiile colorate cu culorile p0 sau pj . Evident
[x1 , y1 ], [x1 , y2 ], . . . , [x1 , yj ] 6∈ E(H) (prima muchie este necolorată, iar celelalte au culorile p1 , . . . , pj−1 ,
diferite de p0 s, i de pj ), [x1 , yj+1] ∈ E(H) (având culoarea pj ) s, i [x1 , yj+2], . . . , [x1 , yk ] 6∈ E(H) (având
culorile pj+1 , . . . , pk−1, diferite de p0 s, i de pj ). Pentru orice nod v avem dH (v) ≤ 2 (printre muchiile
lui Gi−1 incidente cu v există cel mult câte o muchie colorată cu culoarea p0 , respectiv pj ). Astfel
componentele conexe ale lui H sunt noduri izolate, lant, uri elementare deschise (de lungime nenulă)
sau cicluri elementare de lungime pară. Cum dH (x1 ) = 1 (muchia [x1 , yj+1] are culoarea pj iar cu-
loarea p0 este disponibilă pentru x1 ) s, i dH (yj ) = 1 (culoarea pj este disponibilă pentru yj , iar culoarea
p0 nu este disponibilă pentru yj deoarece conform ipotezei cazului curent nu există culori disponibile
simultan pentru x1 s, i yj ), componentele conexe ale lui H ce cont, in nodurile x1 , respectiv yj sunt
lant, uri elementare deschise (de lungimi nenule), iar x1 , respectiv yj sunt extremităt, i pentru acestea.
Fie
µ = [yj = z1 , z2 , . . . , zs ]
lant, ul elementar deschis (de lungime nenulă) ce formează componenta conexă a lui H ce cont, ine
nodul yj , lanţ având muchiile colorate alternativ cu culorile p0 s, i pj (adică c([yj , z2 ]) = p0 , deoarece
nu există muchii colorate cu pj incidente cu yj , apoi c([z2 , z3 ]) = pj , c([z3 , z4 ]) = p0 , . . . ). Avem două
subcazuri.
Cazul II.1) x1 ∈ V (µ) (adică nodurile x1 s, i yj sunt ı̂n aceeas, i componentă conexă a lui H). Atunci
x1 este extremitate a lui µ iar muchia [x1 , yj+1] având culoarea pj este muchia incidentă cu x1 pe
lant, ul µ, adică zs = x1 s, i zs−1 = yj+1. Fie µ′ = [yj = z1 , z2 , . . . , zs−1 = yj+1 ] lant, ul obt, inut din µ prin
eliminarea ultimului nod, zs = x1 . Atunci recolorând muchia [x1 , yk ] cu culoarea pk = pj (disponibilă
pentru yk ), muchia [x1 , yk−1] cu culoarea pk−1 (disponibilă pentru yk−1), . . . muchia [x1 , yj+1] cu
culoarea pj+1 (disponibilă pentru yj+1 ), interschimbând culorile p0 s, i pj de-a lungul lant, ului µ′ ,
recolorând apoi muchia [x1 , yj ] cu culoarea p0 (devenită disponibilă pentru yj ), muchia [x1 , yj−1] cu
culoarea pj−1 (disponibilă pentru yj−1), . . . muchia [x1 , y2 ] cu culoarea p2 (disponibilă pentru y2 )
s, i colorând muchia [x1 , y1] cu culoarea p1 (disponibilă pentru y1 ), obt, inem o ∆(G) + 1-colorare a
muchiilor grafului Gi .
Cazul II.2) x1 6∈ V (µ) (adică nodurile x1 s, i yj sunt ı̂n componente conexe diferite ale lui H).
Atunci interschimbând culorile p0 s, i pj de-a lungul lant, ului µ, recolorând apoi muchia [x1 , yj ] cu
culoarea p0 (devenită disponibilă pentru yj ), muchia [x1 , yj−1] cu culoarea pj−1 (disponibilă pentru
yj−1), . . . muchia [x1 , y2 ] cu culoarea p2 (disponibilă pentru y2 ) s, i colorând muchia [x1 , y1] cu culoarea
p1 (disponibilă pentru y1 ), obt, inem din nou o ∆(G) + 1-colorare a muchiilor grafului Gi .
Demonstrat, ia prin induct, ie a relat, iei (9.2.2) este ı̂ncheiată.
Aplicând această relat, ie pentru i = m rezultă că graful Gm = (V, {e1 , e2 , . . . , em }) = G este
∆(G) + 1-muchie-colorabil.
TEMA 9. COLORĂRI ÎN GRAFURI 101

Observat, ia 9.2.3. Demonstrat, ia teoremei anterioare este constructivă, indicând un algoritm de de-
terminare a unei ∆(G) + 1-colorări a muchiilor unui graf neorientat simplu G = (V, E).
Exemplul 9.2.2. Fie graful complet K5 , reprezentat ı̂n Figura 9.2.3.

5 2

4 3

Figura 9.2.3:

Toate nodurile au gradul 4, deci ∆(K5 ) = 4. Conform teoremei anterioare, numărul său muchie-
cromatic verifică relat, ia χ′ (K5 ) ∈ {4, 5}. Dacă am avea trei muchii colorate cu o aceeas, i culoare,
atunci cele 6 extremităt, i ale acestor muchii ar trebui să fie noduri distincte, fals (graful are doar 5
noduri). Deci cu o aceeas, i culoare pot fi colorate cel mult două muchii. Cum graful are C52 = 10
muchii, rezultă că pentru colorarea lor sunt necesare cel put, in 5 culori. Astfel obt, inem că

χ′ (K5 ) = 5.

Aplicând algoritmul din demonstrat, ia teoremei anterioare, obt, inem colorarea muchiilor cu 5 culori
(ROS, U=1, GALBEN=2, ALBASTRU=3, VERDE=4, GRI=5) evident, iată pas cu pas ı̂n Figurile
9.2.4-9.2.13.

1 1

5 2 5 2

4 3 4 3

Figura 9.2.4: Figura 9.2.5:


TEMA 9. COLORĂRI ÎN GRAFURI 102

1 1

5 2 5 2

4 3 4 3

Figura 9.2.6: Figura 9.2.7:

1 1

5 2 5 2

4 3 4 3

Figura 9.2.8: Figura 9.2.9:

1 1

5 2 5 2

4 3 4 3

Figura 9.2.10: Figura 9.2.11:


TEMA 9. COLORĂRI ÎN GRAFURI 103

1 1

5 2 5 2

4 3 4 3

Figura 9.2.12: Figura 9.2.13:

Remarcăm că la colorarea muchiei [3, 5] (pornind de la colorarea din Figura 9.2.11), neavând o
culoare disponibilă (atât pentru nodul 3 cât s, i pentru nodul 5), s-a procedat astfel:

• s-a determinat prima culoare disponibilă pentru nodul 5, aceasta a fost p1 = 1 (ROS, U);

• s-a determinat muchia incidentă cu nodul 3 colorată cu p1 = 1 (ROS, U), aceasta a fost [3, 4];

• a existat o culoare disponibilă atât pentru nodul 3 cât s, i pentru nodul 4, aceasta a fost p2 = 4
(VERDE);

• s-a recolorat muchia [3, 4] cu culoarea p2 = 4 (VERDE) s, i s-a colorat muchia [3, 5] cu culoarea
p1 = 1 (ROS, U), obt, inând colorarea din Figura 9.2.12.

Analog, la colorarea muchiei [4, 5] (pornind de la colorarea din Figura 9.2.12), neavând o culoare
disponibilă (atât pentru nodul 4 cât s, i pentru nodul 5), s-a procedat astfel:

• s-a determinat prima culoare disponibilă pentru nodul 5, aceasta a fost p1 = 2 (GALBEN);

• s-a determinat muchia incidentă cu nodul 4 colorată cu p1 = 2 (GALBEN), aceasta a fost [4, 2];

• nu a existat o culoare disponibilă atât pentru nodul 4 cât s, i pentru nodul 2;

• s-a determinat prima culoare disponibilă pentru nodul 2, aceasta a fost p2 = 4 (VERDE);

• s-a determinat muchia incidentă cu nodul 4 colorată cu p2 = 4 (VERDE), aceasta a fost [4, 3];

• a existat o culoare disponibilă atât pentru nodul 4 cât s, i pentru nodul 3, aceasta a fost p3 = 5
(GRI);

• s-au recolorat muchia [4, 3] cu culoarea p3 = 5 (GRI) s, i muchia [4, 2] cu culoarea p2 = 4


(VERDE) s, i s-a colorat muchia [4, 5] cu culoarea p1 = 2 (GALBEN), obt, inând colorarea finală
din Figura 9.2.13.

Observat, ia 9.2.4. Teorema 9.2.1 nu rămâne valabilă pentru multigrafuri. De exemplu, multigraful
G reprezentat ı̂n Figura 9.2.14 are ∆(G) = 4, dar numărul său muchie-cromatic este χ′ (G) = 6,
deoarece oricare două dintre cele 6 muchii ale sale au cel put, in o extremitate comună.
TEMA 9. COLORĂRI ÎN GRAFURI 104

2 3

Figura 9.2.14:

Propozit, ia 9.2.1. Pentru orice n ∈ N, n ≥ 2 avem



′ n, dacă n este impar,
χ (Kn ) =
n − 1, dacă n este par.

Demonstrat, ie. În graful complet Kn toate nodurile au gradul n − 1, deci ∆(Kn ) = n − 1. Conform
Teoremei lui Vizing rezultă că
χ′ (Kn ) ∈ {n − 1, n}.
n(n − 1) n+1
Pentru n impar, cum graful Kn are Cn2 = muchii s, i nu putem colora muchii cu o
2 2
n+1
aceeas, i culoare (deoarece ı̂n caz contrar cele 2 · = n + 1 extremităt, i ale acestor muchii ar trebui
2
să fie noduri distincte, fals), deci pentru colorarea muchiilor orice culoare este folosită la cel mult
n−1 n(n − 1) n − 1
muchii, rezultă că sunt necesare cel put, in : = n culori s, i astfel χ′ (Kn ) = n.
2 2 2
Vom construi ı̂n continuare câte o n-muchie-colorare pentru Kn s, i pentru Kn+1 , unde n ∈ N∗ este
impar, ceea ce ı̂ncheie demonstrat, ia.
Fie V (Kn ) = {v1 , v2 , . . . , vn }, V (Kn+1 ) = {v1 , v2 , . . . , vn , vn+1 }, s, i fie {1, 2, . . . , n} mult, imea
culorilor. Pentru graful Kn , colorăm fiecare muchie [vi , vj ] (i 6= j) cu culoarea p pentru care
p ≡ (i + j) mod n, adică

(i + j) mod n, dacă i + j 6≡ 0 mod n,
c([vi , vj ]) =
n, dacă i + j ≡ 0 mod n,
pentru orice i, j ∈ {1, 2, . . . , n}, i 6= j. Colorarea este corectă, deoarece pentru orice două muchii
[vi , vj ] 6= [vi , vk ] avem j 6= k, j, k ∈ {1, 2, . . . , n}, deci j 6≡ k mod n, deci i + j 6≡ i + k mod n, adică
c([vi , vj ]) 6= c([vi , vk ]).
Extindem această colorare la o colorare a grafului Kn+1 , prin colorarea s, i a muchiilor [vi , vn+1 ], i ∈
{1, 2, . . . , n}. Pentru aceasta, observăm că pentru orice i ∈ {1, 2, . . . , n}, culoarea pi ∈ {1, 2, . . . , n}
dată de relat, ia pi ≡ 2i mod n este disponibilă pentru nodul vi . Într-adevăr, ı̂n caz contrar ar exista
j ∈ {1, 2, . . . , n}, j 6= i astfel ı̂ncât c[vi , vj ] = pi , prin urmare i+ j ≡ pi ≡ 2i mod n, deci i ≡ j mod n,
fals. Colorăm fiecare muchie [vi , vn+1 ] cu culoarea pi , adică

2i mod n, dacă i ∈ {1, 2, . . . , n − 1},
c([vi , vn+1 ]) =
n, dacă i = n.
Colorarea este corectă, deoarece pentru orice două muchii [vi , vn+1 ] 6= [vj , vn+1 ] avem i 6= j, i, j ∈
{1, 2, . . . , n}, deci i 6≡ j mod n, deci 2i 6≡ 2j mod n (deoarece n este impar), adică c([vi , vn+1 ]) 6=
c([vj , vn+1 ]).
TEMA 9. COLORĂRI ÎN GRAFURI 105

Exemplul 9.2.3. Conform propozit, iei anterioare, fiecare dintre grafurile complete K7 s, i K8 are numărul
muchie-cromatic egal cu 7, adică χ′ (K7 ) = χ′ (K8 ) = 7. Conform demonstrat, iei propozit, iei anterioare,
considerând V (K7 ) = {1, 2, . . . , 7} s, i V (K8 ) = {1, 2, . . . , 8}, o colorare cu 7 culori a muchiilor lui K7
este dată de:

• colorăm cu culoarea 1 muchiile [1, 7], [2, 6], [3, 5];

• colorăm cu culoarea 2 muchiile [2, 7], [3, 6], [4, 5];

• colorăm cu culoarea 3 muchiile [1, 2], [3, 7], [4, 6];

• colorăm cu culoarea 4 muchiile [1, 3], [4, 7], [5, 6];

• colorăm cu culoarea 5 muchiile [1, 4], [2, 3], [5, 7];

• colorăm cu culoarea 6 muchiile [1, 5], [2, 4], [6, 7];

• colorăm cu culoarea 7 muchiile [1, 6], [2, 5], [3, 4],

din care se obt, ine s, i colorarea cu 7 culori a muchiilor lui K8 dată de:

• colorăm cu culoarea 1 muchiile [1, 7], [2, 6], [3, 5], [4, 8];

• colorăm cu culoarea 2 muchiile [2, 7], [3, 6], [4, 5], [1, 8];

• colorăm cu culoarea 3 muchiile [1, 2], [3, 7], [4, 6], [5, 8];

• colorăm cu culoarea 4 muchiile [1, 3], [4, 7], [5, 6], [2, 8];

• colorăm cu culoarea 5 muchiile [1, 4], [2, 3], [5, 7], [6, 8];

• colorăm cu culoarea 6 muchiile [1, 5], [2, 4], [6, 7], [3, 8];

• colorăm cu culoarea 7 muchiile [1, 6], [2, 5], [3, 4], [7, 8].
Tema 10

Grafuri bipartite

10.1 Definit, ii s, i exemple


Definit, ia 10.1.1. Un graf G = (V, E) se numes, te bipartit dacă există o partit, ie V = X ∪ Y
(X 6= ∅, Y 6= ∅, X ∩ Y = ∅) a.ı̂. fiecare muchie sau arc al grafului are o extremitate ı̂n X s, i cealaltă
extremitate ı̂n Y .
Exemplul 10.1.1. Graful reprezentat ı̂n Figura 7.2.2 este bipartit, luând partit, ia nodurilor V =
{1, 3, 5} ∪ {2, 4, 6}. O altă reprezentare a acestui graf bipartit, cu evident, ierea partit, iei nodurilor
prin as, ezarea ı̂n stânga a nodurilor din partea X = {1, 3, 5} s, i ı̂n dreapta a nodurilor din partea
Y = {2, 4, 6}, este dată ı̂n Figura 10.1.1.

1 2

3 4

5 6

Figura 10.1.1:

10.2 Caracterizarea grafurilor bipartite


Teorema 10.2.1 (de caracterizare a grafurilor bipartite). Un graf cu n ≥ 2 noduri este bipartit
dacă s, i numai dacă nu cont, ine cicluri de lungime impară.
Demonstrat, ie. ”⇒” Fie G = (V, E) un graf bipartit având partit, ia nodurilor V = X ∪ Y ca ı̂n
definit, ia anterioară. Orice ciclu al grafului G are una din formele [x1 , y1, x2 , y2 , . . . , xk , yk , x1 ] sau
[y1 , x1 , y2, x2 , . . . , yk , xk , y1 ] cu x1 , x2 , . . . , xk ∈ X s, i y1 , y2 , . . . , yk ∈ Y , deci are lungimea 2k.
”⇐” Fie G = (V, E) un graf cu n ≥ 2 noduri ce nu cont, ine cicluri de lungime impară. Demonstrăm
că graful G este bipartit ı̂n două etape.

106
TEMA 10. GRAFURI BIPARTITE 107

Etapa 1) Presupunem că graful G este conex. Fie v ∈ V un nod arbitrar fixat. Pentru orice nod
x ∈ V definim numărul d(v, x) ∈ N prin

d(v, x) = min{l(µ)|µ este lant, de la v la x ı̂n G},

unde l(µ) reprezintă lungimea lant, ului µ. Definit, ia este corectă, deoarece graful este conex. Pentru
grafuri neorientate d(v, x) se numes, te distant, a de la v la x. Fie

X = {x ∈ V |d(v, x) = număr par} s, i Y = {x ∈ V |d(v, x) = număr impar}.

Evident, V = X ∪ Y s, i X ∩ Y = ∅. Deoarece d(v, v) = 0 rezultă că v ∈ X, deci X 6= ∅. Fie v1


un nod vecin cu v, v1 6= v (există, deoarece graful este conex s, i are cel put, in două noduri). Atunci
d(v, v1 ) = 1, deci v1 ∈ Y s, i astfel Y 6= ∅.
Demonstrăm prin reducere la absurd că orice muchie (sau arc) a grafului are o extremitate ı̂n X
s, i cealaltă extremitate ı̂n Y s, i astfel va rezulta că graful este bipartit. Fie [x, y] ∈ E o muchie (sau
arc) arbitrar fixată. Fie µ1 un lant, de lungime minimă de la v la x s, i µ2 un lant, de lungime minimă
de la v la y, deci l(µ1 ) = d(v, x) s, i l(µ2 ) = d(v, y). Evident, lant, urile µ1 s, i µ2 sunt elementare.
Presupunem prin absurd că x, y ∈ X sau x, y ∈ Y , adică numerele d(v, x) s, i d(v, y) au aceeas, i
paritate. Atunci [x, y] nu apart, ine lant, ului µ1 , deoarece ı̂n caz contrar y ar fi penultimul nod al
acestui lant, s, i cum orice sublant, (port, iune) al unui lant, de lungime minimă este un lant, de lungime
minimă ı̂ntre extremităt, ile sale am avea d(v, y) = d(v, x) − 1, fals. Analog, [x, y] nu apart, ine nici
lant, ului µ2 . Fie
µ = [v, . . . , x, y, . . . , v]
lant, ul ı̂nchis obt, inut parcurgând ı̂ntâi lant, ul µ1 de la v la x, apoi muchia [x, y] s, i apoi lant, ul µ2 de
la y la v. Avem

l(µ) = l(µ1 ) + 1 + l(µ2 ) = d(v, x) + 1 + d(v, y) = număr impar.

Deoarece muchia [x, y] nu apart, ine lant, urilor µ1 s, i µ2 , rezultă că prin eliminarea din lant, ul ı̂nchis
µ a eventualelor port, iuni comune L1 , . . . , Lr ale lant, urilor µ1 s, i µ2 rămâne o mult, ime nevidă de
cicluri (elementare) muchie-disjuncte C1 , . . . , Cs (iar muchia [x, y] apart, ine unuia din aceste cicluri).
Folosind această descompunere, lungimea lant, ului ı̂nchis µ poate fi scrisă sub forma

l(µ) = 2l(L1 ) + · · · + 2l(Lr ) + l(C1 ) + · · · + l(Cs ).

Cum l(µ) este un număr impar, rezultâ câ l(C1 ) + · · · + l(Cs ) = număr impar, deci cel put, in unul
din ciclurile C1 , . . . , Cs are lungimea impară, contradict, ie cu ipoteza. Demonstrat, ia prin reducere la
absurd este ı̂ncheiată.
Etapa 2) Fie acum G un graf oarecare s, i G1 = (V1 , E1 ), . . . , Gk = (Vk , Ek ) componentele sale
conexe. Deoarece G nu cont, ine cicluri de lungime impară, rezultă că s, i componentele sale conexe
G1 , . . . , Gk au această proprietate. Conform etapei 1) rezultă că toate componentele conexe Gi cu cel
put, in două noduri sunt grafuri bipartite. Pentru fiecare astfel de componentă conexă, fie Vi = Xi ∪ Yi
partit, ia corespunzătoare grafului bipartit Gi . Dacă există s, i componente conexe Gi cu un singur nod
(adică card Vi = 1 s, i Ei = ∅, deoarece Gi nu cont, ine bucle, buclele fiind cicluri de lungime 1), atunci
pentru fiecare astfel de componentă conexă definim Xi = Vi , Yi = ∅ sau Yi = Vi , Xi = ∅. Fie

X = X1 ∪ · · · ∪ Xk s, i Y = Y1 ∪ · · · ∪ Yk .

Atunci V = X ∪ Y este o partit, ie s, i fiecare muchie sau arc al grafului G are o extremitate ı̂n X s, i
cealaltă extremitate ı̂n Y , deci graful G este bipartit.
TEMA 10. GRAFURI BIPARTITE 108

Exemplul 10.2.1. Graful reprezentat ı̂n Figura 7.2.1 nu este bipartit, deoarece cont, ine cicluri de
lungime impară (de exemplu ciclul [1, 2, 3, 1] de lungime 3).
Corolarul 10.2.1. Orice graf bipartit conex G = (V, E) are o unică partit, ie V = X ∪ Y ce verifică
Definit, ia 10.1.1.
Demonstrat, ie. Pentru un nod v arbitrar fixat, submult, imile X s, i Y definite ı̂n etapa 1) a demonstrat, iei
teoremei anterioare determină unica partit, ie cu proprietatea că v ∈ X. Într-adevăr, fie V = X ′ ∪ Y ′
o partit, ie arbitrară ce verifică Definit, ia 10.1.1 s, i proprietatea v ∈ X ′ . Pentru orice nod x ∈ X există
µ = [v = v0 , v1 , . . . , v2k = x] lant, de lungime minimă de la v la x, deci avem, succesiv:

v = v0 ∈ X ′ , v1 ∈ Y ′ , v2 ∈ X ′ , . . . , v2k = x ∈ X ′ .

Analog, pentru orice nod y ∈ Y există µ = [v = w0 , w1 , . . . , w2p+1 = y] lant, de lungime minimă de la


v la y, deci avem, succesiv:

v = w0 ∈ X ′ , w1 ∈ Y ′ , w2 ∈ X ′ , . . . , w2p+1 = y ∈ Y ′ .

Rezultă că X ⊆ X ′ s, i Y ⊆ Y ′ . Cum Y = V \ X s, i Y ′ = V \ X ′ rezultă că X = X ′ s, i Y = Y ′ .


Observat, ia 10.2.1. Demonstrat, ia teoremei anterioare este constructivă, indicând următorul algoritm
de determinare dacă un graf G este bipartit s, i, ı̂n caz afirmativ, a unei partit, ii V = X ∪ Y a
nodurilor sale ce verifică Definit, ia 10.1.1.
• Se determină componentele conexe G1 , . . . , Gk .

• Pentru fiecare componentă Gi = (Vi , Ei ) cu cel put, in două noduri, se parcurg următoarele
etape:

– Se fixează un nod vi ∈ Vi .
– Se calculează distant, ele d(vi , x) pentru toate nodurile x ∈ Vi . De exemplu,

d(vi , x) = lungimea lant, ului elementar unic de la vi la x ı̂n arborele BF (vi )

(corespunzător parcurgerii BF a grafului neorientat G pornind din nodul vi ; dacă graful


G este orientat se parcurge graful neorientat obt, inut prin eliminarea orientării arcelor!).
– Se calculează mult, imile

Xi = {x ∈ Vi |d(vi , x) = număr par} s, i Yi = {x ∈ Vi |d(vi , x) = număr impar}.

– Dacă există o muchie (sau arc) de forma [x, y] ∈ Ei a.ı̂. x, y ∈ Xi sau x, y ∈ Yi , atunci
componenta Gi nu este graf bipartit, deci nici graful G nu este bipartit s, i algoritmul se
ı̂ncheie.
– În caz contrar componenta Gi este graf bipartit s, i Vi = Xi ∪Yi este partit, ia corespunzătoare
acestui graf bipartit.

• Pentru fiecare componentă Gi = (Vi , Ei ) cu câte un singur nod, adică Vi = {vi }, se parcurg
următoarele etape:

– Dacă [vi , vi ] ∈ Ei (buclă), atunci graful G nu este bipartit s, i algoritmul se ı̂ncheie.


– În caz contrar se calculează mult, imile Xi = Vi , Yi = ∅ pentru prima componentă Gi s, i
Yi = Vi , Xi = ∅ pentru următoarele componente Gi (se asigură astfel că X 6= ∅ s, i Y 6= ∅).
TEMA 10. GRAFURI BIPARTITE 109

• Toate componentele conexe cu cel put, in două noduri sunt grafuri bipartite, iar toate compo-
nentele conexe cu câte un singur nod nu cont, in bucle. Atunci graful G este bipartit s, i o partit, ie
corespunzătoare este V = X ∪ Y , cu X = X1 ∪ · · · ∪ Xk s, i Y = Y1 ∪ · · · ∪ Yk .
Exemplul 10.2.2. Fie graful reprezentat ı̂n Figura 7.1.2. Aplicăm algoritmul din observat, ia anterioară.
Fixând nodul v = 1 (pentru singura componentă conexă), obt, inem distant, ele

d(1, 1) = 0, d(1, 2) = d(1, 5) = 1, d(1, 3) = d(1, 6) = 2, d(1, 4) = d(1, 7) = 3, d(1, 8) = 4,

deci X = {1, 3, 6, 8} s, i Y = {2, 4, 5, 7}. Nu există nicio muchie [x, y] a.ı̂. x, y ∈ X sau x, y ∈ Y , deci
graful dat este bipartit s, i unica partit, ie corespunzătoare (ce verifică Definit, ia 10.1.1) este V = X ∪Y .
O reprezentare a acestui graf bipartit, cu evident, ierea partit, iei nodurilor, este dată ı̂n Figura 10.2.1.

1 2

3 4

6 5

8 7

Figura 10.2.1:

Propozit, ia 10.2.1. Fie G = (V, E) un graf neorientat bipartit s, i V = X ∪ Y o partit, ie ce verifică


Definit, ia 10.1.1. Dacă G este hamiltonian, atunci

card (X) = card (Y ).

Demonstrat, ie. Fie C = [x1 , x2 , . . . , xn , x1 ] un ciclu hamiltonian ı̂n graful G, deci V = {x1 , x2 , . . . , xn }.
Conform Teoremei 10.2.1 rezultă că n este par. Fie n = 2k. Avem două cazuri.
Cazul 1) x1 ∈ X. Deoarece graful este bipartit, avem, succesiv, x2 ∈ Y , x3 ∈ X, . . . , x2k−1 ∈ X,
x2k = xn ∈ Y . Rezultă că

X = {x1 , x3 , . . . , x2k−1 }, Y = {x2 , x4 , . . . , x2k },

deci card (X) = card (Y ) = k.


Cazul 2) x1 ∈ Y . Deoarece graful este bipartit, avem, succesiv, x2 ∈ X, x3 ∈ Y , . . . , x2k−1 ∈ Y ,
x2k = xn ∈ X, deci
X = {x2 , x4 , . . . , x2k }, Y = {x1 , x3 , . . . , x2k−1 },
deci din nou card (X) = card (Y ) = k.

10.3 Colorarea grafurilor bipartite


Propozit, ia 10.3.1. Un graf neorientat cu n ≥ 2 noduri este bipartit dacă s, i numai dacă este 2-
colorabil.
TEMA 10. GRAFURI BIPARTITE 110

Demonstrat, ie. ”⇒” Fie G = (V, E) un graf neorientat bipartit având partit, ia nodurilor V = X ∪ Y
ca ı̂n Definit, ia 10.1.1. Fie funct, ia
(
1, dacă x ∈ X,
c : V → {1, 2}, c(x) =
2, dacă x ∈ Y.

Pentru orice muchie [x, y] ∈ E, deoarece graful G este bipartit, avem două posibilităt, i:
1) x ∈ X, y ∈ Y , deci c(x) = 1 6= 2 = c(y);
2) x ∈ Y, y ∈ X, deci c(x) = 2 6= 1 = c(y).
Rezultă că funct, ia c este o 2-colorare a lui G.
”⇐” Fie G = (V, E) un graf neorientat 2-colorabil, cu n ≥ 2 noduri.
Dacă E = ∅, atunci este evident că graful este bipartit (luând, de exemplu, X = {v} s, i Y =
V \ {v}, cu v ∈ V ).
Considerăm ı̂n continuare că E 6= ∅. Fie c : V → {1, 2} o 2-colorare a lui G. Fie

X = {x ∈ V | c(x) = 1}, Y = {x ∈ V | c(x) = 2}.

Evident, V = X ∪ Y s, i X ∩ Y = ∅.
Pentru orice muchie [x, y] ∈ E, deoarece c este o 2-colorare a lui G, avem două posibilităt, i:
1) c(x) = 1, c(y) = 2, deci x ∈ X, y ∈ Y ;
2) c(x) = 2, c(y) = 1, deci x ∈ Y, y ∈ X.
Rezultă că fiecare muchie a grafului G are o extremitate ı̂n X s, i cealaltă extremitate ı̂n Y . Graful
G cont, ine cel put, in o muchie, deci X 6= ∅ s, i Y 6= ∅. Rezultă că graful G este bipartit.
Observat, ia 10.3.1. Conform demonstrat, iei anterioare, o 2-colorare a unui graf neorientat bipartit
avănd partit, ia mult, imii nodurilor V = X ∪ Y (ce verifică Definit, ia 10.1.1) se obt, ine colorı̂nd nodurile
din X cu o culoare s, i nodurile din Y cu cealaltă culoare.
Mai mult, dacă graful bipartit este s, i conex, atunci conform Corolarului 10.2.1, partit, ia V = X ∪Y
ce verifică Definit, ia 10.1.1 este unică, deci graful are exact două 2-colorări s, i anume colorăm nodurile
din X cu culoarea 1 s, i nodurile din Y cu culoarea 2, sau invers (colorăm nodurile din X cu culoarea
2 s, i nodurile din Y cu culoarea 1).
Corolarul 10.3.1. Fie G = (V, E) un graf neorientat cu n ≥ 2 noduri s, i E 6= ∅. Atunci G este
bipartit dacă s, i numai dacă χ(G) = 2.
Demonstrat, ie. ”⇒” Presupunem că G este bipartit. Conform propozit, iei anterioare, rezultă că G
este 2-colorabil. Cum G are cel put, in o muchie, iar aceasta nu este o buclă (din definit, ia grafului
bipartit, un astfel de graf nu cont, ine bucle), rezultă că G nu este 1-colorabil. Deci avem χ(G) = 2.
”⇐” Presupunem că χ(G) = 2. Rezultă că G este 2-colorabil. Conform propozit, iei anterioare
rezultă că G este bipartit.
Exemplul 10.3.1. Considerăm graful bipartit complet K3,3 , reprezentat ı̂n Figura 10.3.1. Fiind conex,
unica partit, ie a nodurilor sale ce verifică Definit, ia 10.1.1 este V = {1, 2, 3} ∪ {4, 5, 6}.
TEMA 10. GRAFURI BIPARTITE 111

1 4

2 5

3 6

Figura 10.3.1:

Conform corolarului anterior, numărul său cromatic este χ(K3,3 ) = 2.


Conform obervat, iei anterioare, el are exact două 2-colorări, evident, iate ı̂n Figurile 10.3.2 s, i 10.3.3.

1 4 1 4

2 5 2 5

3 6 3 6

Figura 10.3.2: Figura 10.3.3:

Teorema 10.3.1 (König). Fie G = (V, E) un graf neorientat bipartit s, i

∆(G) = max d(x)


x∈V

gradul maxim al nodurilor din G. Atunci numărul muchie-cromatic al grafului G verifică egalitatea

χ′ (G) = ∆(G).

Demonstrat, ie. Fie k = ∆(G). Din definit, ia lui ∆(G) rezultă că există un nod x ∈ V astfel ı̂ncât
d(x) = ∆(G) = k. Atunci nodul x este extremitate pentru k muchii din E, deci pentru colorarea
acestor k muchii trebuie folosite k culori diferite, s, i astfel rezultă că

χ′ (G) ≥ k. (10.3.1)

Fie E = {e1 , e2 , . . . , em }, m ∈ N (unde E = ∅ pentru m = 0).


Demonstrăm prin induct, ie după i ∈ {0, 1, . . . , m} că graful part, ial

Gi = (V, {e1 , e2 , . . . , ei }) este k-muchie-colorabil (10.3.2)

(unde {e1 , e2 , . . . , ei } = ∅ pentru i = 0).


Pentru i = 0 avem Gi = (V, ∅), deci Gi este k-muchie-colorabil (fiind chiar 0-muchie-colorabil!).
Presupunem acum că relat, ia (10.3.2) este adevărată pentru i − 1 s, i o demonstrăm pentru i
(i ∈ {1, 2, . . . , m}). Fie c : {e1 , e2 , . . . , ei−1 } → {1, . . . , k} o k-colorare a muchiilor grafului Gi−1 =
TEMA 10. GRAFURI BIPARTITE 112

(V, {e1 , e2 , . . . , ei−1 }) s, i fie ei = [xi , yi ]. Muchia ei = [xi , yi ] trebuie colorată cu o culoare diferită de
culorile muchiilor din Gi−1 incidente cu xi sau cu yi . Fie
F1 = {ej | j ∈ {1, . . . , i − 1}, ej incidentă cu xi }, F2 = {ej | j ∈ {1, . . . , i − 1}, ej incidentă cu yi }.
Avem două cazuri.
Cazul 1) {1, . . . , k} \ {c(ej ) | ej ∈ F1 ∪ F2 } =
6 ∅, adică există (cel put, in) o culoare p ∈ {1, . . . , k}
astfel ı̂ncât p 6= c(ej ) pentru orice muchie ej ∈ F1 ∪ F2 (adică muchie din Gi−1 incidentă cu xi sau cu
yi ). Atunci luând
c(ei ) = p
(adică se colorează muchia ei cu culoarea disponibilă, p) obt, inem că funct, ia c : {e1 , e2 , . . . , ei } →
{1, . . . , k} este o k-colorare a muchiilor grafului Gi .
Cazul 2) {c(ej ) | ej ∈ F1 ∪ F2 } = {1, . . . , k}, adică nu există nicio culoare diferită de culorile
muchiilor din Gi−1 incidente cu xi sau cu yi . Cum ei = [xi , yi ] 6∈ F1 ∪ F2 , rezultă că avem
card (F1 ) < dG (xi ) ≤ k, card (F2 ) < dG (yi ) ≤ k,
deci există (cel put, in) o culoare p1 ∈ {1, . . . , k} astfel ı̂ncât p1 6= c(ej ) pentru orice muchie ej ∈ F1
(adică muchie din Gi−1 incidentă cu xi ) s, i (cel put, in) o culoare p2 ∈ {1, . . . , k} astfel ı̂ncât p2 6= c(ej )
pentru orice muchie ej ∈ F2 (adică muchie din Gi−1 incidentă cu yi ). Conform ipotezei acestui caz,
p1 6= p2 . Fie H graful part, ial al lui Gi−1 indus de muchiile colorate cu culorile p1 sau p2 . Evident,
pentru orice nod v avem dH (v) ≤ 2 (printre muchiile lui Gi−1 incidente cu v există cel mult câte o
muchie colorată cu culoarea p1 , respectiv p2 ). Astfel componenta conexă a lui H ce cont, ine nodul yi
este un lant, elementar deschis de forma
µ = [yi = z1 , z2 , . . . , zs ]
ce are muchiile colorate alternativ cu culorile p1 s, i p2 (adică c([yi , z2 ]) = p1 , deoarece nu există muchii
colorate cu p2 incidente cu yi , apoi c([z2 , z3 ]) = p2 , c([z3 , z4 ]) = p1 , . . . ).
Dacă am avea că xi ∈ V (µ), atunci sublant, ul µ′ al lui µ cuprins ı̂ntre yi s, i xi ar ı̂ncepe cu muchia
[yi , z2 ] colorată cu culoarea p1 s, i s-ar ı̂ncheia cu o muchie [zt , xi ] colorată cu culoarea p2 (deoarece nu
există muchii colorate cu p1 incidente cu xi ). Din alternant, a culorilor p1 s, i p2 de-a lungul sublant, ului
µ′ , ar rezulta că µ′ are un număr par de muchii, s, i atunci ciclul C = [yi = z1 , z2 , . . . , zt , xi , yi ] (obt, inut
prin adăugarea muchiei ei = [xi , yi ] la sublant, ul µ′ ) ar fi un ciclu de lungime impară ı̂n graful bipartit
G, contradict, ie cu Teorema 10.2.1. Deci xi 6∈ V (µ).
Interschimbând culorile p1 s, i p2 de-a lungul lant, ului µ s, i colorând apoi muchia ei = [xi , yi ] cu
culoarea p1 (posibil, deoarece după interschimbare nicio muchie din Gi−1 incidentă cu xi sau cu yi
nu mai este colorată cu p1 ), adică luând colorarea c′ : {e1 , e2 , . . . , ei } → {1, . . . , k} definită prin


 p1 , dacă e ∈ E(µ), c(e) = p2 ,

p , dacă e ∈ E(µ), c(e) = p ,
2 1
c′ (e) =

c(e), dacă e ∈ {e1 , . . . , ei−1 } \ E(µ),


p1 , dacă e = ei ,
obt, inem o k-colorare, c′ , a muchiilor grafului Gi . Demonstrat, ia prin induct, ie a relat, iei (10.3.2) este
ı̂ncheiată.
Aplicând această relat, ie pentru i = m rezultă că graful Gm = (V, {e1 , e2 , . . . , em }) = G este
k-muchie-colorabil, deci
χ′ (G) ≤ k. (10.3.3)
Din relat, iile (10.3.1) s, i (10.3.3) rezultă că χ′ (G) = k, deci că χ′ (G) = ∆(G).
TEMA 10. GRAFURI BIPARTITE 113

Observat, ia 10.3.2. Demonstrat, ia teoremei anterioare este constructivă, indicând următorul algoritm
de determinare a numărului muchie-cromatic s, i a unei colorări a muchiilor cu număr
minim de culori pentru graful bipartit G = (V, E):
• Se determină numărul muchie-cromatic χ′ (G) = k, egal cu gradul maxim al nodurilor, k =
∆(G) = max d(x); mult, imea culorilor va fi {1, 2, . . . , k}.
x∈V

• Pentru fiecare muchie e = [x, y] a grafului, se actualizează colorarea curentă astfel:


– Se verifică dacă există o culoare disponibilă pentru muchia e, adică o culoare p nefolosită
de nicio muchie incidentă cu nodul x sau cu nodul y.
– Dacă DA, se colorează muchia e cu culoarea disponibilă p.
– În caz contrar, se parcurg următoarele subetape:
∗ Se determină o culoare p1 nefolosită de nicio muchie incidentă cu nodul x.
∗ Se determină o culoare p2 nefolosită de nicio muchie incidentă cu nodul y.
∗ Pornind din nodul y s, i cu culoarea p1 , se determină lant, ul (maximal) format cu muchii
colorate alternativ cu culorile p1 s, i p2 s, i, concomitent, se interschimbă culorile p1 s, i
p2 pentru aceste muchii.
∗ Se colorează muchia e cu culoarea p1 (care a devenit disponibilă).
Exemplul 10.3.2. Fie graful bipartit complet K3,3 , reprezentat ı̂n Figura 10.3.1. Toate nodurile au
gradul 3, deci, conform teoremei anterioare, numărul său muchie-cromatic este
χ′ (K3,3 ) = ∆(K3,3 ) = 3.
Aplicând algoritmul din observat, ia anterioară, obt, inem colorarea muchiilor cu 3 culori (ROS, U=1,
GALBEN=2, ALBASTRU=3), evident, iată pas cu pas ı̂n Figurile 10.3.4-10.3.12.

1 4 1 4 1 4

2 5 2 5 2 5

3 6 3 6 3 6

Figura 10.3.4: Figura 10.3.5: Figura 10.3.6:

1 4 1 4 1 4

2 5 2 5 2 5

3 6 3 6 3 6

Figura 10.3.7: Figura 10.3.8: Figura 10.3.9:


TEMA 10. GRAFURI BIPARTITE 114

Remarcăm că la colorarea muchiei [2, 6] (pornind de la colorarea din Figura 10.3.8), neavând o
culoare disponibilă, s-a procedat astfel:

• s-a determinat prima culoare nefolosită de nicio muchie incidentă cu nodul 2, aceasta a fost
p1 = 3 (ALBASTRU);

• s-a determinat prima culoare nefolosită de nicio muchie incidentă cu nodul 6, aceasta a fost
p2 = 1 (ROS, U);

• pornind din nodul 6 s, i cu culoarea p1 = 3 (ALBASTRU), s-a determinat lant, ul (maximal)


format cu muchiile [6, 1], [1, 4] colorate alternativ cu culorile p1 = 3 (ALBASTRU) s, i p2 = 1
(ROS, U) s, i s-au interschimbat culorile p1 = 3 (ALBASTRU) s, i p2 = 1 (ROS, U) pentru aceste
muchii;

• s-a colorat muchia [2, 6] cu culoarea p1 = 3 (ALBASTRU), care a devenit disponibilă, obt, inând
colorarea din Figura 10.3.9.

1 4 1 4 1 4

2 5 2 5 2 5

3 6 3 6 3 6

Figura 10.3.10: Figura 10.3.11: Figura 10.3.12:


Tema 11

Grafuri planare

11.1 Definit, ii s, i exemple


Definit, ia 11.1.1. Un graf G = (V, E) se numes, te graf planar dacă poate fi reprezentat ı̂n plan
astfel ı̂ncât segmentele (de curbă continuă) ce reprezintă muchiile sau arcele sale să nu se intersecteze
decât ı̂n extremităt, ile comune, mai precis dacă două astfel de segmente au un punct comun atunci
acesta este doar extremitate pentru fiecare.
O astfel de reprezentare se numes, te graf plan s, i reprezentare planară a grafului G.
Exemplul 11.1.1. Graful complet K4 s, i graful bipartit complet K3,2 , reprezentate ı̂n Figurile 11.1.2,
respectiv 11.1.1, sunt planare, deoarece au reprezentările plane din Figurile 11.1.4, respectiv 11.1.3.

1 2 1

4 3 3

Figura 11.1.1: Figura 11.1.2:

1 2 1

4
4 2 5

3 3

Figura 11.1.3: Figura 11.1.4:

115
TEMA 11. GRAFURI PLANARE 116

Analog se arată că graful bipartit complet Kp,2 este planar, pentru orice p ∈ N∗ .
Definit, ia 11.1.2. Fie G = (V, E) un graf plan. Dacă suprimăm din plan toate segmentele ce
reprezintă muchiile sau arcele lui G (suprimând astfel s, i toate punctele ce reprezintă nodurile lui G),
se obt, ine o reuniune disjunctă de regiuni conexe ale planului ce se numesc fet, ele (sau regiunile)
grafului G.
Frontiera unei fet, e este mult, imea muchiilor sau arcelor lui G cont, inute ı̂n ı̂nchiderea acelei
fet, e.
Observat, ia 11.1.1. Reamintim că o regiune conexă a unui plan este o submult, ime M a planului cu
proprietatea că orice două puncte P, Q ∈ M pot fi unite printr-un segment de curbă continuă inclus
ı̂n M.
Observat, ia 11.1.2. Evident, orice graf plan G are un număr finit s, i nenul de fet, e. Exact una dintre
fet, e este nemărginită, ea numindu-se fat, a exterioară, iar celelalte se numesc fet, e interioare ale
grafului G.
Exemplul 11.1.2. Graful plan K4 reprezentat ı̂n Figura 11.1.3 are 4 fet, e. Trei sunt fet, e interioare,
având ca frontiere triunghiurile 124, 234, respectiv 314, iar a patra este fat, a exterioară având ca
frontieră triunghiul 123.
Graful plan K3,2 reprezentat ı̂n Figura 11.1.4 are 3 fet, e. Două sunt fet, e interioare, având ca fron-
tiere patrulaterele 4152, respectiv 4352, iar a treia este fat, a exterioară având ca frontieră patrulaterul
4153.
Observat, ia 11.1.3. Orice ciclu elementar C al unui graf plan G ı̂mparte planul ı̂n două regiuni conexe,
deci orice muchie sau arc al ciclului C apart, ine frontierelor a exact două fet, e ale lui G.
Observat, ia 11.1.4. Orice fat, ă interioară a unui graf plan are ca frontieră un ciclu elementar reunit cu
eventuale lant, uri elementare ce au o extremitate pe acest ciclu s, i cealaltă extremitate ı̂n interiorul
acestuia. Dacă graful plan este conex s, i are cel put, in un ciclu (deci, conform observat, iei anterioare,
are cel put, in două fet, e), atunci fat, a sa exterioară are frontiera formată din ciclurile elementare ale
fet, elor interioare vecine (cu care are frontieră comună) reunite cu eventuale lant, uri elementare ce au
o extremitate pe unul dintre aceste cicluri s, i cealaltă extremitate fie pe altul dintre aceste cicluri, fie
ı̂n exteriorul acestora.

11.2 Formula lui Euler


Teorema 11.2.1. Numărul de fet, e al unui graf plan G = (V, E) este

f = 1 + γ(G),

γ(G) fiind numărul ciclomatic al grafului G.


Demonstrat, ie. Dacă γ(G) = 0, atunci graful G nu cont, ine cicluri, deci conform Observat, iei 11.1.4
rezultă că G nu are fet, e interioare, deci are o singură fat, ă, cea exterioară, adică f = 1, prin urmare
f = 1 = 1 + γ(G).
Fie acum γ(G) ≥ 1, deci graful G cont, ine cicluri elementare. Conform Observat, iei 11.1.3 rezultă
că G are cel put, in două fet, e, deci cel put, in o fat, ă interioară. Fie C1 , . . . , Cf −1 ciclurile elementare de
pe frontierele fet, elor interioare ale lui G. Demonstrăm că B = {C1 , . . . , Cf −1 } este o bază de cicluri
a grafului G.
Presupunem că există {Ci1 , . . . , Cik } ⊆ B astfel ı̂ncât Ci1 ∆ . . . ∆Cik = ∅, cu 1 ≤ k ≤ f −
1. Ciclurile Ci1 , . . . , Cik sunt pe frontierele unor fet, e interioare, prin urmare reuniunea regiunilor
mărginite de ele este mărginită. Fie e o muchie situată pe frontiera exterioară a acestei reuniuni,
TEMA 11. GRAFURI PLANARE 117

deci e apart, ine exact unuia dintre ciclurile Ci1 , . . . , Cik . Rezultă că e ∈ Ci1 ∆ . . . ∆Cik , contradict, ie
cu Ci1 ∆ . . . ∆Cik = ∅. Deci nu există {Ci1 , . . . , Cik } ⊆ B astfel ı̂ncât Ci1 ∆ . . . ∆Cik = ∅ s, i astfel
mult, imea B este liniar independentă.
Fie C un ciclu elementar arbitrar ı̂n G s, i Cj1 , . . . , Cjr ∈ B, 1 ≤ r ≤ f −1, ciclurile corespunzătoare
fet, elor situate ı̂n interiorul regiunii mărginite de ciclul C. Atunci C∆Cj1 ∆ . . . ∆Cjr = ∅ (deoarece
orice muchie din C ∪ Cj1 ∪ · · · ∪ Cjr apart, ine la exact două dintre ciclurile C, Cj1 , . . . , Cjr ) deci
C = Cj1 ∆ . . . ∆Cjr s, i astfel mult, imea B este s, i sistem de generatori pentru spat, iul ciclurilor lui G.
Rezultă că B este o bază a acestui spat, iu, deci ν(G) = card (B) = f − 1, adică f = 1 + γ(G).
Corolarul 11.2.1. Fie G = (V, E) un graf plan cu n noduri, m muchii, k componente conexe s, i f
fet, e. Atunci
f = m − n + k + 1.
Demonstrat, ie. Conform teoremei anterioare s, i Teoremei numărului ciclomatic avem f = γ(G) + 1 =
m − n + k + 1.
Corolarul 11.2.2 (Formula lui Euler). Fie G = (V, E) un graf plan conex cu n noduri, m muchii
s, i f fet, e. Atunci
f = m − n + 2.
Demonstrat, ie. Conform corolarului anterior avem f = m − n + k + 1 = m − n + 2, deoarece k = 1
(graful fiind conex).
Exemplul 11.2.1. Graful plan K4 reprezentat ı̂n Figura 11.1.3 este conex, are n = 4 noduri, m = 6
muchii s, i f = m − n + 2 = 4 fet, e.
Graful plan K3,2 reprezentat ı̂n Figura 11.1.4 este conex, are n = 5 noduri, m = 6 muchii s, i
f = m − n + 2 = 3 fet, e.
Definit, ia 11.2.1. Fie G un graf. Numărul

min{l(C) | C = ciclu ı̂n G}, dacă G cont, ine cicluri,
g(G) =
0, ı̂n caz contrar,

se numes, te grosimea (talia) grafului G. Reamintim că l(C) reprezintă lungimea ciclului C.
Observat, ia 11.2.1. Fie G un graf ce cont, ine cicluri. Deoarece orice ciclu se descompune ı̂n cicluri
elementare, rezultă că grosimea g(G) este egală cu lungimea minimă a unui ciclu elementar din G.
Exemplul 11.2.2. Graful complet K5 , reprezentat ı̂n Figura 11.2.1, are grosimea g(K5) = 3, deoarece
cont, ine cicluri de lungime 3 (de exemplu [1,2,3,1]) s, i nu cont, ine cicluri de lungime 1 (bucle) sau 2
(muchii multiple).
Graful bipartit complet K3,3 , reprezentat ı̂n Figura 11.2.2, are grosimea g(K3,3 ) = 4, deoarece
cont, ine cicluri de lungime 4 (de exemplu [1, 4, 2, 5, 1]) s, i nu cont, ine cicluri de lungime 1 (bucle), 2
(muchii multiple) sau 3 (fiind bipartit nu cont, ine cicluri de lungime impară).
TEMA 11. GRAFURI PLANARE 118

1
1 4

5 2
2 5

4 3 3 6

Figura 11.2.1: Figura 11.2.2:

Propozit, ia 11.2.1. Fie G = (V, E) un graf planar conex având n noduri, m muchii s, i grosimea g.
Atunci
(g − 2)m ≤ g(n − 2).
Demonstrat, ie. Dacă G nu cont, ine cicluri, atunci g = 0 s, i inegalitatea din enunt, este evident
adevărată.
Considerăm ı̂n continuare că G cont, ine cicluri, deci s, i cicluri elementare, s, i că el este reprezentat
ca graf plan. Conform Observat, iei 11.1.3 rezultă că G are cel put, in două fet, e. Conform Observat, iei
11.1.4, fie C1 , C2 , . . . , Cf −1 ciclurile elementare de pe frontierele fet, elor interioare ale lui G s, i fie Cf
lant, ul ı̂nchis obt, inut prin parcurgerea ciclurilor frontierei fet, ei exterioare, unite prin eventuale lant, uri
elementare de pe această frontieră. Fie m′ numărul de muchii ale grafului G care apart, in cel put, in
unuia dintre lant, urile ı̂nchise C1 , C2 , . . . , Cf . Deoarece orice muchie din C1 ∪C2 ∪. . .∪Cf −1 apart, ine la
exact două dintre lant, urile ı̂nchise C1 , C2, . . . , Cf , iar fiecare muchie din Cf care nu apart, ine ciclurilor
C1 , C2 , . . . , Cf −1 este parcursă de lant, ul ı̂nchis Cf de exact două ori, avem
f
X

2m = l(Ci )
i=1

(unde l(Ci ) reprezintă lungimea lant, ului ı̂nchis Ci ). Conform definit, iei grosimii unui graf, rezultă că
l(Ci ) ≥ g, pentru orice i ∈ {1, 2, . . . , f − 1}, iar, cum lant, ul ı̂nchis Cf cont, ine cel put, in un ciclu,
avem s, i l(Cf ) ≥ g. Prin urmare
f
X

2m ≥ g = gf.
i=1

Evident m ≤ m, deci
2m ≥ gf.
Conform Formulei lui Euler avem f = m − n + 2, deci inegalitatea anterioară devine

2m ≥ g(m − n + 2),

care se poate rescrie sub forma (g − 2)m ≤ g(n − 2).


Corolarul 11.2.3. Graful complet K5 s, i graful bipartit complet K3,3 nu sunt planare.
Demonstrat, ie. Graful K5 este conex, are n = 5 noduri, m = 10 muchii s, i grosimea g = 3, deci

(g − 2)m = 10 > 9 = g(n − 2).


TEMA 11. GRAFURI PLANARE 119

Conform Propozit, iei 11.2.1 rezultă ca graful K5 nu este planar.


Graful K3,3 este conex, are n = 6 noduri, m = 9 muchii s, i grosimea g = 4, deci

(g − 2)m = 18 > 16 = g(n − 2).

Conform Propozit, iei 11.2.1 rezultă că nici graful K3,3 nu este planar.
Corolarul 11.2.4. Graful complet Kn cu n ≥ 5 s, i graful bipartit complet Kp,q cu p, q ≥ 3 nu sunt
planare.
Demonstrat, ie. Evident, orice subgraf al unui graf plan este un graf plan, deci orice subgraf al unui
graf planar este un graf planar.
Fie n ≥ 5. Cum K5 este subgraf al lui Kn s, i K5 nu este planar, rezultă că nici Kn nu este planar.
Fie p, q ≥ 3. Cum K3,3 este subgraf al lui Kp,q s, i K3,3 nu este planar, rezultă că nici Kp,q nu este
planar.
Corolarul 11.2.5. Graful lui Petersen, reprezentat ı̂n Figura 11.2.3, nu este planar.

6
5 2
10 7

9 8

4 3

Figura 11.2.3:

Demonstrat, ie. Graful lui Petersen este conex, are n = 10 noduri, m = 15 muchii s, i grosimea g = 5,
deci
(g − 2)m = 45 > 40 = g(n − 2).
Conform Propozit, iei 11.2.1 rezultă ca acest graf nu este planar.
Corolarul 11.2.6. Fie G = (V, E) un graf simplu, planar s, i conex, având n ≥ 3 noduri s, i m muchii.
Atunci
m ≤ 3n − 6.
Demonstrat, ie. Dacă graful G nu cont, ine cicluri, atunci el este un arbore, deci m = n − 1 ≤ 3n − 6
(deoarece n ≥ 3).
Considerăm acum că G cont, ine cicluri. Graful G fiind simplu, nu are nici bucle, nici muchii
multiple, deci nu cont, ine cicluri de lungime 1 sau 2. Rezultă că G are grosimea g ≥ 3. Conform
g
Propozit, iei 11.2.1, avem (g − 2)m ≤ g(n − 2), deci m ≤ · (n − 2). Dar din g ≥ 3 rezultă că
g−2
g g
≤ 3, prin urmare m ≤ · (n − 2) ≤ 3(n − 2).
g−2 g−2
TEMA 11. GRAFURI PLANARE 120

Corolarul 11.2.7. Fie G = (V, E) un graf simplu, planar s, i conex, având n ≥ 3 noduri s, i m muchii.
Dacă G nu cont, ine triunghiuri (cicluri de lungime 3), atunci

m ≤ 2n − 4.

Demonstrat, ie. Dacă graful G nu cont, ine cicluri, atunci el este un arbore, deci m = n − 1 ≤ 2n − 4
(deoarece n ≥ 3).
Considerăm acum că G cont, ine cicluri. Graful G fiind simplu, nu cont, ine cicluri de lungime 1
sau 2. Conform ipotezei, el nu cont, ine nici cicluri de lungime 3, deci are grosimea g ≥ 4. Conform
g g
Propozit, iei 11.2.1, avem m ≤ · (n − 2). Dar din g ≥ 4 rezultă că ≤ 2, prin urmare
g−2 g−2
g
m≤ · (n − 2) ≤ 2(n − 2).
g−2
Corolarul 11.2.8. Fie G = (V, E) un graf simplu s, i planar, s, i fie δ(G) = min d(x) gradul minim al
x∈V
nodurilor din G. Atunci
δ(G) ≤ 5.
Demonstrat, ie. Cazul 1) Presupunem că graful G este conex. Fie n numărul de noduri s, i m numărul
de muchii ale grafului G.
Dacă n = 1, atunci G = K1 , deci δ(G) = 0.
Dacă n = 2, atunci G = K2 , deci δ(G) = 1.
Fie acum n ≥ 3. Conform Corolarului 11.2.6 avem m ≤ 3n − 6, iar, conform Propozit, iei 3.3.2
avem X
2m = dG (x) ≥ n · δ(G),
x∈V

deci
2m 6n − 12
δ(G) ≤ ≤ < 6,
n n
adică δ(G) ≤ 5.
Cazul 2) Presupunem că graful G nu este conex. Fie C1 o componentă conexă a lui G, deci C1 este
un graf simplu s, i planar. Conform Cazului 1 avem δ(C1 ) ≤ 5, prin urmare δ(G) ≤ δ(C1 ) ≤ 5.
Observat, ia 11.2.2. Există grafuri simple planare având gradul minim al nodurilor egal cu 5, un astfel
de graf fiind reprezentat ı̂n Figura 11.2.4.
TEMA 11. GRAFURI PLANARE 121

3 4

9 10

11 7 8 12

5 6

1 2

Figura 11.2.4:

11.3 Colorarea grafurilor planare


Avem următorul rezultat celebru.
Teorema 11.3.1 (Teorema celor 4 culori). Pentru orice graf planar G avem

χ(G) ≤ 4

(adică pentru colorarea nodurilor oricărui graf planar sunt suficiente patru culori).
Observat, ia 11.3.1. Teorema celor 4 culori este prima teoremă care a fost demonstrată cu ajutorul cal-
culatorului, de către Kenneth Appel s, i Wolfgang Haken de la Universitatea din Illinois, ı̂n anul 1976.
Problema fusese semnalată ı̂ncă din anul 1852 de către Francis Guthrie (student la matematică),
plecând de la colorarea hărt, ii comitatelor britanice folosind numai 4 culori (observat, ia apart, inând
unui prieten geograf) s, i a fost apoi intens studiată de numeros, i matematicieni celebri.
Putem demonstra us, or următorul rezultat mai slab.
Teorema 11.3.2 (Teorema celor 5 culori, Heawood). Pentru orice graf planar G = (V, E) avem

χ(G) ≤ 5.

Demonstrat, ie. Putem considera că G este un graf neorientat (orientarea arcelor nu influent, ează
colorarea nodurilor) plan (colorarea nodurilor nu depinde de reprezentarea grafului) s, i simplu (buclele
s, i muchiile multiple nu influent, ează colorarea nodurilor, deci buclele pot fi eliminate iar muchiile
multiple de forma [x, y] pot fi ı̂nlocuite cu o singură muchie [x, y]).
Fie {1, 2, . . . , 5} mult, imea culorilor.
TEMA 11. GRAFURI PLANARE 122

Demonstrăm că
G este 5-colorabil (11.3.1)
prin induct, ie după numărul n de noduri al grafului G.
Pentru n = 1 avem G = ({v}, ∅), deci G este 5-colorabil (fiind chiar 1-colorabil!).
Presupunem acum că relat, ia (11.3.1) este adevărată pentru orice graf neorientat plan simplu
având n − 1 noduri s, i o demonstrăm pentru graful neorientat plan simplu G = (V, E) ce are n
noduri, n ≥ 2. Conform Corolarului 11.2.8, graful G cont, ine un nod x ∈ V astfel ı̂ncât

d(x) ≤ 5.

Fie y1 , . . . , yk ∈ V nodurile adiacente cu x, deci k = d(x) ≤ 5. Fie

G′ = G \ {x}

subgraful obt, inut din G prin eliminarea nodului x. Evident, G′ este un graf neorientat plan simplu
având n−1 noduri, deci conform ipotezei de induct, ie G′ este 5-colorabil. Fie c : V \{x} → {1, 2, . . . , 5}
o 5-colorare a nodurilor grafului G′ . Avem două cazuri.
Cazul 1) Există o culoare p ∈ {1, 2, . . . , 5} diferită de culorile c(y1), . . . , c(yk ) ale vecinilor lui
x. Atunci colorând nodul x cu culoarea p, adică luând c(x) = p obt, inem o 5-colorare a nodurilor
grafului G.
Cazul 2) {c(y1 ), . . . , c(yk )} = {1, 2, . . . , 5}, deci k = 5 s, i culorile c(y1 ), . . . , c(y5 ) ale vecinilor lui x
sunt diferite două câte două. Putem presupune că nodurile y1 , y2, . . . , y5 sunt reprezentate ı̂n această
ordine ı̂n jurul nodului x, conform parcurgerii ı̂n sens trigonometric, s, i că avem c(yi ) = i pentru orice
i ∈ {1, 2, . . . , 5}.
Fie H1−3 subgraful lui G′ indus de nodurile colorate cu culorile 1 sau 3 s, i fie C1 componenta
conexă a lui H1−3 ce cont, ine nodul y1 . Avem două subcazuri.
Cazul 2.1) y3 6∈ V (C1 ) (adică nodurile y1 s, i y3 nu sunt ı̂n aceeas, i componentă conexă a lui H1−3 ).
Atunci interschimbând culorile 1 s, i 3 pentru toate nodurile din C1 s, i colorând nodul x cu culoarea 1
(disponibilă pentru x, deoarece y1 a fost recolorat cu culoarea 3), adică luând


3, dacă v ∈ V (C1 ) s, i c(v) = 1,

1, dacă v ∈ V (C ) si c(v) = 3,
1 ,
c′ (v) =

c(v), dacă v ∈ (V \ {x}) \ V (C1 ),


1, dacă v = x,

obt, inem o 5-colorare a nodurilor grafului G.


Cazul 2.2) y3 ∈ V (C1 ) (adică nodurile y1 s, i y3 sunt ı̂n aceeas, i componentă conexă a lui H1−3 ).
Deci există un lant, elementar µ1−3 = [y1 , . . . , y3] (ı̂n H1−3 , deci s, i in G) având nodurile colorate
alternativ cu culorile 1 s, i 3. Fie C ∗ = [x, y1 , . . . , y3, x] ciclul elementar din G format de muchia
[1, y1 ], lant, ul µ1−3 s, i muchia [y3 , 1]. Graful G fiind plan, din reprezentarea conform parcurgerii ı̂n
sens trigonometric a nodurilor y1 , y2, y3 , y4 ı̂n jurul nodului x, rezultă că nodurile y2 s, i y4 sunt unul ı̂n
interiorul regiunii mărginite de ciclul elementar C ∗ s, i celălalt ı̂n exteriorul acestei regiuni (nodurile
y2 s, i y4 nu apart, in lui C ∗ , fiind colorate cu culorile 2, respectiv 4).
Fie H2−4 subgraful lui G′ indus de nodurile colorate cu culorile 2 sau 4 s, i fie C2 componenta
conexă a lui H2−4 ce cont, ine nodul y2 . Demonstrăm că y4 6∈ V (C2 ) (adică nodurile y2 s, i y4 nu sunt ı̂n
aceeas, i componentă conexă a lui H2−4 ) prin reducere la absurd. Dacă am avea y4 ∈ V (C2 ), atunci ar
exista un lant, elementar µ2−4 = [y2 , . . . , y4 ] (ı̂n H2−4 , deci s, i in G) având nodurile colorate alternativ
cu culorile 2 s, i 4. Graful G fiind plan, iar nodurile y2 s, i y4 fiind situate unul ı̂n interiorul regiunii
TEMA 11. GRAFURI PLANARE 123

mărginite de ciclul C ∗ s, i celălalt ı̂n exteriorul acestei regiuni, ar rezulta că lant, ul µ2−4 ce leagă y2 s, i y4
are cel put, in un nod comun z cu ciclul C ∗ . Cum z 6= x (deoarece V (µ2−4 ) ⊆ V (G′ ) s, i x 6∈ V (G′ )), ar
rezulta că z ∈ V (µ1−3 ), deci z ∈ V (µ1−3 ) ∩ V (µ2−4 ), fals, deoarece V (µ1−3 ) ∩ V (µ2−4 ) = ∅ (nodurile
din µ1−3 fiind colorate cu culorile 1 sau 3, iar nodurile din µ2−4 fiind colorate cu culorile 2 sau 4).
Deci y4 6∈ V (C2 ). Atunci interschimbând culorile 2 s, i 4 pentru toate nodurile din C2 s, i colorând
nodul x cu culoarea 2 (disponibilă pentru x, deoarece y2 a fost recolorat cu culoarea 4), adică luând


4, dacă v ∈ V (C2 ) s, i c(v) = 2,

2, dacă v ∈ V (C ) si c(v) = 4,
2 ,
c′ (v) =

c(v), dacă v ∈ (V \ {x}) \ V (C2 ),


2, dacă v = x,

obt, inem o 5-colorare a nodurilor grafului G.


Demonstrat, ia prin induct, ie este ı̂ncheiată.

11.4 Formula lui Euler pentru poliedre convexe


Poliedrele sunt figuri geometrice ı̂n spat, iu care au vârfuri (noduri), muchii (laturi) s, i fet, e, putând fi
astfel privite ca un caz particular de grafuri, mai precis de grafuri neorientate simple s, i conexe.
Definit, ia 11.4.1. a) Un poliedru se numet, e convex dacă este o mult, ime convexă, adică pentru
orice două puncte ale poliedrului (adică din interiorul sau de pe fet, ele sale), segmentul care unes, te
cele două puncte este inclus ı̂n poliedru.
b) Un poliedru se numes, te regulat dacă fet, ele sale sunt poligoane regulate (adică cu laturi con-
gruente s, i unghiuri congruente) congruente, iar fiecare vârf apart, ine unui aceluias, i număr de fet, e
(sau, echivalent, de muchii).
Propozit, ia 11.4.1. Orice poliedru convex este un graf planar.
Demonstrat, ie. Prin eventuale redimensionări ale muchiilor, ceea ce implică s, i deplasarea nodurilor,
nodurile grafului asociat unui poliedru convex pot fi reprezentate astfel ı̂ncât, fixând arbitrar o fat, ă,
proiect, iile nodurilor ce nu apart, in acestei fet, e pe planul ei să fie puncte distincte situate toate ı̂n
interiorul fet, ei (sau situate toate ı̂n exteriorul fet, ei). Astfel se obt, ine o reprezentare plană a poliedrului
convex, deci acesta este un graf planar.
Exemplul 11.4.1. O reprezentare plană a cubului din Figura 11.4.1 este cea din Figura 11.4.2, deci
cubul este un graf planar.
TEMA 11. GRAFURI PLANARE 124

6 7

5 8 2 3

6 7

2 3 5 8

1 4 1 4

Figura 11.4.1: Figura 11.4.2:

Corolarul 11.4.1 (Formula lui Euler pentru poliedre convexe). Fie un poliedru convex cu n
noduri, m muchii s, i f fet, e. Atunci
f = m − n + 2.
Demonstrat, ie. Conform Propozit, iei anterioare, poliedrul convex este un graf planar. Mai mult, ı̂n
reprezentarea plană din demonstrat, ia propozit, iei anterioare fat, a poliedrului ı̂n interiorul căruia s-au
proiectat celelalte noduri devine fat, ă exterioară, iar celelalte fet, e ale poliedrului sunt fet, e interioare,
deci graful plan obt, inut are tot n noduri, m muchii s, i f fet, e. Fiind un graf plan s, i conex, conform
Corolarului 11.2.2 rezultă că f = m − n + 2.
Exemplul 11.4.2. Cubul este un poliedru convex cu n = 8 noduri, m = 12 muchii s, i f = 6 fet, e, deci
f = m − n + 2.
Observat, ia 11.4.1. Formula lui Euler nu rămâne valabilă pentru poliedre neconvexe. De exemplu,
poliedrul neconvex din Figura 11.4.3 (cub mare golit pe verticală de două trunchiuri de piramidă
patrulateră s, i de un cub mic) are n = 16 noduri, m = 32 muchii s, i f = 16 fet, e (fet, ele laterale ale
cubului mare, ale cubului mic s, i ale celor două trunchiuri de piramidă), deci f 6= m − n + 2.
TEMA 11. GRAFURI PLANARE 125

14 15

13 16

6 7
5 8

2 3
1 4

10 11

9 12

Figura 11.4.3:

Teorema 11.4.1. Există numai cinci poliedre convexe regulate, s, i anume:


• tetraedrul regulat, reprezentat ı̂n Figura 11.4.4, ce are 4 vârfuri, 6 muchii s, i 4 fet, e, fiecare fat, ă
fiind un triunghi echilateral s, i fiecare vârf apart, inând la exact 3 fet, e;
• octaedrul regulat, reprezentat ı̂n Figura 11.4.5, ce are 6 vârfuri, 12 muchii s, i 8 fet, e, fiecare fat, ă
fiind un triunghi echilateral s, i fiecare vârf apart, inând la exact 4 fet, e;
• cubul (hexaedrul regulat), reprezentat ı̂n Figura 11.4.6, ce are 8 vârfuri, 12 muchii s, i 6 fet, e,
fiecare fat, ă fiind un pătrat s, i fiecare vârf apart, inând la exact 3 fet, e;
• icosaedrul regulat, reprezentat ı̂n Figura 11.4.7, ce are 12 vârfuri, 30 muchii s, i 20 fet, e, fiecare
fat, ă fiind un triunghi echilateral s, i fiecare vârf apart, inând la exact 5 fet, e;
• dodecaedrul regulat, reprezentat ı̂n Figura 11.4.8, ce are 20 vârfuri, 30 muchii s, i 12 fet, e, fiecare
fat, ă fiind un pentagon regulat s, i fiecare vârf apart, inând la exact 3 fet, e.
Demonstrat, ie. Fie un poliedru convex regulat cu n noduri, m muchii s, i f fet, e, fiecare fat, ă fiind un
poligon regulat cu p noduri s, i fiecare nod apart, inând la q fet, e. Evident, p ≥ 3 s, i q ≥ 3.
Deoarece fiecare fat, ă are p muchii iar fiecare muchie apart, ine la exact două fet, e, adunând numerele
de muchii ale fet, elor rezultă că
f · p = 2m.
Deoarece fiecare fat, ă are p noduri iar fiecare nod apart, ine la exact q fet, e, adunând numerele de
noduri ale fet, elor rezultă că
f · p = q · n.
Astfel
f · p = q · n = 2m,
TEMA 11. GRAFURI PLANARE 126

deci
2m 2m
f= s, i n = .
p q
2m 2m
Dar, conform Formulei lui Euler, avem f = m − n + 2, deci =m− + 2, adică
p q
1 1 1 1
+ = + .
p q 2 m
1 1 1 1 1 1 1
Dacă am avea p ≥ 4 s, i q ≥ 4, ar rezulta că + ≥ + = + > , fals. Cum p ≥ 3 s, i q ≥ 3,
4 4 p q 2 m 2
rezultă că p = 3 sau q = 3.
1 1 1 1 1 1 1 m−q 1
Cazul 1) p = 3. Atunci + = + , care devine, succesiv − = , = ,
3 q 2 m q m 6 mq 6
6m − 6q − mq = 0,
(m + 6)(6 − q) = 36.
Cum q ≥ 3, deci 6 − q ≤ 3, rezultă că 6 − q ∈ {1, 2, 3}, deci q ∈ {3, 4, 5}.
Pentru q = 3 rezultă că m = 6, n = 4 s, i f = 4, poliedrul corespunzător fiind tetraedrul regulat,
reprezentat ı̂n Figura 11.4.4.
Pentru q = 4 rezultă că m = 12, n = 6 s, i f = 8, poliedrul corespunzător fiind octaedrul regulat,
reprezentat ı̂n Figura 11.4.5.
Pentru q = 5 rezultă că m = 30, n = 12 s, i f = 20, poliedrul corespunzător fiind icosaedrul
regulat, reprezentat ı̂n Figura 11.4.7.
1 1 1 1
Cazul 2) q = 3. Atunci + = + , care, analog Cazului 1, este echivalentă cu
p 3 2 m

(m + 6)(6 − p) = 36.

Cum p ≥ 3, rezultă că p ∈ {3, 4, 5}.


Pentru p = 3, conform Cazului 1 rezultă că poliedrul corespunzător este tetraedrul regulat.
Pentru p = 4 rezultă că m = 12, n = 8 s, i f = 6, poliedrul corespunzător fiind cubul (hexaedrul
regulat), reprezentat ı̂n Figura 11.4.6.
Pentru p = 5 rezultă că m = 30, n = 20 s, i f = 12, poliedrul corespunzător fiind dodecaedrul
regulat, reprezentat ı̂n Figura 11.4.8.
TEMA 11. GRAFURI PLANARE 127

Figura 11.4.4: Figura 11.4.5:

Figura 11.4.6: Figura 11.4.7:

Figura 11.4.8:
Tema 12

Distant, e s, i drumuri minime

Problema determinării distant, elor s, i drumurilor minime ı̂ntre nodurile unui graf ponderat apare ı̂n
numeroase aplicat, ii practice. În continuare vom prezenta doi algoritmi clasici pentru rezolvarea
acestei probleme.

12.1 Expunerea problemei


Definit, ia 12.1.1. Fie (G, c) un graf ponderat, unde G = (V, E), V = {v1 , . . . , vn } iar c : E → R+ .
a) Dacă µ = (x0 , e1 , x1 , . . . , xk−1 , ek , xk ) este un drum al grafului G, unde x0 , x1 , . . . , xk ∈ V ,
e1 , . . . , ek ∈ E, k ∈ N, atunci costul (ponderea) lui µ este

 0, dacă k = 0,
c(µ) = Pk
 c(ei ), dacă k ≥ 1
i=1

(adică suma costurilor arcelor sau muchiilor sale).


b) Fie x, y ∈ V . Un drum µ⋆ = (x, . . . , y) ı̂n graful G cu proprietatea că

c(µ⋆ ) = min{c(µ)|µ este drum de la x la y ı̂n G}

se numes, te drum minim (drum de cost minim, drum de pondere minimă) de la x la


y ı̂n graful ponderat (G, c). Costul c(µ⋆ ) al acestui drum minim se numes, te distant, a minimă
de la x la y ı̂n graful (G, c).
Observat, ia 12.1.1. Eliminând eventualele circuite C1 , . . . , Cp dintr-un drum µ de la nodul x la nodul
P
p
y obt, inem un drum elementar µ′ de la x la y cu proprietatea că c(µ′) = c(µ) − c(Ck ) ≤ c(µ).
k=1
Dacă drumul µ este minim atunci s, i drumul elementar µ′ este minim s, i c(e) = 0 pentru orice
muchie sau arc e al circuitelor C1 , . . . , Cp . Deci existent, a unui drum minim de la x la y implică
existent, a unui drum minim elementar de la x la y. Astfel distant, a minimă de la x la y poate fi
considerată ca fiind costul minim al unui drum elementar de la x la y. Mai mult, dacă funct, ia cost
c este strict pozitivă, atunci orice drum minim este elementar.
Observat, ia 12.1.2. Mult, imea drumurilor elementare fiind evident finită, avem echivalent, a: există
drumuri minime de la x la y dacă s, i numai dacă există drumuri de la x la y.
Observat, ia 12.1.3. Distant, a minimă de la un nod x la el ı̂nsus, i este egală cu zero, drumul minim
elementar de la x la x fiind drumul de lungime zero, µ = (x).

128
TEMA 12. DISTANT, E S, I DRUMURI MINIME 129

Observat, ia 12.1.4. Dacă µ = (x0 , x1 , . . . , xk ) este un drum minim de la x0 la xk , atunci orice subdrum
µ′ = (xi , xi+1 , . . . , xj ) (0 ≤ i ≤ j ≤ k) al său este un drum minim de la xi la xj (principiul
optimalităt, ii al lui Bellman). Afirmat, ia poate fi justificată us, or prin reducere la absurd.
Exemplul 12.1.1. Fie graful ponderat (G, c) reprezentat ı̂n Figura 12.1.1.

5
10

5
5 5
3 5 4
15

5 10
5

Figura 12.1.1:

Drumurile elementare de la nodul 1 la nodul 5 sunt µ1 = (1, 3, 5), având costul c(µ1 ) = 10+5 = 15,
µ2 = (1, 4, 5), având costul c(µ2 ) = 5 + 5 = 10, deci µ2 este un drum minim de la 1 la 5. Astfel
distant, a minimă de la nodul 1 la nodul 5 este c(µ2 ) = 10.
Definit, ia 12.1.2. Fie (G, c) un graf ponderat, unde G = (V, E), V = {v1 , . . . , vn }, c : E → R+ .

a) Matricea distant, elor (costurilor) directe asociată grafului (G, c) este matricea C = (cij )i,j=1,n
definită prin

 0, dacă i = j,
cij = min{c(e)|e = (vi , vj ) ∈ E}, dacă i 6= j s, i ∃ (vi , vj ) ∈ E,

∞, dacă i 6= j s, i 6 ∃ (vi , vj ) ∈ E

(pentru grafuri neorientate (vi , vj ) desemnând de fapt muchia [vi , vj ]).

b) Matricea distant, elor (costurilor) minime asociată grafului (G, c) este matricea C ⋆ =
(c⋆ij )i,j=1,n definită prin

 c(µ⋆ ), µ⋆ = drum minim de la vi la vj ,

cij = dacă ∃ µ = (vi , . . . , vj ) drum ı̂n G,

∞, ı̂n caz contrar.

Observat, ia 12.1.5. Evident, pentru orice graf neorientat atât matricea distant, elor directe cât s, i ma-
tricea distant, elor minime sunt matrice simetrice.
Observat, ia 12.1.6. Conform Observat, iei 12.1.1, putem să ı̂nlocuim termenul de ”drum” cu cel de
”drum elementar” ı̂n definit, ia anterioară.
Conform Observat, iei 12.1.2, punctul b) din definit, ia anterioară este o extindere a definit, iei
distant, ei minime de la punctul b) al Definit, iei 12.1.1.
Conform Observat, iei 12.1.3, c⋆ii = 0 ∀ i ∈ {1, . . . , n}.
TEMA 12. DISTANT, E S, I DRUMURI MINIME 130

Exemplul 12.1.2. Matricele distant, elor directe, respectiv minime asociate grafului din Exemplul 12.1.1
sunt
   
0 15 10 5 ∞ 0 15 10 5 10
 ∞ 0 ∞ ∞ ∞   ∞ 0 ∞ ∞ ∞ 
   
C=  ∞ 5 0 ∞ 5  , C =  10 5 0 15 5  .


 
 ∞ 10 ∞ 0 5   10 10 20 0 5 
5 5 ∞ ∞ 0 5 5 15 10 0

12.2 Algoritmul Dijkstra


Vom expune un algoritm pentru determinarea distant, elor minime s, i a drumurilor minime de la un
nod fixat, numit s, i nod sursă, la toate nodurile grafului ponderat dat.
Algoritmul 12.2.1 (Dijkstra). Fie (G, c) un graf ponderat, G = (V, E), V = {v1 , v2 , . . . , vn }, c : E →
R+ . Fie C = (cij )i,j=1,n matricea distant, elor directe asociată grafului (G, c) s, i fie vs ∈ V un nod
arbitrar fixat, numit nod sursă. Distant, ele minime de la nodul vs la nodurile grafului sunt calculate
s, i memorate ı̂ntr-un vector t = (t1 , . . . , tn ) astfel:

• La pasul 1 se selectează nodul sursă vs s, i se ia ts = 0;

• La pasul k, 2 ≤ k ≤ n, se cunosc nodurile vi1 , . . . , vik−1 selectate la pas, ii anteriori s, i distant, ele
corespondente ti1 , . . . , tik−1 .
a) Dacă nu mai există nicio muchie sau arc de la un nod selectat vj ∈ {vi1 , . . . , vik−1 } la
un nod neselectat vi ∈ V \ {vi1 , . . . , vik−1 }, atunci se ia ti = ∞ pentru orice nod neselectat
vi ∈ V \ {vi1 , . . . , vik−1 } s, i algoritmul se ı̂ncheie.
b) În caz contrar se selectează un nod vik ∈ V \ {vi1 , . . . , vik−1 } cu proprietatea că există un
nod selectat vjk ∈ {vi1 , . . . , vik−1 } astfel ı̂ncât

tjk + cjk ik = min{tj + cji |vj ∈ {vi1 , . . . , vik−1 }, vi ∈ V \ {vi1 , . . . , vik−1 }}. (12.2.1)

Se ia

tik = tjk + cjk ik (12.2.2)

s, i se trece la pasul k + 1.

Observat, ia 12.2.1. Evident, algoritmul execută cel mult n pas, i.


Teorema 12.2.1 (de corectitudine a Algoritmului Dijkstra). În contextul Algoritmului Dijk-
stra, avem

ti = c⋆si , ∀ i ∈ {1, . . . , n}

(adică distant, a ti calculată de algoritm este chiar distant, a minimă de la vs la vi ).


Demonstrat, ie. Vom demonstra prin induct, ie după k că nodul vik selectat la pasul k s, i distant, a
corespondentă tik calculată la acel pas verifică egalitatea din enunt, , adică

tik = c⋆sik ,

s, i, ı̂n plus, tik < ∞.


TEMA 12. DISTANT, E S, I DRUMURI MINIME 131

Pentru k = 1 afirmat, ia este evidentă deoarece

vi1 = vs , ti1 = 0 = c⋆ss .

Presupunem adevărată afirmat, ia pentru orice pas mai mic decât k s, i o demonstrăm pentru pasul
k. Fie vjk ∈ {vi1 , . . . , vik−1 } un nod ce verifică egalitatea (12.2.1). Din descrierea algoritmului s, i
din ipoteza de induct, ie (nodul vjk fiind selectat la un pas anterior), rezultă că tjk = c⋆sjk < ∞ s, i
cjk ik < ∞, deci tik < ∞ (conform (12.2.2)).
Dacă (vs , . . . , vjk ) este un drum minim de la vs la vjk (există, deoarece c⋆sjk < ∞), atunci µ =
(vs , . . . , vjk , vik ) este un drum de la vs la vik , având costul c(µ) = c⋆sjk + cjk ik = tjk + cjk ik = tik
(conform (12.2.2)), deci

c⋆sik ≤ tik < ∞. (12.2.3)

Rezultă că există drumuri minime de la vs la vik . Fie

µ⋆ = (vs = x0 , x1 , . . . , xp−1 , xp = vik )

un drum elementar minim de la vs la vik . Fie l ∈ {0, 1, . . . , p − 1} indicele maxim astfel ı̂ncât
xl ∈ {vi1 , . . . , vik−1 } (există, deoarece x0 = vs = vi1 ).
Fie xl = vir , 1 ≤ r ≤ k − 1, s, i fie xl+1 = viq , q ≥ k.
Din descrierea pasului q al algoritmului, conform relat, iilor (12.2.1) s, i (12.2.2) rezultă că

tiq ≤ tir + cir iq ,

iar conform ipotezei de induct, ie pentru r avem

tir = c⋆sir < ∞.

Deci

tiq ≤ c⋆sir + cir iq = c⋆siq (12.2.4)

(conform principiului optimalităt, ii al lui Bellman pentru subdrumurile dintre x0 = vs s, i xl = vir ,


respectiv dintre x0 = vs s, i xl+1 = viq ale drumului minim µ⋆ ).
Cazul 1) Dacă l = p − 1. atunci xl+1 = vik , deci q = k s, i din (12.2.3) s, i (12.2.4) rezultă că
tik = c⋆sik < ∞.
Cazul 2) Dacă l < p − 1, deci q 6= k, demonstrăm că

tik = c⋆sik

prin reducere la absurd. Într-adevăr, ı̂n caz contrar conform (12.2.3) am avea c⋆sik < tik .
Cum q > k, din descrierea algoritmului avem tiq ≥ tik (deoarece valorile tik sunt monoton
crescătoare de la un pas la altul, induct, ie!). Utilizând (12.2.4) am obt, ine

c⋆sik < tik ≤ tiq ≤ c⋆siq ,

ceea ce contrazice faptul că are loc inegalitatea c⋆siq ≤ c⋆sik (conform principiului optimalităt, ii al lui
Bellman pentru subdrumul dintre vs s, i viq al drumului minim µ⋆ ).
Demonstrat, ia prin induct, ie este ı̂ncheiată.
Evident, pentru orice nod vi rămas neselectat ı̂n urma executării ultimului pas al algoritmului
avem ti = ∞ = c⋆si .
TEMA 12. DISTANT, E S, I DRUMURI MINIME 132

Într-adevăr, dacă ar exista un drum elementar minim

µ = (vs = y0 , y1 , . . . , yp = vi ),

luând l ∈ {0, 1, . . . , p − 1} indicele maxim pentru care yl este selectat (există, deoarece y0 = vs este
selectat) atunci yl+1 ar fi neselectat des, i există o muchie sau un arc de la yl la yl+1, contradict, ie cu
descrierea modului de ı̂ncheiere a algoritmului.
Exemplul 12.2.1. Pentru graful ponderat din Exemplul 12.1.1, luând ca nod sursă nodul 1, aplicarea
Algoritmului Dijkstra este evident, iată ı̂n următorul tabel:
Pas Nodul selectat Distant, a minimă
1 1 0
2 4 5
3 3 10
4 5 10
5 2 15
De exemplu, la pasul 3 avem deja selectate nodurile i1 = 1 s, i i2 = 4, cu distant, ele minime t1 = c⋆11 = 0
s, i t4 = c⋆14 = 5. Se selectează nodul i3 = 3, cu distant, a minimă t3 = 10, deoarece

min{t1 + c12 , t1 + c13 , t1 + c15 , t4 + c42 , t4 + c43 , t4 + c45 }


= min{0 + 15, 0 + 10, 0 + ∞, 5 + 10, 5 + ∞, 5 + 5} = 10 = t1 + c13 .

Observat, ia 12.2.2. Algoritmul Dijkstra este specific metodei de programare Greedy, el selectând
nodurile ı̂n ordinea crescătoare a distant, ei fat, ă de nodul sursă.
Observat, ia 12.2.3. Pentru implementarea Algoritmului Dijkstra, considerăm că V = {1, . . . , n} s, i că
nodul sursă este s ∈ V . Utilizăm un vector S având semnificat, ia

1, dacă nodul i a fost selectat,
S[i] = ∀ i ∈ {1, . . . , n}
0, ı̂n caz contrar,

s, i un vector t având semnificat, ia


t[i] = distant, a minimă de la nodul sursă s la nodul i, ∀ i ∈ {1, . . . , n},
calculat conform (12.2.1) s, i (12.2.2).
Pentru determinarea drumurilor minime de la nodul s la nodurile grafului vom utiliza s, i un vector
T AT A având semnificat, ia
T AT A[i] = nodul j ce este predecesorul direct al nodului i pe drumul minim de la s la i,
∀ i ∈ {1, . . . , n}.
Astfel ı̂n vectorul T AT A se memorează un arbore compus din drumuri minime de la nodul sursă
la nodurile grafului, numit arborele drumurilor minime.
Dacă i = ik este nodul selectat la pasul k, atunci j = jk se determină conform egalităt, ii (12.2.1).
Descrierea ı̂n pseudocod a algoritmului are forma următoare.
TEMA 12. DISTANT, E S, I DRUMURI MINIME 133

DIJKSTRA(s) :
for i = 1, n do // init, ializări
S[i] ← 0; t[i] ← ∞; T AT A[i] ← ∞;
t[s] ← 0; T AT A[s] ← 0; // s este nodul sursă
repeat
// selectăm următorul nod x, ı^n ordinea crescătoare
// a distant, elor minime de la s la x
min ← ∞;
for i = 1, n do
if (S[i] = 0) and (t[i] < min) then
min ← t[i];
x ← i;
if (min < ∞) then // există x, ı
^l selectăm
S[x] ← 1;
for i = 1, n do // actualizăm vectorii t s, i T AT A
if (S[i] = 0) and (cxi < ∞) then
if (t[i] > t[x] + cxi ) then
t[i] ← t[x] + cxi ;
T AT A[i] ← x;

while (min < ∞);


Exemplul 12.2.2. Pentru graful ponderat din Exemplul 5.2.1, luând ca nod sursă nodul s = 1,
aplicarea Algoritmului Dijkstra este evident, iată ı̂n următorul tabel:
Pas Nodul selectat x T AT A[x] Distant, a minimă t[x]
1 1 0 0
2 2 1 30
3 5 1 70
4 3 2 80
5 8 5 80
6 6 3 100
7 7 1 110
8 9 5 110
9 4 3 180
10 10 9 240
Arborele drumurilor minime, memorat ı̂n vectorul T AT A, este reprezentat ı̂n Figura 12.2.1.
TEMA 12. DISTANT, E S, I DRUMURI MINIME 134

30 50 100
1 2 3 4
20
70 6
110
5
40
10
7 8 9 10
130

Figura 12.2.1:

Deci drumurile minime determinate de algoritm sunt:


• de la 1 la 1: [1];
• de la 1 la 2: [1, 2];
• de la 1 la 3: [1, 2, 3];

• de la 1 la 4: [1, 2, 3, 4];
• de la 1 la 5: [1, 5];
• de la 1 la 6: [1, 2, 3, 6];

• de la 1 la 7: [1, 7];
• de la 1 la 8: [1, 5, 8];
• de la 1 la 9: [1, 5, 9];
• de la 1 la 10: [1, 5, 9, 10].
Observat, ia 12.2.4. Implementarea anterioară necesită O (n2 ) operat, ii (deoarece blocul ”repeat” se
execută de cel mult n ori s, i necesită de fiecare dată cel mult n comparat, ii pentru determinarea nodului
selectat x s, i cel mult n comparat, ii s, i n adunări pentru actualizarea vectorilor t s, i T AT A). Aceasta
este de fapt s, i complexitatea Algoritmului Dijkstra (ı̂n implementarea optimă) ı̂n cazul memorării
grafului prin matricea distant, elor directe.

12.3 Algoritmul Roy-Floyd


Vom expune un algoritm pentru determinarea distant, elor minime s, i a drumurilor minime ı̂ntre orice
două noduri ale grafului ponderat dat. Acest algoritm este asemănător cu Algoritmul Roy-Warshall
pentru determinarea matricei drumurilor.
Algoritmul 12.3.1 (Roy-Floyd). Fie (G, c) un graf ponderat, G = (V, E), V = {v1 , v2 , . . . , vn },
c : E → R+ . Fie C = (cij )i,j=1,n matricea distant, elor directe asociată grafului (G, c). Se calculează
matricele
(k)
C (k) = (cij )i,j=1,n , k ∈ {0, 1, . . . , n}
TEMA 12. DISTANT, E S, I DRUMURI MINIME 135

definite prin
C (0) = C, (12.3.1)
(k) (k−1) (k−1) (k−1)
cij = min{cij , cik + ckj }, ∀k, i, j ∈ {1, . . . , n}. (12.3.2)

Teorema 12.3.1 (de corectitudine a Algoritmului Roy-Floyd). În contextul Algoritmului Roy-
Floyd, ultima matrice calculată este chiar matricea distant, elor minime asociată grafului (G, c), adică
C (n) = C ⋆ .
Demonstrat, ie. Vom demonstra prin induct, ie după k ∈ {0, 1, . . . , n} că pentru orice i, j ∈ {1, . . . , n}
avem

 min{c(µ)|µ = (vi , . . . , vj ), I(µ) ⊆ {v1 , . . . , vk }}, dacă
(k)
cij = ∃ µ = (vi , . . . , vj ) drum cu I(µ) ⊆ {v1 , . . . , vk }, (12.3.3)

∞, ı̂n caz contrar,
unde I(µ) reprezintă mult, imea nodurilor intermediare ale drumului µ s, i {v1 , . . . , vk } reprezintă
mult, imea {vi |1 ≤ i ≤ k}, deci pentru k = 0 această mult, ime este ∅.
(0)
Pentru k = 0 avem cij = cij (conform (12.3.1)) s, i egalitatea (12.3.3) este evidentă din definit, ia
matricei C a costurilor directe s, i faptul că I(µ) = ∅ ı̂nseamnă că drumul µ este de fapt un arc sau o
muchie pentru i 6= j, respectiv că µ este o buclă sau drumul (vi ) de lungime 0 pentru i = j.
Presupunem acum egalitatea (12.3.3) adevărată pentru k −1 (1 ≤ k ≤ n) s, i o demonstrăm pentru
k. Fie d ∈ [0, ∞). Folosind (12.3.2), ipoteza de induct, ie s, i principiul optimalităt, ii al lui Bellman
avem echivalent, ele:
(k) (k−1) (k−1) (k−1) (k−1) (k−1) (k−1)
cij = d ⇔ cij = d ≤ cik + ckj sau cik + ckj = d < cij
⇔ ∃ µ = (vi , . . . , vj ) drum minim cu proprietatea că I(µ) ⊆ {v1 , . . . , vk−1}
(adică de cost minim dintre toate drumurile de la vi la vj ce satisfac această
proprietate), c(µ) = d ≤ c(µ1 ) + c(µ2 ) ∀ µ1 = (vi , . . . , vk ), µ2 = (vk , . . . , vj )
drumuri cu I(µ1 ), I(µ2 ) ⊆ {v1 , . . . , vk−1 )
sau
∃ µ′1 = (vi , . . . , vk ), µ′2 = (vk , . . . , vj ) drumuri minime cu proprietatea că
I(µ′1 ), I(µ′2) ⊆ {v1 , . . . , vk−1 }, c(µ′1 ) + c(µ′2 ) = d < c(µ”), ∀ µ” = (vi , . . . , vj )
drum cu I(µ”) ⊆ {v1 , . . . , vk−1 }
⇔ ∃ µ = (vi , . . . , vj ) drum minim cu proprietatea că
I(µ) ⊆ {v1 , . . . , vk }, vk 6∈ I(µ), c(µ) = d
sau
∃ µ′ = (vi , . . . , vk , . . . , vj ) drum minim cu proprietatea că
I(µ′ ) ⊆ {v1 , . . . , vk }, vk ∈ I(µ′ ), c(µ′ ) = d
(µ′ se obt, ine parcurgând ı̂ntâi µ′1 , apoi µ′2 s, i, reciproc,
µ′1 s, i µ′2 sunt port, iunile din µ′ dintre vi s, i prima aparit, ie a lui vk ı̂n I(µ′),
respectiv dintre ultima aparit, ie a lui vk ı̂n I(µ′) s, i vj ; ı̂ntre aceste aparit, ii
eventualele arce sau muchii ale lui µ′ au costul 0 conform Observat, iei 12.1.1)
⇔ ∃ µ = (vi , . . . , vj ) drum minim cu proprietatea că
I(µ) ⊆ {v1 , . . . , vk }, c(µ) = d.
TEMA 12. DISTANT, E S, I DRUMURI MINIME 136

Demonstrat, ia prin induct, ie a egalităt, ii (12.3.3) este astfel ı̂ncheiată.


Pentru k = n condit, ia I(µ) ⊆ {v1 , . . . , vn } poate fi eliminată, fiind ı̂ntotdeauna adevărată, deci
(n)
din (12.3.3) s, i Definit, ia 12.1.2 obt, inem cij = c⋆ij , ∀ i, j ∈ {1, . . . , n}, adică egalitatea din enunt, .
Observat, ia 12.3.1. Algoritmul Roy-Floyd are complexitatea Θ(n3 ) (deoarece necesită câte o adunare
s, i o comparat, ie pentru fiecare triplet (k, i, j), cu k, i, j ∈ {1, . . . , n}).
Exemplul 12.3.1. Pentru graful din Exemplul 12.1.1, prin aplicarea Algoritmului Roy-Floyd obt, inem
matricele:
   
0 15 10 5 ∞ 0 15 10 5 ∞
 ∞ 0 ∞ ∞ ∞   ∞ 0 ∞ ∞ ∞ 
   
C = C =  ∞ 5 0 ∞ 5 ; C = 
(0)   (1)
 ∞ 5 0 ∞ 5 

 ∞ 10 ∞ 0 5   ∞ 10 ∞ 0 5 
5 5 ∞ ∞ 0 5 5 15 10 0
(1) (0) (0) (0)
(deoarece, de exemplu, c53 = min{c53 , c51 + c13 } = min{∞, 5 + 10} = 15);
   
0 15 10 5 ∞ 0 15 10 5 15
 ∞ 0 ∞ ∞ ∞   ∞ 0 ∞ ∞ ∞ 
   
C =
(2)
 ∞ 5 0 ∞ 5 ; C =  ∞ 5 0 ∞ 5 ;

(3)
 
 ∞ 10 ∞ 0 5   ∞ 10 ∞ 0 5 
5 5 15 10 0 5 5 15 10 0
   
0 15 10 5 10 0 15 10 5 10
 ∞ 0 ∞ ∞ ∞   ∞ 0 ∞ ∞ ∞ 
   
C =
(4)
 ∞ 5 0 ∞ 5  ; C =  10 5 0 15 5  = C ⋆

(5)
 
 ∞ 10 ∞ 0 5   10 10 20 0 5 
5 5 15 10 0 5 5 15 10 0

(matricea distant, elor minime).


Observat, ia 12.3.2. Conform ecuat, iilor (12.3.3), Algoritmul Roy-Floyd este un algoritm specific metodei
programării dinamice.
(k) (k−1) (k) (k−1)
Conform ecuat, iilor (12.3.2) avem cik = cik s, i ckj = ckj , ∀ k, i, j ∈ {1, . . . , n}, deci pentru im-
plementarea algoritmului putem utiliza o singură matrice C (k) . Astfel obt, inem următoarea descriere
ı̂n pseudocod a algoritmului.

ROY FLOYD :
for i = 1, n do // init, ializări
for j = 1, n do
c⋆ [i, j] ← c[i, j];
for k = 1, n do
for i = 1, n do
for j = 1, n do
if (c⋆ [i, k] + c⋆ [k, j] < c⋆ [i, j]) then
c⋆ [i, j] ← c⋆ [i, k] + c⋆ [k, j]
TEMA 12. DISTANT, E S, I DRUMURI MINIME 137

Considerând că funct, ia cost c este strict pozitivă, pentru determinarea tuturor drumurilor minime
(elementare) dintre două noduri distincte x, y putem utiliza echivalent, a:

z 6= x,
(x, z, . . . , y) = drum minim ⇔
cxz + c⋆zy = c⋆xy ,

unde mult, imea nodurilor este mult, imea standard V = {1, . . . , n}.
Astfel putem determina toate nodurile z ce sunt succesori direct, i ai nodului x pe drumuri minime
de la x la y, s, i continuând acest procedeu pentru subdrumurile minime dintre z s, i y se găsesc toate
drumurile minime elementare de la x la y.
Tema 13

Fluxuri ı̂n ret, ele

13.1 Problema fluxului maxim


Definit, ia 13.1.1. O ret, ea (ret, ea de transport) are forma R = (G, s, t, c), unde:

• G = (V, E) este un graf orientat simplu.


V se numes, te s, i mult, imea nodurilor ret, elei, iar E se numes, te s, i mult, imea arcelor ret, elei;

• s, t ∈ V sunt două noduri a.ı̂. s 6= t.


Nodul s se numes, te nodul sursă (intrarea) al ret, elei, iar nodul t se numes, te nodul destinat, ie
(ies, irea) al ret, elei;

• c : E → R+ este o funct, ie numită funct, ie capacitate.


Pentru orice e ∈ E, c(e) se numes, te capacitatea arcului e.

Pentru simplificarea notat, iilor, extindem funct, ia capacitate


(
c(i, j), dacă (i, j) ∈ E,
c : V × V → R+ , c(i, j) = (13.1.1)
0, dacă (i, j) 6∈ E.

Exemplul 13.1.1. În Figura 13.1.1 este reprezentată o ret, ea R, capacităt, ile fiind ment, ionate pe arce.
Considerăm că această ret, ea are intrarea s = 1 s, i ies, irea t = 6.

Figura 13.1.1: Figura 13.1.2:

138
TEMA 13. FLUXURI ÎN RET, ELE 139

Definit, ia 13.1.2. Fie R = (G, s, t, c) o ret, ea, unde G = (V, E). Un flux ı̂n ret, eaua R este o funct, ie
f : V × V → R ce verifică următoarele două proprietăt, i:

0 ≤ f (i, j) ≤ c(i, j), ∀i, j ∈ V, (13.1.2)


X X
f (j, i) = f (i, j), ∀i ∈ V \ {s, t}. (13.1.3)
j∈V j∈V

f (i, j) reprezintă fluxul transportat pe arcul (i, j).


Relat, ia (13.1.2) se numes, te condit, ia de mărginire a fluxului, iar relat, ia (13.1.3) se numes, te
condit, ia de conservare a fluxului.
Observat, ia 13.1.1. Evident,
f (i, j) = 0 ∀(i, j) 6∈ E,
deci, analog funct, iei capacitate c, s, i funct, ia flux f poate fi definită (restrânsă) doar pe mult, imea
arcelor ret, elei (adică f : E → R).
Observat, ia 13.1.2. Definit, iile s, i rezultatele din acest capitol sunt valabile s, i pentru ret, ele formate cu
grafuri orientate oarecare (nu neapărat simple). În acest caz general funct, iile capacitate s, i flux se
definesc neapărat doar pe colect, ia (multisetul) E a arcelor ret, elei.
Observat, ia 13.1.3. În particular, f (i, j) = 0 ∀i, j ∈ V este un flux ı̂n orice ret, ea, numit fluxul nul.
Exemplul 13.1.2. Pentru ret, eaua din Figura 13.1.1, un exemplu de flux este reprezentat ı̂n Figura
13.1.2. Pe fiecare arc (i, j) sunt ment, ionate fluxul f (i, j) s, i capacitatea c(i, j), ı̂n această ordine.
Lema 13.1.1. Fie R = (G, s, t, c) o ret, ea, unde G = (V, E). Pentru orice flux f ı̂n ret, eaua R are
loc egalitatea !
X X X X
f (i, t) − f (t, i) = − f (i, s) − f (s, i) .
i∈V i∈V i∈V i∈V

Definit, ia 13.1.3. Fie R = (G, s, t, c) o ret, ea, unde G = (V, E). Pentru orice flux f ı̂n ret, eaua R,
numărul !
X X X X
v(f ) = f (i, t) − f (t, i) = − f (i, s) − f (s, i)
i∈V i∈V i∈V i∈V

se numes, te valoarea fluxului f (fluxul net ce ajunge la nodul destinat, ie, fluxul net ce iese din nodul
sursă).
Exemplul 13.1.3. Fluxul din Figura 13.1.2 are valoarea v(f ) = 2 + 6 = 8.
Definit, ia 13.1.4. Fie R = (G, s, t, c) o ret, ea. Un flux f ∗ ı̂n ret, eaua R cu proprietatea că

v(f ∗ ) = max{v(f ) | f = flux ı̂n R}

se numes, te flux de valoare maximă (flux maxim) ı̂n ret, eaua R.


Problema determinării fluxurilor maxime ı̂ntr-o ret, ea are numeroase aplicat, ii practice. În sect, iunea
următoare vom prezenta un algoritm pentru rezolvarea acestei probleme.
TEMA 13. FLUXURI ÎN RET, ELE 140

13.2 Algoritmul Ford-Fulkerson


Începem cu definirea unor not, iuni ajutătoare.
Definit, ia 13.2.1. Dacă µ = [x0 , x1 , . . . , xk ] este un lant, elementar ı̂n graful orientat G = (V, E),
atunci arcele sale de forma (xi , xi+1 ) ∈ E (i ∈ {0, . . . , k − 1}) se numesc arce directe pentru lant, ul
µ, iar arcele sale de forma (xi+1 , xi ) ∈ E (i ∈ {0, . . . , k − 1}) se numesc arce inverse pentru lant, ul
µ.
Exemplul 13.2.1. Pentru graful din Figura 13.1.2, lant, ul [1, 2, 3, 4, 5, 6] are arcele directe (1, 2), (2, 3),
(4, 5), (5, 6) s, i arcul invers (4, 3).
Definit, ia 13.2.2. Fie f un flux ı̂n ret, eaua R = (G, s, t, c). Un C-lant, ı̂n ret, eaua R relativ la fluxul
f este un lant, elementar µ ı̂n graful G ce verifică următoarele două proprietăt, i:

f (i, j) < c(i, j), ∀(i, j) = arc direct al lui µ,


f (i, j) > 0, ∀(i, j) = arc invers al lui µ.

Definit, ia 13.2.3. Fie f un flux ı̂n ret, eaua R = (G, s, t, c) s, i fie µ un C-lant, ı̂n ret, eaua R relativ la
fluxul f .
a) Pentru orice arc (i, j) al lui µ, numărul
(
c(i, j) − f (i, j), dacă (i, j) este arc direct al lui µ,
rµ (i, j) =
f (i, j), dacă (i, j) este arc invers al lui µ

se numes, te capacitatea reziduală (reziduul) a arcului (i, j) relativ la C-lant, ul µ.


b) Numărul
r(µ) = min{rµ (i, j) | (i, j) = arc al lui µ}
se numes, te capacitatea reziduală (reziduul) a C-lant, ului µ.
Observat, ia 13.2.1. Conform definit, iilor anterioare, pentru orice C-lant, µ avem r(µ) > 0.
Exemplul 13.2.2. Pentru ret, eaua s, i fluxul reprezentate ı̂n Figura 13.1.2, lant, ul µ = [1, 2, 3, 4, 5, 6] este
un C-lant, . Reziduurile pe arcele acestui C-lant, sunt

rµ (1, 2) = 3 − 2 = 1, rµ (2, 3) = 4 − 1 = 3, rµ (4, 3) = 5, rµ (4, 5) = 3 − 2 = 1, rµ (5, 6) = 7 − 2 = 5,

deci reziduul pe acest C-lant, este r(µ) = 1.


Definit, ia 13.2.4. Fie f un flux ı̂n ret, eaua R = (G, s, t, c). Un C-lant, de la s la t ı̂n ret, eaua R
relativ la fluxul f se numes, te lant, de cres, tere (ı̂n ret, eaua R relativ la fluxul f ).
Exemplul 13.2.3. Lant, ul µ = [1, 2, 3, 4, 5, 6] din exemplul anterior este un lant, de cres, tere.
Lema 13.2.1. Fie R = (G, s, t, c) o ret, ea, unde G = (V, E). Fie f un flux ı̂n ret, eaua R s, i fie µ un
lant, de cres, tere ı̂n ret, eaua R relativ la fluxul f . Atunci funct, ia f ′ : V × V → R definită prin


f (i, j) + r(µ), dacă (i, j) este arc direct al lui µ,

f (i, j) = f (i, j) − r(µ), dacă (i, j) este arc invers al lui µ,


f (i, j), dacă (i, j) nu este arc al lui µ

este un flux ı̂n ret, eaua R s, i


v(f ′ ) = v(f ) + r(µ).
TEMA 13. FLUXURI ÎN RET, ELE 141

Observat, ia 13.2.2. În contextul lemei anterioare, conform Observat, iei 13.2.1 avem

v(f ′) = v(f ) + r(µ) > v(f ).

Inegalitatea justifică denumirea lui µ drept lant, de cres, tere a fluxului f , iar egalitatea justifică
denumirea lui r(µ) drept capacitatea reziduală a lant, ului µ.
Definit, ia 13.2.5. Fluxul f ′ definit ı̂n lema anterioară se numes, te fluxul obt, inut prin mărirea
fluxului f de-a lungul lant, ului de cres, tere µ s, i se notează cu

f ′ = f ⊕ r(µ).

Exemplul 13.2.4. Pentru ret, eaua R s, i fluxul f reprezentate ı̂n Figura 13.1.2, lant, ul µ = [1, 2, 3, 4, 5, 6]
este un lant, de cres, tere având reziduul r(µ) = 1. Fluxul f ′ = f ⊕ r(µ) obt, inut prin aplicarea lemei
anterioare este reprezentat ı̂n Figura 13.2.1. Valoarea acestui flux este v(f ′ ) = v(f )+r(µ) = 8+1 = 9.

Figura 13.2.1:

Definit, ia 13.2.6. Fie R = (G, s, t, c) o ret, ea, unde G = (V, E). O sect, iune (tăietură) ı̂n ret, eaua
R este o pereche (S, T ) ∈ V × V ce verifică următoarele proprietăt, i:

S ∪ T = V, S ∩ T = ∅,
s ∈ S, t ∈ T.

Observat, ia 13.2.3. Dacă (S, T ) este o sect, iune ı̂n ret, eaua R = (G, s, t, c), unde G = (V, E), atunci
V = S ∪ T este o partit, ie a mult, imii V a nodurilor ret, elei (adică V = S ∪ T , S 6= ∅, T 6= ∅, S ∩ T = ∅)
a.ı̂. s ∈ S s, i t ∈ T . Rezultă că numărul de sect, iuni ale ret, elei R este egal cu numărul de submult, imi
S \ {s} ⊆ V \ {s, t}, deci cu
2n−2 , unde n = card (V ).
Definit, ia 13.2.7. Fie R = (G, s, t, c) o ret, ea, unde G = (V, E). Pentru orice sect, iune (S, T ) ı̂n
ret, eaua R, numărul XX
c(S, T ) = c(i, j)
i∈S j∈T

se numes, te capacitatea sect, iunii (S, T ).


Observat, ia 13.2.4. Conform relat, iei (13.1.1), capacitatea unei sect, iuni (S, T ) este suma capacităt, ilor
tuturor arcelor ce au extremitatea init, ială ı̂n S s, i extremitatea finală ı̂n T .
TEMA 13. FLUXURI ÎN RET, ELE 142

Exemplul 13.2.5. Pentru ret, eaua reprezentată ı̂n Figura 13.1.1, (S, T ) = ({1, 2, 5}, {3, 4, 6}) este o
sect, iune având capacitatea

c(S, T ) = c(1, 4) + c(2, 3) + c(2, 4) + c(5, 6) = 10 + 4 + 2 + 7 = 23.

Lema 13.2.2. Fie R = (G, s, t, c) o ret, ea. Pentru orice flux f s, i orice sect, iune (S, T ) ı̂n ret, eaua R
avem XX
v(f ) = (f (i, j) − f (j, i))
i∈S j∈T

(adică valoarea fluxului este egală cu fluxul net ce traversează sect, iunea).
Lema 13.2.3. Fie R = (G, s, t, c) o ret, ea.

a) Pentru orice flux f s, i orice sect, iune (S, T ) ı̂n ret, eaua R avem

v(f ) ≤ c(S, T ).

b) Dacă f ∗ este un flux s, i (S ∗ , T ∗) este o sect, iune ı̂n ret, eaua R astfel ı̂ncât

v(f ∗ ) = c(S ∗ , T ∗ ),

atunci f ∗ este un flux de valoare maximă s, i (S ∗ , T ∗ ) este o sect, iune de capacitate minimă ı̂n
ret, eaua R.

Teorema 13.2.1 (de caracterizare a unui flux de valoare maximă). Fie R = (G, s, t, c) o
ret, ea. Un flux f ı̂n ret, eaua R este un flux de valoare maximă dacă s, i numai dacă nu există lant, uri
de cres, tere ı̂n ret, eaua R relativ la fluxul f .
Demonstrat, ie. ”⇒” Fie f un flux de valoare maximă ı̂n R. Dacă ar exista un lant, de cres, tere µ ı̂n
R relativ la fluxul f , atunci conform Lemei 13.2.1 ar rezulta că funct, ia f ′ = f ⊕ r(µ) ar fi un flux ı̂n
R s, i v(f ′ ) = v(f ) + r(µ) > v(f ) (conform Observat, iei 13.2.2) contradict, ie. Deci nu există lant, uri de
cres, tere ı̂n R relativ la fluxul f .
”⇐” Fie f un flux ı̂n R a.ı̂. nu există lant, uri de cres, tere ı̂n R relativ la f . Fie
(
S = {i ∈ V | există C-lant, uri de la s la i ı̂n R relativ la f },
(13.2.1)
T = {i ∈ V | nu există C-lant, uri de la s la i ı̂n R relativ la f }.

Evident, S ∪ T = V s, i S ∩ T = ∅.
De asemenea, avem s ∈ S (deoarece [s] este un C-lant, de la s la s ı̂n R relativ la f ) s, i t ∈ T
(deoarece nu există lant, uri de cres, tere, adică C-lant, uri de la s la t ı̂n R relativ la f ). Deci (S, T )
este o sect, iune ı̂n ret, eaua R.
Fie i ∈ S s, i j ∈ T arbitrar fixat, i. Deoarece i ∈ S rezultă că există un C-lant, µ = [s =
x0 , x1 , . . . , xk = i] ı̂n R relativ la f . Atunci x0 , x1 , . . . , xk ∈ S (sublant, urile C-lant, ului µ sunt tot
C-lant, uri), deci j 6∈ V (µ).
Dacă am avea f (i, j) < c(i, j) sau f (j, i) = 0, atunci ar rezulta că [s = x0 , x1 , . . . , xk = i, j] ar fi
un C-lant, ı̂n R relativ la f , ceea ce ar contrazice apartenent, a j ∈ T . Deci

f (i, j) = c(i, j) s, i f (j, i) = 0,

pentru orice i ∈ S s, i j ∈ T .
TEMA 13. FLUXURI ÎN RET, ELE 143

Aplicând Lema 13.2.2, avem


XX XX
v(f ) = (f (i, j) − f (j, i)) = (c(i, j) − 0) = c(S, T ),
i∈S j∈T i∈S j∈T

deci conform Lemei 13.2.3 rezultă că f este un flux de valoare maximă ı̂n ret, eaua R (iar (S, T ) este
o sect, iune de capacitate minimă ı̂n ret, eaua R).
Observat, ia 13.2.5. Dacă se cunoas, te un flux f de valoare maximă ı̂ntr-o ret, ea R, atunci formulele
(13.2.1) determină o sect, iune (S, T ) de capacitate minimă, deci orice algoritm pentru determinarea
unui flux de valoare maximă bazat pe caracterizarea dată ı̂n teorema anterioară rezolvă s, i problema
determinării unei sect, iuni de capacitate minimă.
Definit, ia 13.2.8. Fie f un flux ı̂n ret, eaua R = (G, s, t, c), unde G = (V, E).
Funct, ia r : V × V → R+ definită prin


c(i, j) − f (i, j), dacă f (i, j) < c(i, j),
r(i, j) = f (j, i), dacă f (j, i) > 0 s, i f (i, j) = c(i, j),


0, ı̂n rest

se numes, te capacitatea reziduală (reziduul) a ret, elei R relativ la fluxul f , iar graful orientat
Gf = (V, Ef ) definit prin
Ef = {(i, j) ∈ V × V | r(i, j) > 0}
se numes, te graful rezidual al ret, elei R relativ la fluxul f .
Observat, ia 13.2.6. Fie f un flux ı̂n ret, eaua R = (G, s, t, c). Fie r s, i Gf capacitatea reziduală,
respectiv graful rezidual ale ret, elei R relativ la fluxul f . Fie µ = [x0 , x1 , . . . , xk ] un lant, elementar
ı̂n graful G. Evident, avem echivalent, ele:

µ este un C-lant, ı̂n R relativ la f ⇔ r(xi , xi+1 ) > 0, ∀i ∈ {0, . . . , k − 1} ⇔


⇔ (x0 , x1 , . . . , xk ) este un drum elementar ı̂n graful rezidual Gf ;
µ este un lant, de cres, tere ı̂n R relativ la f ⇔
⇔ (x0 , x1 , . . . , xk ) este un drum elementar de la s la t ı̂n graful rezidual Gf .

Exemplul 13.2.6. Pentru ret, eaua R s, i fluxul f ′ reprezentate ı̂n Figura 13.2.1, graful rezidual Gf ′ este
reprezentat ı̂n Figura 13.2.2, capacităt, ile reziduale fiind ment, ionate pe arce.
(1, 4, 2, 3, 6) este un drum elementar ı̂n graful rezidual Gf ′ , deci µ′ = [1, 4, 2, 3, 6] este un lant, de
cres, tere ı̂n ret, eaua R relativ la fluxul f ′ .

Implementarea Algoritmului Ford-Fulkerson


Conform rezultatelor de mai sus obt, inem următorul algoritm pentru determinarea unui flux de valoare
maximă ı̂ntr-o ret, ea.
Algoritmul 13.2.1 (Ford-Fulkerson). Fie R = (G, s, t, c) o ret, ea, unde G = (V, E).
Conform Teoremei 13.2.1, schit, a algoritmului, descrisă ı̂n pseudocod, are forma
TEMA 13. FLUXURI ÎN RET, ELE 144

Figura 13.2.2:

FORD FULKERSON :
f ← 0; // sau f ← f0 , unde f0 este un flux
// disponibil init, ial
repeat
if (EXISTĂ LANT
, DE CRES
, TERE) then
// există lant, uri de cres, tere
// relativ la fluxul curent f
µ ← LANT
, DE CRES
, TERE; // se determină
// un astfel de lant, de cres, tere
f ← f ⊕ r(µ); // se măres, te valoarea fluxului curent,
// de-a lungul lant, ului de cres, tere
while (EXISTĂ LANT
, DE CRES
, TERE);
// nu mai există lant, uri de cres, tere,
// deci fluxul curent este de valoare maximă
AFIS, ARE(f ); // se afis, ează fluxul de valoare maximă
În continuare detaliem implementarea acestui algoritm. Presupunem că

V = {1, 2, . . . , n}, s = 1, t = n,

cu n ≥ 2.
Pentru depistarea s, i memorarea eventualelor lant, uri de cres, tere relativ la fluxul curent vom utiliza
doi vectori SEL s, i T AT A având semnificat, ia

1, dacă există un C-lant, de la nodul s = 1 la nodul i,
SEL[i] = ∀i ∈ {1, . . . , n},
0, ı̂n caz contrar,
T AT A[i] = predecesorul direct al nodului i pe C-lant, ul de la nodul s = 1 la nodul i, ∀ i ∈ {1, . . . , n}.

Algoritmul descris ı̂n pseudocod are forma (detaliată)


TEMA 13. FLUXURI ÎN RET, ELE 145

FORD FULKERSON :
CITIRE RET , EA; // se cites, te ret, eaua dată
for i = 1, n do
for j = 1, n do f [i, j] ← 0; // fluxul init, ial
vmax ← 0; // valoarea fluxul maxim
repeat // se caută lant, uri de cres, tere a fluxului curent,
// folosind Observat, ia 13.2.6
CALCUL REZIDUURI; // se determină reziduul s, i
// graful rezidual ale ret, elei relativ la fluxul curent
SEL[1] ← 1; // se selectează nodul sursă
for i = 2, n do SEL[i] ← 0;
T AT A[1] ← 0; // pt. memorarea C-lant, urilor
// ce pornesc din nodul sursă
DF(1); // se parcurge graful rezidual, memor^ and
// C-lant, urile ce pornesc din nodul sursă;
// parcurgerea DF, poate fi ı ^nlocuită cu
// parcurgerea BF (Algoritmul Edmonds-Karp )
if (SEL[n] = 1) then // s-a selectat nodul destinat, ie,
// deci există lant, de cres, tere a fluxului
rmin ← ∞; // reziduul minim, de-a lungul
// lant, ului de cres, tere
DET LANT CR; // se determină lant, ul de cres, tere
// a fluxului s, i reziduul minim
MĂRIRE FLUX; // se măres, te fluxul curent, de-a
// lungul lant, ului de cres, tere
vmax ← vmax + rmin;; // se actualizează valoarea
// fluxului curent
while (SEL[n] = 1);
// nu mai există lant, uri de cres, tere a fluxului,
// deci fluxul curent este maxim
AFIS, ARE REZULTATE;
// se afis, ează fluxul maxim s, i valoarea sa,
// eventual s, i sect, iunea de capacitate minimă,
// calculată conform (13.2.1) astfel:
// S = {i ∈ {1, . . . , n} | SEL[i] = 1},
// T = {i ∈ {1, . . . , n} | SEL[i] = 0}
Funct, iile utilizate sunt descrise ı̂n continuare.
TEMA 13. FLUXURI ÎN RET, ELE 146

CALCUL REZIDUURI :
for i = 1, n do
for j = 1, n do
if (f [i, j] < c[i, j]) then
r[i, j] ← c[i, j] − f [i, j];
else
if (f [j, i] > 0) then
r[i, j] ← f [j, i];
else
r[i, j] ← 0;

DF(i) : // recursiv
for j = 1, n do
if (r[i, j] > 0 and SEL[j] = 0) then
T AT A[j] ← i; SEL[j] ← 1;;
DF(j);

DET LANT CR : // se determină reziduul minim de-a


// lungul lant, ului de cres, tere, parcurs de la n către 1
j ← n;
while (j 6= 1) do
i ← T AT A[j];
if (rmin > r[i, j]) then rmin ← r[i, j];
j ← i;

MĂRIRE FLUX : // se măres, te fluxul de-a lungul


// lant, ului de cres, tere, parcurs de la n către 1
j ← n;
while (j 6= 1) do
i ← T AT A[j];
if (c[i, j] > f [i, j]) then
f [i, j] ← f [i, j] + rmin;
else
f [j, i] ← f [j, i] − rmin;
j ← i;

Teorema 13.2.2 (de corectitudine a Algoritmului Ford-Fulkerson). În contextul Algoritmului


13.2.1, fie R = (G, s, t, c) ret, eaua dată, unde G = (V, E). Presupunem că toate capacităt, ile arcelor
ret, elei sunt numere ı̂ntregi, adică
c(i, j) ∈ N, ∀(i, j) ∈ E.
Fie f0 fluxul init, ial. Presupunem că toate componentele fluxului f0 sunt numere ı̂ntregi, adică
f0 (i, j) ∈ N, ∀(i, j) ∈ E,
de exemplu f0 = fluxul nul.
Fie µ1 , µ2 , . . . , µk lant, urile de cres, tere succesive obt, inute, k ≥ 0, s, i fie f1 = f0 ⊕ r0 (µ1 ),
f2 = f1 ⊕ r1 (µ2 ), . . . , fk = fk−1 ⊕ rk−1 (µk ) fluxurile succesive obt, inute, unde µ1 este lant, de cres, tere
relativ la f0 , µ2 este lant, de cres, tere relativ la f1 , . . . , µk este lant, de cres, tere relativ la fk−1 , s, i nu
mai există lant, uri de cres, tere relativ la fk . Atunci fk este un flux de valoare maximă ı̂n ret, eaua R.
TEMA 13. FLUXURI ÎN RET, ELE 147

Mai mult, toate componentele fluxului fk s, i valoarea acestuia sunt numere ı̂ntregi.
Demonstrat, ie. Conform Lemei 13.2.1, f1 , f2 , . . . , fk sunt fluxuri s, i v(f1 ) = v(f0 ) + r0 (µ1 ), v(f2 ) =
v(f1 ) + r1 (µ2 ) = v(f0 ) + r0 (µ1 ) + r1 (µ2 ), . . . , v(fk ) = v(fk−1 ) + rk−1 (µk ) = v(f0 ) + r0 (µ1 ) + r1 (µ2 ) +
· · · + rk−1 (µk ).
Deoarece toate capacităt, ie c(i, j), i, j ∈ V , s, i toate componentele f0 (i, j), i, j ∈ V ale fluxului
init, ial sunt numere ı̂ntregi, conform Definit, iei 13.2.3 s, i Lemei 13.2.1 rezultă succesiv că

(r0 )µ1 (i, j) ∈ N∗ , ∀(i, j) ∈ E(µ1 ), r0 (µ1 ) ∈ N∗ ,


f1 (i, j) ∈ N, ∀i, j ∈ V, v(f1 ) ∈ N∗ ;
(r1 )µ2 (i, j) ∈ N∗ , ∀(i, j) ∈ E(µ2 ), r1 (µ2 ) ∈ N∗ ,
f2 (i, j) ∈ N, ∀i, j ∈ V, v(f2 ) ∈ N∗ ; . . . ,
(rk−1 )µk (i, j) ∈ N∗ , ∀(i, j) ∈ E(µk ), rk−1 (µk ) ∈ N∗ ,
fk (i, j) ∈ N, ∀i, j ∈ V, v(fk ) ∈ N∗ . (13.2.2)

Deci
v(fk ) = v(f0 ) + r0 (µ1 ) + r1 (µ2 ) + · · · + rk−1 (µk ) ≥ v(f0 ) + k.
Evident, ({s}, V \ {s}) este o sect, iune ı̂n R având capacitatea
X
c({s}, V \ {s}) = c(s, j) ≤ (card (V ) − 1)cmax ,
j∈V \{s}

unde
cmax = max{c(i, j) | (i, j) ∈ E}
(capacitatea maximă a arcelor ret, elei). Conform Lemei 13.2.3 avem

v(fk ) ≤ c({s}, V \ {s}),

s, i astfel obt, inem


k ≤ (card (V ) − 1)cmax − v(f0 ),
deci numărul k de pas, i ai algoritmului (numărul de lant, uri de cres, tere succesive construite) este finit,
adică există k ∈ N astfel ı̂ncât ret, eaua R nu mai cont, ine lant, uri de cres, tere relativ la fluxul fk .
Conform Teoremei 13.2.1 rezultă că fk este un flux de valoare maximă ı̂n R. Conform (13.2.2), toate
componentele fluxului fk s, i valoarea acestuia sunt numere ı̂ntregi.
Exemplul 13.2.7. Pentru ret, eaua R din Figura 13.1.1, aplicarea Algoritmului Ford-Fulkerson este
evident, iată ı̂n Figurile 13.2.3-13.2.8.
Lant, urile succesive de cres, tere relativ la fluxul curent sunt evident, iate prin ı̂ngros, are, s, i anume:

µ1 = [1, 2, 3, 5, 6],
µ2 = [1, 2, 3, 6],
µ3 = [1, 4, 3, 6],
µ4 = [1, 4, 5, 3, 6],
µ4 = [1, 4, 5, 6].

Fluxul reprezentat ı̂n Figura 13.2.8 este de valoare maximă, deoarece nu mai există lant, uri de cres, tere
ı̂n R relativ la acest flux. Valoarea acestui flux este 11.
TEMA 13. FLUXURI ÎN RET, ELE 148

Figura 13.2.3: Figura 13.2.4:

Figura 13.2.5: Figura 13.2.6:

Pentru acest flux maxim, avem C-lant, uri de la nodul sursă s = 1 doar la nodurile 1 s, i 4, aceste
C-lant, uri sunt evident, iate prin ı̂ngros, are ı̂n Figura 13.2.8. Conform (13.2.1) rezultă că

(S, T ) = ({1, 4}, {2, 3, 5, 6})

este o sect, iune de capacitate minimă ı̂n R.


Observat, ia 13.2.7. Algoritmul Ford-Fulkerson este specific metodei de programare Greedy. Pen-
tru o ret, ea cu n noduri s, i m arce având toate capacităt, ile numere ı̂ntregi s, i pentru un flux init, ial
având toate componentele numere ı̂ntregi, de exemplu fluxul nul, conform demonstrat, iei Teoremei
13.2.2 rezultă că numărul de lant, uri de cres, tere necesare măririi succesive a fluxului init, ial, până
se ajunge la un flux de valoare maximă, este de cel mult (n − 1)cmax , unde cmax este capacitatea
maximă a arcelor ret, elei. Pentru fiecare flux curent, algoritmul necesită calculul reziduurilor celor
m arce, parcurgerea acestora pentru depistarea unui eventual lant, de cres, tere, determinarea acestui
lant, (de lungime cel mult m) s, i mărirea fluxului curent de-a lungul lant, ului de cres, tere, operat, ii
având complexitatea O(m). Rezultă că Algoritmul Ford-Fulkerson are complexitatea O(mncmax ).
Observat, ia 13.2.8. Pentru o ret, ea având toate capacităt, ile numere rat, ionale, putem aplica Algoritmul
Ford-Fulkerson astfel:

• se ı̂nmult, esc toate capacităt, ile arcelor cu numitorul lor comun M, obt, inându-se o ret, ea având
toate capacităt, ile numere ı̂ntregi;

• se determină un flux de valoare maximă ı̂n această ret, ea, aplicând Algoritmul Ford-Fulkerson
(pentru un flux init, ial având toate componentele numere ı̂ntregi, de exemplu fluxul nul);
TEMA 13. FLUXURI ÎN RET, ELE 149

Figura 13.2.7: Figura 13.2.8:

• se ı̂mpart toate componentele acestui flux prin M, obt, inându-se un flux de valoare maximă ı̂n
ret, eaua init, ială.

Evident, toate componentele acestui flux maxim s, i valoarea lui sunt numere rat, ionale.
Observat, ia 13.2.9. Pentru o ret, ea având s, i capacităt, i numere irat, ionale, Algoritmul Ford-Fulkerson
poate să fie inoperabil, fiind posibil ca numărul de pas, i ai algoritmului (numărul de lant, uri de cres, tere
succesive construite) să fie infinit, deoarece valorile reziduale ale lant, urilor de cres, tere succesive
construite pot forma o serie convergentă.
Totus, i, prin impunerea unor modalităt, i judicioase de construire a lant, urilor de cres, tere succesive
ı̂n cadrul Algoritmului Ford-Fulkerson, se obt, in algoritmi care rezolvă problema fluxului maxim s, i ı̂n
cazul capacităt, ilor irat, ionale. Un astfel de algoritm, bazat pe parcurgerea ı̂n lăt, ime (BF) a grafului
rezidual, este Algoritmul Edmonds-Karp.

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