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
7 Grafuri hamiltoniene 75
1
TEMATICA 2
8 Grafuri turneu 76
10 Grafuri bipartite 78
11 Grafuri planare 79
• 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
74
Tema 7
Grafuri hamiltoniene
75
Tema 8
Grafuri turneu
76
Tema 9
77
Tema 10
Grafuri bipartite
78
Tema 11
Grafuri planare
79
Tema 12
80
Tema 13
81