Documente Academic
Documente Profesional
Documente Cultură
2022
Tematica
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
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
• 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)
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.
[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.
[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.
[20] D.E. Knuth, The Art Of Computer Programming. Vol. 4A: Combinatorial Algorithms, Addison-Wesley, Mas-
sachusetts, 2011.
[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.
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.
[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
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
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)}.
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
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]];
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, 1, 1), (1, 1, 2), (1, 2, 1), (1, 2, 2), (2, 1, 1), (2, 1, 2), (2, 2, 1), (2, 2, 2).
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).
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
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
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]];
(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).
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
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.
• ...
• 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
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
• 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
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
n = n1 + n2 + · · · + nm ,
18
TEMA 2. PARTIT, II 19
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);
n = 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.
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,
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
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
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:
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
A = {a, b, c} = {a, b} ∪ {c} = {a, c} ∪ {b} = {a} ∪ {b, c} = {a} ∪ {b} ∪ {c},
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};
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
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.
• 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}
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:
Definit, ia 3.1.9. Fie G1 = (V1 , E1 ) s, i G2 = (V2 , E2 ) două grafuri (ambele orientate sau ambele
neorientate).
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
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:
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).
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ă.
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 ,
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,
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
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
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.
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.
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:
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
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
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
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:
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:
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.
[v1 , e1 , v2 , e2 , . . . , vk , ek , vk+1 ],
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
[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.
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
Proprietăt, ile teoretice s, i algoritmice de bază ale arborilor vor fi evident, iate ı̂n capitolul următor.
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:
• 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
DF (3) : 3, 1, 2, 4, 5,
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
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,
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
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
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
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.
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)
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 )
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
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
Arbori s, i arborescent, e
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
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
(m − 1) − n + (k + 1) = 0, deci m − n + k = 0.
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.
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ă
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:
• 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 ;
1 2 3
4 5 6
Figura 4.1.1:
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) 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
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
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:
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
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
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;
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.
1 2
3 4
Figura 4.4.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
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
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
(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.
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).
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
det[M ]11 + det[M ]22 + det[M ]33 + det[M ]44 + det[M ]55
= 2 + 2 + 4 + 0 + 0 = 8.
Tema 5
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.
a) Dacă H = (U, F ) este un subgraf al lui G, atunci costul (ponderea) lui H este
X
c(H) = c(e)
e∈F
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
30 40
1 2 3 1 2 3
10 20 10 10 20 10
4 5 6 4 5 6
40 30
Î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
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
Algoritmul 5.2.2 (Prim). Fie (G, c) un graf ponderat conex cu G = (V, E), V = {v1 , . . . , vn }.
Algoritmul are n pas, i.
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
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
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:
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
CC[x] 6= CC[y].
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
Grafuri euleriene
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.
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 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 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
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ă
”⇐” 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
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
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
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]
Avem card (A) = d(x) s, i card (B) = d(y), deci, conform ipotezei,
[x = v1 , v2 , . . . , vk , y = vn , vn−1 , . . . , vk+1 , x]
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
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
dH (v) ≤ n − 1 − k.
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)
dp ≤ p, dq ≤ q, p 6= q ⇒ dp + dq ≥ n,
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
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
V ′ = V ∪ {v0 }, E ′ = E ∪ {[v0 , x] | x ∈ V }.
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,
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),
Notăm
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 ).
V3 ⊆ V (µ∗3 ) ⊆ V2 ∪ V3
v2 ∈ V2∗
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ă
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 ),
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
deci aplicând Teorema lui Meyniel rezultă că graful G este hamiltonian.
Tema 8
Grafuri turneu
2 3
1 4
6 5
Figura 8.1.1:
93
TEMA 8. GRAFURI TURNEU 94
χ(G) ∈ {1, 2, . . . , n}
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:
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:
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).
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
1 1
5 2 5 2
4 3 4 3
1 1
5 2 5 2
4 3 4 3
1 1
5 2 5 2
4 3 4 3
1 1
5 2 5 2
4 3 4 3
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];
• 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);
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:
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:
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
1 2
3 4
5 6
Figura 10.1.1:
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
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
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
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 ′ .
v = w0 ∈ X ′ , w1 ∈ Y ′ , w2 ∈ X ′ , . . . , w2p+1 = y ∈ Y ′ .
• 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,
– 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:
• 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
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:
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ă
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
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:
1 4 1 4
2 5 2 5
3 6 3 6
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)
(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
1 4 1 4 1 4
2 5 2 5 2 5
3 6 3 6 3 6
1 4 1 4 1 4
2 5 2 5 2 5
3 6 3 6 3 6
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);
• 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
Grafuri planare
1 2 1
4 3 3
1 2 1
4
4 2 5
3 3
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.
f = 1 + γ(G),
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
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),
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:
χ(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.
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,
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,
6 7
5 8 2 3
6 7
2 3 5 8
1 4 1 4
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:
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.
Figura 11.4.8:
Tema 12
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.
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
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
• 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
s, i se trece la pasul k + 1.
ti = c⋆si , ∀ i ∈ {1, . . . , n}
tik = c⋆sik ,
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
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ă
Deci
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
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
µ = (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
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,
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;
30 50 100
1 2 3 4
20
70 6
110
5
40
10
7 8 9 10
130
Figura 12.2.1:
• 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.
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
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
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.
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:
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ă
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 µ
Observat, ia 13.2.2. În contextul lemei anterioare, conform Observat, iei 13.2.1 avem
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
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
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
pentru orice i ∈ S s, i j ∈ T .
TEMA 13. FLUXURI ÎN RET, ELE 143
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:
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 ′ .
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}.
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);
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ă
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
µ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
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ă
• 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
• 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.