ALGORITMICA GRAFURILOR

Conf. univ. dr. COSTEL B
˘
ALC
˘
AU
2011
Tematica
1 Aranjamente, combin˘ari, permut˘ari 4
1.1 Preliminarii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2 Produs cartezian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3 Submult ¸imi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.4 Aranjamente cu repetit ¸ie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.5 Aranjamente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.6 Permut˘ ari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.7 Combin˘ ari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.8 Combin˘ ari cu repetit ¸ie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.9 Permut˘ ari cu repetit ¸ie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2 Partit ¸ii 17
2.1 Compuneri ale unui num˘ ar natural . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.2 Partit ¸ii ale unui num˘ ar natural . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.3 Partit ¸ii ale unei mult ¸imi finite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3 Grafuri 24
3.1 Definit ¸ii generale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.2 Reprezentarea grafurilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.3 Grade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.4 Conexitate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.5 Parcurgerea grafurilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.6 Algoritmul Roy-Warshall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
4 Arbori 42
4.1 Num˘ arul ciclomatic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.2 Teorema de caracterizare a arborilor . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.3 Num˘ ararea arborilor part ¸iali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.4 Arbori part ¸iali de cost minim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
5 Arborescent ¸e 53
5.1 Teorema de caracterizare a arborescent ¸elor . . . . . . . . . . . . . . . . . . . . . . . . 53
5.2 Arborescent ¸e part ¸iale de cost minim . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
6 Clase particulare de grafuri 61
6.1 Grafuri euleriene . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
6.2 Grafuri hamiltoniene . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
6.3 Grafuri bipartite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
1
TEMATICA 2
7 Distant ¸e ¸si drumuri minime 73
7.1 Expunerea problemei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
7.2 Algoritmul Dijkstra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
7.3 Algoritmul Roy-Floyd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
8 Fluxuri ˆın ret ¸ele de transport 81
8.1 Problema fluxului maxim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
8.2 Algoritmul Ford-Fulkerson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Bibliografie
[1] Gh. Barbu, I. V˘ aduva, M. Bolo¸steanu, Bazele informaticii, Editura Tehnic˘ a, Bucure¸sti, 1997.
[2] Gh. Barbu, V. P˘ aun, Calculatoare personale ¸si programare ˆın C/C++, Editura Didactic˘ a ¸si Pedagogic˘ a, Bu-
cure¸sti, 2005.
[3] C. B˘ alc˘au, Combinatoric˘ a ¸si teoria grafurilor, Editura Universit˘ at ¸ii din Pite¸sti, Pite¸sti, 2007.
[4] E. Ciurea, Algoritmi. Introducere ˆın algoritmica grafurilor, Editura Tehnic˘ a, Bucure¸sti, 2001.
[5] E. Ciurea, L. Ciupal˘ a, Algoritmi. Introducere ˆın algoritmica fluxurilor ˆın ret ¸ele, Editura Matrix Rom, Bucure¸sti,
2006.
[6] C. Croitoru, Tehnici de baz˘ a ˆın optimizarea combinatorie, Editura Universit˘ at ¸ii ”Al. I. Cuza”, Ia¸si, 1992.
[7] L. Livovschi, H. Georgescu, Sinteza ¸si analiza algoritmilor, Editura S¸tiint ¸ific˘a ¸si Enciclopedic˘ a, Bucure¸sti, 1986.
[8] D.R. Popescu, Combinatoric˘ a ¸si teoria grafurilor, Societatea de S¸tiint ¸e Matematice din Romˆania, Bucure¸sti,
2005.
[9] C.P. Popovici, H. Georgescu, L. State, Bazele informaticii. Vol. I ¸si II, Editura Universit˘ at ¸ii din Bucure¸sti,
Bucure¸sti, 1990-1991.
[10] L. State, Elemente de logic˘ a matematic˘ a ¸si demonstrarea automat˘ a a teoremelor, Tipografia Universit˘ at ¸ii din
Bucure¸sti, Bucure¸sti, 1989.
[11] T. Toadere, Grafe. Teorie, algoritmi ¸si aplicat ¸ii, Editura Albastr˘ a, Cluj-Napoca, 2002.
[12] I. Tomescu, Combinatoric˘ a ¸si teoria grafurilor, Tipografia Universit˘ at ¸ii din Bucure¸sti, Bucure¸sti, 1978.
[13] I. Tomescu, Probleme de combinatoric˘ a ¸si teoria grafurilor, Editura Didactic˘ a ¸si Pedagogic˘ a, Bucure¸sti, 1981.
[14] I. Tomescu, Data structures, Editura Universit˘ at ¸ii din Bucure¸sti, Bucure¸sti, 2004.
3
Tema 1
Aranjamente, combin˘ari, permut˘ari
1.1 Preliminarii
ˆ
In aceast˘ a lect ¸ie vom prezenta formule de num˘ arare ¸si algoritmi de generare (enumerare) pentru
cele mai cunoscute familii de obiecte combinatoriale: produs cartezian, submult ¸imi, aranjamente
(f˘ar˘ a repetit ¸ie, cu repetit ¸ie sau ordonate), combin˘ ari (f˘ ar˘ a repetit ¸ie sau cu repetit ¸ie), permut˘ari (f˘ ar˘ a
repetit ¸ie sau cu repetit ¸ie). Reamintim ˆın continuare cˆ ateva not ¸iuni uzuale.
Definit ¸ia 1.1.1. Fie A o mult ¸ime finit˘ a. Num˘ arul de elemente ale lui A, notat cu card (A), se
nume¸ste cardinalul mult ¸imii A.
Definit ¸ia 1.1.2. Fie A un alfabet (adic˘ a o mult ¸ime finit˘ a) ¸si n ∈ N

. O secvent ¸˘a de forma
a = a
1
a
2
. . . a
n
, cu a
1
, a
2
, . . . , a
n
∈ A,
se nume¸ste cuvˆant de lungime n peste alfabetul A. Lungimea cuvˆantului a se noteaz˘a cu [a[.
Observat ¸ia 1.1.1. Evident, cuvˆantul a
1
a
2
. . . a
n
poate fi identificat cu vectorul (a
1
, a
2
, . . . , a
n
).
Definit ¸ia 1.1.3. Fie A o mult ¸ime (alfabet) total ordonat˘ a ¸si x = (x
1
, . . . , x
n
), y = (y
1
, . . . , y
m
)
doi vectori (cuvinte) cu elemente (litere) din A. Spunem c˘ a x este mai mic decˆ at y ˆın ordine
lexicografic˘ a ¸si not˘am x ≺ y dac˘ a
(x
1
, . . . , x
n
) = (y
1
, . . . , y
n
) ¸si m > n
sau dac˘a exist˘a un indice i, i ≤ min¦m, n¦, astfel ˆıncˆ at
(x
1
, . . . , x
i−1
) = (y
1
, . . . , y
i−1
) ¸si x
i
< y
i
.
Definit ¸ia 1.1.4. Fie x ∈ R ¸si n ∈ N. Not˘ am
[x]
n
=



1, dac˘ a n = 0,
x(x −1) . . . (x −n + 1)
. .. .
n factori
, dac˘ a n ≥ 1,
[x]
n
=



1, dac˘ a n = 0,
x(x + 1) . . . (x + n −1)
. .. .
n factori
, dac˘ a n ≥ 1.
[x]
n
se nume¸ste polinomul factorial descresc˘ ator de gradul n, iar [x]
n
se nume¸ste polinomul
factorial cresc˘ ator de gradul n.
4
TEMA 1. ARANJAMENTE, COMBIN
˘
ARI, PERMUT
˘
ARI 5
1.2 Produs cartezian
Definit ¸ia 1.2.1. Produsul cartezian al mult ¸imilor A
1
, A
2
, . . . , A
n
(n ∈ N

) este mult ¸imea
A
1
A
2
. . . A
n
= ¦(a
1
, a
2
, . . . , a
n
)[a
1
∈ A
1
, a
2
∈ A
2
, . . . , a
n
∈ A
n
¦.
Exemplul 1.2.1. ¦a, b¦ ¦+, −¦ ¦c¦ = ¦(a, +, c), (a, −, c), (b, +, c), (b, −, c)¦.
Propozit ¸ia 1.2.1 (de num˘arare a produsului cartezian). Fie n ∈ N

¸si A
1
, A
2
, . . . , A
n
mult ¸imi
finite. Atunci card (A
1
A
2
. . . A
n
) = card (A
1
) card (A
2
) . . . card (A
n
).
Demonstrat ¸ie. Se utilizeaz˘ a metoda induct ¸iei matematice dup˘ a n.
Algoritmul 1.2.1 (de generare a produsului cartezian). Fie mult ¸imile standard
A
1
= ¦1, 2, . . . , m
1
¦, A
2
= ¦1, 2, . . . , m
2
¦, . . . , A
n
= ¦1, 2, . . . , m
n
¦.
Vom utiliza ”regula urm˘atorului”.
• Primul element al produsului cartezian A
1
A
2
. . . A
n
, ˆın ordine lexicografic˘ a, este
(c
1
, c
2
, . . . , c
n
) = (1, 1, . . . , 1).
• Un element arbitrar (curent)
(c
1
, . . . , c
k−1
, c
k
, c
k+1
, . . . , c
n
)
are un element urm˘ ator dac˘ a ¸si numai dac˘ a exist˘ a un indice k ∈ ¦n, . . . , 1¦ astfel ˆıncˆat c
k
< m
k
.
ˆ
In acest caz, luˆand cel mai mare indice k cu aceast˘ a proprietate, elementul urm˘ ator, ˆın ordine
lexicografic˘ a, este
(c
1
, . . . , c
k−1
, c
k
+ 1, 1, . . . , 1).
ˆ
In pseudocod, algoritmul poate fi descris sub forma
produs cartezian(n, m) :
¦ pentru i = 1, n c
i
← 1;
afi¸sare(c, n);
repet˘a
¦ k ← n;
cˆat timp (c
k
= m
k
) ¸si (k > 0) k ← k −1;
dac˘a (k > 0)
¦ c
k
← c
k
+ 1;
pentru i = k + 1, n c
i
← 1;
afi¸sare(c, n);
¦
¦
cˆat timp (k > 0);
¦,
unde funct ¸ia de afi¸sare este
afi¸sare(c, n) :
¦ pentru i = 1, n afi¸seaz˘a c
i
;
¦.
Programul C++ corespunz˘ ator este:
TEMA 1. ARANJAMENTE, COMBIN
˘
ARI, PERMUT
˘
ARI 6
#include<iostream.h> // Generarea ITERATIVA - ordine LEXICOGRAFICA -
#include<conio.h> // a PRODUSULUI CARTEZIAN
int n,m[50],nr=0; // nr=variabila pt. numerotare
void afisare(int x[50],int nx)
{ int i;
cout<<++nr<<") ";
for(i=1;i<=nx;i++) cout<<x[i]<<’ ’;
cout<<endl;
if(wherey()==25)
{ cout<<" <enter> pt. continuare";
getch();clrscr();
}
}
void produs_cartezian(int n,int m[50])
{ int c[50],i,k;
for(i=1;i<=n;i++) c[i]=1;
afisare(c,n);
do
{ k=n;
while ((c[k]==m[k]) && (k>0)) k--;
if (k>0)
{ c[k]++;
for(i=k+1;i<=n;i++) c[i]=1;
afisare(c,n);
}
}
while (k>0);
}
void main(void)
{ int i;
clrscr();
cout<<"Dati numarul de multimi: n=";cin>>n;
for(i=1;i<=n;i++)
{ cout<<"Dati numarul de elemente ale multimii A"<<i<<": m["<<i<<"]=";
cin>>m[i];
}
cout<<"Elementele produsului cartezian sunt:\n";
produs_cartezian(n,m);
getch();
}
Observat ¸ia 1.2.1. Pentru generarea produsului cartezian A
1
A
2
. . . A
n
al unor mult ¸imi finite
arbitrare
A
1
= ¦a
11
, a
12
, . . . , a
1m
1
¦, A
2
= ¦a
21
, a
22
, . . . , a
2m
2
¦, . . . , A
n
= ¦a
n1
, a
n2
, . . . , a
nm
n
¦
se poate folosi algoritmul anterior, bazat pe generarea indicilor, ˆınlocuind afi¸sarea indicilor c
i
cu
afi¸sarea elementelor corespunz˘atoare a
ic
i
din mult ¸imile A
i
, adic˘ a ˆınlocuind funct ¸ia afi¸sare(c, n) cu
funct ¸ia
afi¸sare(c, a, n) :
¦ pentru i = 1, n afi¸seaz˘a a
ic
i
;
¦.
1.3 Submult ¸imi
Propozit ¸ia 1.3.1 (de num˘arare a submult ¸imilor). Fie A o mult ¸ime finit˘ a ¸si {(A) mult ¸imea
tuturor submult ¸imilor (p˘ art ¸ilor) lui A. Atunci card ({(A)) = 2
card (A)
.
TEMA 1. ARANJAMENTE, COMBIN
˘
ARI, PERMUT
˘
ARI 7
Demonstrat ¸ie. Fie A = ¦a
1
, a
2
, . . . , a
n
¦, n ∈ N

. Not˘ am ¦1, 2¦
n
= ¦1, 2¦ . . . ¦1, 2¦
. .. .
de n ori
.
Definim funct ¸iile α : {(A) → ¦1, 2¦
n
¸si β : ¦1, 2¦
n
→ {(A) prin:
• ∀B ∈ {(A), α(B) = (c
1
, c
2
, . . . , c
n
), unde c
i
=

1, dac˘a a
i
∈ B,
2, dac˘a a
i
∈ B;
• ∀ (c
1
, c
2
, . . . , c
n
) ∈ ¦1, 2¦
n
, β(c
1
, c
2
, . . . , c
n
) = ¦a
i
[c
i
= 1, i ∈ ¦1, . . . , n¦¦.
Funct ¸iile α ¸si β sunt inverse una celeilalte, deci sunt bijective ¸si card ({(A)) = card (¦1, 2¦
n
) = 2
n
.
Exemplul 1.3.1. Pentru A = ¦a, b, c¦, corespondent ¸a submult ¸imi ↔produs cartezian din demonstrat ¸ia
anterioar˘ a este redat˘ a ˆın urm˘atorul tabel:
(c
1
, c
2
, c
3
) ∈ ¦1, 2¦
3
B ∈ {(A)
(1,1,1) ¦a, b, c¦
(1,1,2) ¦a, b¦
(1,2,1) ¦a, c¦
(1,2,2) ¦a¦
(2,1,1) ¦b, c¦
(2,1,2) ¦b¦
(2,2,1) ¦c¦
(2,2,2) ∅
Deci A are 2
3
= 8 submult ¸imi.
Algoritmul 1.3.1 (de generare a submult ¸imilor). Fie mult ¸imea A = ¦a
1
, a
2
, . . . , a
n
¦. Conform
demonstrat ¸iei anterioare, putem genera produsul cartezian ¦1, 2¦
n
cu Algoritmul 1.2.1 ˆınlocuind
afi¸sarea elementelor (c
1
, . . . , c
n
) cu afi¸sarea submult ¸imilor corespunz˘ atoare
B = ¦a
i
[c
i
= 1, i ∈ ¦1, . . . , n¦¦.
Obt ¸inem urm˘atorul algoritm descris ˆın pseudocod.
submult ¸imi(a, n) :
¦ pentru i = 1, n c
i
← 1;
afi¸sare(c, a, n);
repet˘a
¦ k ← n;
cˆat timp (c
k
= 2) ¸si (k > 0) k ← k −1;
dac˘a (k > 0)
¦ c
k
← 2;
pentru i = k + 1, n c
i
← 1;
afi¸sare(c, a, n);
¦
¦
cˆat timp (k > 0);
¦,
unde funct ¸ia de afi¸sare este
afi¸sare(c, a, n) :
¦ pentru i = 1, n dac˘a (c
i
= 1) afi¸seaz˘a a
i
;
¦.
TEMA 1. ARANJAMENTE, COMBIN
˘
ARI, PERMUT
˘
ARI 8
1.4 Aranjamente cu repetit ¸ie
Propozit ¸ia 1.4.1 (de num˘arare a aranjamentelor cu repetit ¸ie). Fie m, n ∈ N. Atunci num˘ arul
de cuvinte de lungime n peste un alfabet cu m litere este egal cu m
n
.
Demonstrat ¸ie. Fie B = ¦1, 2, . . . , m¦ ¸si ( = ¦(c
1
, c
2
, . . . , c
n
)[c
i
∈ B ∀ i¦. Cum ( = B
n
, conform
Propozit ¸iei 1.2.1 avem card (() = m
n
.
Definit ¸ia 1.4.1. Cuvintele num˘ arate ˆın propozit ¸ia anterioar˘ a se numesc aranjamente cu repetit ¸ie
de m luate cˆate n. Prin abuz de limbaj, ¸si num˘arul lor, adic˘ a m
n
, se nume¸ste tot aranjamente cu
repetit ¸ie de m luate cˆ ate n.
Exemplul 1.4.1. Pentru m = 2 ¸si n = 3, aranjamente cu repetit ¸ie sunt, ˆın ordine lexicografic˘ a:
(1, 1, 1), (1, 1, 2), (1, 2, 1), (1, 2, 2), (2, 1, 1), (2, 1, 2), (2, 2, 1), (2, 2, 2).
Deci avem 2
3
= 8 aranjamente cu repetit ¸ie.
Algoritmul 1.4.1 (de generare a aranjamentelor cu repetit ¸ie, sub form˘a de cuvinte). Pentru
mult ¸imea standard B = ¦1, 2, . . . , m¦, conform demonstrat ¸iei anterioare putem genera produsul
cartezian B
n
, cu Algoritmul 1.2.1, luˆ and m
1
= m
2
= = m
n
= m.
Observat ¸ia 1.4.1. Pentru o mult ¸ime A = ¦a
1
, a
2
, . . . , a
n
¦ oarecare putem genera indicii (c
1
, . . . , c
n
)
cu algoritmul anterior ¸si afi¸sa elementele corespunz˘atoare acestor indici (a
c
1
, . . . , a
c
n
).
1.5 Aranjamente
Propozit ¸ia 1.5.1 (de num˘ arare a aranjamentelor). Fie m, n ∈ N. Atunci num˘ arul 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¦ ¸si (
1
= ¦(c
1
, c
2
, . . . , c
n
)[c
i
∈ B ∀ i, c
i
= c
j
∀ i = j¦. Avem
(
1
= ¦(c
1
, c
2
, . . . , c
n
)[c
1
∈ ¦1, . . . , m¦, c
2
∈ ¦1, . . . , m¦ ` ¦c
1
¦, c
3
∈ ¦1, . . . , m¦ ` ¦c
1
, c
2
¦, . . . , c
n

¦1, . . . , m¦ ` ¦c
1
, . . . , c
n−1
¦¦, deci card ((
1
) = m(m−1)(m−2) . . . (m−n + 1) = [m]
n
.
Definit ¸ia 1.5.1. Cuvintele num˘ arate ˆın propozit ¸ia anterioar˘ a se numesc aranjamente (f˘ar˘ a repetit ¸ie)
de m luate cˆate n. De asemenea ¸si num˘ arul lor, adic˘ a [m]
n
, se nume¸ste tot aranjamente (f˘ ar˘ a
repetit ¸ie) de m luate cˆ ate n ¸si se mai noteaz˘a cu A
n
m
.
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 ¸si n = 2, aranjamentele sunt, ˆın ordine lexicografic˘ a:
(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˘ari
Propozit ¸ia 1.6.1 (de num˘arare a permut˘arilor). Fie n ∈ N. Atunci num˘ arul de cuvinte ce
cont ¸in exact o dat˘ a fiecare liter˘ a a unui alfabet cu n litere este egal cu n!, unde
n! = 1 2 3 n (n factorial), 0! = 1.
TEMA 1. ARANJAMENTE, COMBIN
˘
ARI, PERMUT
˘
ARI 9
Demonstrat ¸ie. Lu˘ am m = n ˆın Propozit ¸ia 1.5.1 ¸si folosim egalitatea [n]
n
= n(n −1) . . . 1 = n!.
Definit ¸ia 1.6.1. Cuvintele num˘ arate ˆın propozit ¸ia anterioar˘ a se numesc permut˘ari (f˘ar˘ a repetit ¸ie)
de ordinul n. De asemenea ¸si num˘ arul lor, adic˘ a n!, se nume¸ste tot permut˘ari (f˘ar˘ a repetit ¸ie)
de n.
Exemplul 1.6.1. Pentru n = 3, permut˘ arile mult ¸imii standard ¦1, 2, 3¦ sunt, ˆın ordine lexicografic˘ a:
(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˘ ari.
Algoritmul 1.6.1 (de generare a permut˘arilor). Fie mult ¸imea standard A = ¦1, 2, . . . , n¦. Vom
utiliza din nou ”regula urm˘ atorului”.
• Prima permutare, ˆın ordine lexicografic˘ a, este
(p
1
, p
2
, . . . , p
n
) = (1, 2, . . . , n).
• O permutare arbitrar˘ a (curent˘ a)
(p
1
, p
2
, . . . , p
k−1
, p
k
, p
k+1
, . . . , p
n
)
are o permutare urm˘ atoare dac˘ a ¸si numai dac˘ a exist˘ a un indice k ∈ ¦n −1, . . . , 1¦ astfel ˆıncˆat
p
k
< p
k+1
.
ˆ
In acest caz, luˆand cel mai mare indice k cu aceast˘ a proprietate ¸si cel mai mare indice
j din ¦n, . . . , k + 1¦ astfel ˆıncˆat p
j
> p
k
(exist˘ a, deoarece p
k+1
> p
k
), permutarea urm˘ atoare,
ˆın ordine lexicografic˘ a, este
(p
1
, p
2
, . . . , p
k−1
, p
j
, p

k+1
, . . . , p

j
, . . . , p

n
),
unde vectorul (p

k+1
, . . . , p

j
, . . . , p

n
) este obt ¸inut prin ordonarea cresc˘ atoare a elementelor r˘ amase
(p
k
, p
k+1
, . . . , p
j−1
, p
j+1
, . . . , p
n
). Cum aceste elemente formeaz˘ a vectorul ordonat descresc˘ ator
(p
k+1
, . . . , p
j−1
, p
k
, p
j+1
, . . . , p
n
),
rezult˘a c˘ a vectorul (p

k+1
, . . . , p

j
, . . . , p

n
) este r˘ asturnatul acestuia ¸si deci poate fi obt ¸inut din
acesta, de exemplu, prin interschimb˘ ari ˆıntre termenii situat ¸i la egal˘ a distant ¸˘a fat ¸˘a de mijloc.
De exemplu, pentru permutarea curent˘ a
(2, 7, 4, 8, 6, 5, 3, 1)
avem k = 3 (p
3
= 4 < p
4
= 8), j = 6 (p
j
= 5 > p
k
= 4), deci permutarea urm˘ atoare se obt ¸ine
interschimbˆ and ˆıntˆ ai p
k
= p
3
= 4 cu p
j
= p
6
= 5, apoi r˘ asturnˆ and subvectorul (8, 6, 4, 3, 1) dintre
pozit ¸iile k + 1 ¸si n (de exemplu prin interschimb˘arile 8 ↔ 1, 6 ↔ 3), adic˘ a aceast˘ a permutare
urm˘ atoare este
(2, 7, 5, 1, 3, 4, 6, 8).
ˆ
In pseudocod, algoritmul poate fi descris sub forma
permut˘ari(n) :
¦ pentru i = 1, n p
i
← i;
afi¸sare(p, n);
repet˘a
¦ k ← n −1;
cˆat timp (p
k
≥ p
k+1
) ¸si (k > 0) k ← k −1;
TEMA 1. ARANJAMENTE, COMBIN
˘
ARI, PERMUT
˘
ARI 10
dac˘a (k > 0)
¦ j ← n;
cˆat timp (p
j
≤ p
k
) j ← j −1;
p
k
↔ p
j
;
pentru i = 1,
n−k
2
| p
k+i
↔ p
n−i+1
;
afi¸sare(p, n);
¦
¦
cˆat timp (k > 0);
¦,
unde ↔ reprezint˘a instruct ¸iunea de interschimbare, iar x| reprezint˘ a partea ˆıntreag˘ a (inferioar˘ a) a
num˘ arului x ∈ R.
Observat ¸ia 1.6.1. Pentru generarea permut˘ arilor unei mult ¸imi arbitrare A = ¦a
1
, a
2
, . . . , a
n
¦ˆınlocuim
afi¸sarea indicilor (p
1
, . . . , p
n
) cu afi¸sarea elementelor corespunz˘atoare (a
p
1
, . . . , a
p
n
).
1.7 Combin˘ari
Propozit ¸ia 1.7.1 (de num˘arare a combin˘arilor). Fie m, n ∈ N. Atunci
num˘ arul de cuvinte strict cresc˘ atoare de lungime n peste un alfabet (ordonat) cu m litere
= num˘ arul de submult ¸imi cu n elemente ale unei mult ¸imi cu m elemente
=
[m]
n
n!
def
=

m
n

.
Demonstrat ¸ie. Fie B = ¦1, 2, . . . , m¦. Not˘ am mult ¸imile din enunt ¸ astfel:
(
3
= ¦(c
1
, c
2
, . . . , c
n
)[c
i
∈ B ∀ i, c
i
< c
i+1
∀ i¦, o
3
= ¦S[S ⊆ B, card (S) = n¦.
ˆ
Intre aceste mult ¸imi definim funct ¸iile μ : (
3
→ o
3
, ν : o
3
→ (
3
prin:
• ∀ (c
1
, c
2
, . . . , c
n
) ∈ (
3
, μ(c
1
, c
2
, . . . , c
n
) = ¦c
1
, c
2
, . . . , c
n
¦;
• ∀ ¦c
1
, c
2
, . . . , c
n
¦ ∈ o
3
cu c
1
< c
2
< . . . < c
n
, ν(¦c
1
, c
2
, . . . , c
n
¦) = (c
1
, c
2
, . . . , c
n
).
Aceste funct ¸ii sunt inverse una celeilalte, deci sunt bijective ¸si astfel card ((
3
) = card (o
3
).
Permutˆand fiecare combinare (c
1
, c
2
, . . . , c
n
) ∈ (
3
ˆın toate cele n! moduri posibile, obt ¸inem f˘ar˘ a
repetare toate aranjamentele din mult ¸imea (
1
= ¦(a
1
, a
2
, . . . , a
n
)[a
i
∈ B ∀ i, a
i
= a
j
∀i = j¦.
Deci card ((
3
)n! = card ((
1
). Conform Propozit ¸iei 1.5.1, card ((
1
) = [m]
n
, deci card ((
3
) =
[m]
n
n!
.
Definit ¸ia 1.7.1. Oricare obiecte din cele 2 tipuri num˘ arate ˆın propozit ¸ia anterioar˘ a se numesc com-
bin˘ ari (f˘ar˘ a repetit ¸ie) de m luate cˆate n. De asemenea ¸si num˘arul lor, adic˘ a

m
n

, se nume¸ste
tot combin˘ari (f˘ar˘ a repetit ¸ie) de m luate cˆ ate n ¸si se mai noteaz˘a cu C
n
m
.
Observat ¸ia 1.7.1. Pentru n > m avem

m
n

= 0, deoarece [m]
n
= 0.
Pentru n ≤ m, deoarece [m]
n
= m(m−1) . . . (m−n + 1) =
m!
(m−n)!
avem

m
n

=
m!
n!(m−n)!
.
Exemplul 1.7.1. Pentru m = 5 ¸si n = 3, corespondent ¸ele din demonstrat ¸ia anterioar˘ a sunt redate ˆın
urm˘ atorul tabel:
TEMA 1. ARANJAMENTE, COMBIN
˘
ARI, PERMUT
˘
ARI 11
(c
1
, c
2
, c
3
) ∈ (
3
S ∈ o
3
(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¦.
Deci avem

5
3

=
[5]
3
3!
=
5 4 3
1 2 3
= 10 combin˘ ari.
Algoritmul 1.7.1 (de generare a combin˘arilor). Fie mult ¸imea standard B = ¦1, 2, . . . , m¦ ¸si
n ≤ m. Vom utiliza din nou ”regula urm˘ atorului”.
• Prima combinare (de m luate cˆ ate n), ˆın ordine lexicografic˘ a, este
(c
1
, c
2
, . . . , c
n
) = (1, 2, . . . , n).
• O combinare arbitrar˘ a (curent˘ a)
(c
1
, c
2
, . . . , c
k−1
, c
k
, c
k+1
, . . . , c
n
)
are o combinare urm˘ atoare dac˘ a ¸si numai dac˘ a exist˘ a un indice k ∈ ¦n, . . . , 1¦ astfel ˆıncˆat
c
k
< m−n + k.
ˆ
In acest caz, luˆand cel mai mare indice k cu aceast˘ a proprietate, combinarea
urm˘ atoare, ˆın ordine lexicografic˘ a, este
(c
1
, c
2
, . . . , c
k−1
, c
k
+ 1, c
k
+ 2, . . . , c
k
+ 1 +n −k).
De exemplu, pentru m = 8, n = 6 ¸si combinarea curent˘ a (1, 2, 5, 6, 7, 8) avem k = 2 (c
2
= 2 <
m−n + k = 8 −6 + 2), deci combinarea urm˘ atoare este (1, 3, 4, 5, 6, 7).
ˆ
In pseudocod, algoritmul poate fi descris sub forma
combin˘ari(m, n) :
¦ pentru i = 1, n c
i
← i;
afi¸sare(c, n);
repet˘a
¦ k ← n;
cˆat timp (c
k
= m−n + k) ¸si (k > 0) k ← k −1;
dac˘a (k > 0)
¦ c
k
← c
k
+ 1;
pentru i = k + 1, n c
i
← c
i−1
+ 1;
afi¸sare(c, n);
¦
¦
cˆat timp (k > 0);
¦.
TEMA 1. ARANJAMENTE, COMBIN
˘
ARI, PERMUT
˘
ARI 12
Algoritmul 1.7.2 (de generare a aranjamentelor). Fie mult ¸imea standard B = ¦1, 2, . . . , m¦ ¸si
n ≤ m. Conform demonstrat ¸iei anterioare, putem genera aranjamentele de m luate cˆ ate n prin
generarea combin˘ arilor ¸si permutarea fiec˘ arei combin˘ ari. Folosind Algoritmii 1.7.1 ¸si 1.6.1 obt ¸inem
urm˘ atoarea descriere ˆın pseudocod.
aranjamente(m, n) :
¦ pentru i = 1, n c
i
← i;
permut˘ari(n);
repet˘a
¦ k ← n;
cˆat timp (c
k
= m−n + k) ¸si (k > 0) k ← k −1;
dac˘a (k > 0)
¦ c
k
← c
k
+ 1;
pentru i = k + 1, n c
i
← c
i−1
+ 1;
permut˘ari(n);
¦
¦
cˆat timp (k > 0);
¦, unde permut˘ari(n) este funct ¸ia din Algoritmul 1.6.1 ˆınlocuind funct ¸ia de afi¸sare cu
afi¸sare(c, p, n) :
¦ pentru i = 1, n afi¸seaz˘a c
p
i
;
¦.
Exemplul 1.7.2. Pentru m = 4 ¸si n = 3, corespondent ¸a aranjamente ↔ permut˘ arile combin˘ arilor din
demonstrat ¸ia anterioar˘ a ¸si din algoritmul anterior este redat˘ a ˆın urm˘atorul tabel:
Combinare Permutare Aranjament
(1,2,3) (1,2,3) (1,2,3)
(1,3,2) (1,3,2)
(2,1,3) (2,1,3)
(2,3,1) (2,3,1)
(3,1,2) (3,1,2)
(3,2,1) (3,2,1)
(1,2,4) (1,2,3) (1,2,4)
(1,3,2) (1,4,2)
(2,1,3) (2,1,4)
(2,3,1) (2,4,1)
(3,1,2) (4,1,2)
(3,2,1) (4,2,1)
Combinare Permutare Aranjament
(1,3,4) (1,2,3) (1,3,4)
(1,3,2) (1,4,3)
(2,1,3) (3,1,4)
(2,3,1) (3,4,1)
(3,1,2) (4,1,3)
(3,2,1) (4,3,1)
(2,3,4) (1,2,3) (2,3,4)
(1,3,2) (2,4,3)
(2,1,3) (3,2,4)
(2,3,1) (3,4,2)
(3,1,2) (4,2,3)
(3,2,1) (4,3,2)
Deci avem

4
3

3! = [4]
3
= 4 3 2 = 24 aranjamente.
Observat ¸ia 1.7.2. Analog Observat ¸iei 1.6.1, algoritmii anteriori pot fi adaptat ¸i pentru generarea
combin˘ arilor ¸si aranjamentelor pentru mult ¸imi oarecare.
1.8 Combin˘ari cu repetit ¸ie
Propozit ¸ia 1.8.1 (de num˘arare a combin˘arilor cu repetit ¸ie). Fie m, n ∈ N. Atunci num˘ arul de
cuvinte cresc˘ atoare de lungime n peste un alfabet (ordonat) cu m litere este egal cu
[m]
n
n!
def
=

m
n

.
TEMA 1. ARANJAMENTE, COMBIN
˘
ARI, PERMUT
˘
ARI 13
Demonstrat ¸ie. Fie B = ¦1, 2, . . . , m¦, A = ¦1, 2, . . . , m + n −1¦,
(
4
= ¦(c
1
, c
2
, . . . , c
n
)[c
i
∈ B ∀ i, c
i
≤ c
i+1
∀ i¦, (
3
= ¦(d
1
, d
2
, . . . , d
n
)[d
i
∈ A ∀ i, d
i
< d
i+1
∀ i¦.
Definim corespondent ¸ele ρ : (
4
→ (
3
, σ : (
3
→ (
4
astfel:
• ρ(c
1
, c
2
, c
3
, . . . , c
n
) = (c
1
, c
2
+ 1, c
3
+ 2, . . . , c
n
+ n −1);
• σ(d
1
, d
2
, d
3
, . . . , d
n
) = (d
1
, d
2
−1, d
3
−2, . . . , d
n
−n + 1).
Acestea sunt funct ¸ii inverse, deci utilizˆand Propozitia 1.7.1 avem
card ((
4
) = card ((
3
) =

m + n −1
n

=
[m + n −1]
n
n!
=
[m]
n
n!
=

m
n

.
Definit ¸ia 1.8.1. Cuvintele num˘ arate ˆın propozit ¸ia anterioar˘ a se numesc combin˘ari cu repetit ¸ie
de m luate cˆate n. De asemenea ¸si num˘ arul lor, adic˘ a

m
n

, se nume¸ste tot combin˘ari cu
repetit ¸ie de m luate cˆ ate n.
Exemplul 1.8.1. Pentru m = 3 ¸si n = 4, combin˘ arile cu repetit ¸ie sunt, ˆın ordine lexicografic˘ a:
(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).
Deci avem

3
4

=
[3]
4
4!
=
3 4 5 6
1 2 3 4
= 15 combin˘ ari cu repetit ¸ie.
Algoritmul 1.8.1 (de generare a combin˘arilor cu repetit ¸ie). Fie mult ¸imea standard B = ¦1, 2, . . . , m¦.
Vom utiliza din nou ”regula urm˘ atorului”.
• Prima combinare cu repetit ¸ie (de m luate cˆ ate n), ˆın ordine lexicografic˘ a, este
(c
1
, c
2
, . . . , c
n
) = (1, 1, . . . , 1).
• O combinare cu repetit ¸ie arbitrar˘ a (curent˘ a)
(c
1
, c
2
, . . . , c
k−1
, c
k
, c
k+1
, . . . , c
n
)
are o combinare cu repetit ¸ie urm˘atoare dac˘ a ¸si numai dac˘ a exist˘ a un indice k ∈ ¦n, . . . , 1¦ astfel
ˆıncˆat c
k
< m.
ˆ
In acest caz, luˆand cel mai mare indice k cu aceast˘ a proprietate, combinarea cu
repetit ¸ie urm˘atoare, ˆın ordine lexicografic˘ a, este
(c
1
, c
2
, . . . , c
k−1
, c
k
+ 1, c
k
+ 1, . . . , c
k
+ 1).
De exemplu, pentru m = 8, n = 6 ¸si combinarea cu repetit ¸ie curent˘a (2, 4, 5, 8, 8, 8) avem k = 3
(c
3
= 5 < m = 8) deci combinarea cu repetit ¸ie urm˘ atoare este (2, 4, 6, 6, 6, 6).
ˆ
In pseudocod, algoritmul poate fi descris sub forma
combin˘ari cu repetit ¸ie(m, n) :
¦ pentru i = 1, n c
i
← 1;
afi¸sare(c, n);
repet˘a
¦ k ← n;
cˆat timp (c
k
= m) ¸si (k > 0) k ← k −1;
dac˘a (k > 0)
TEMA 1. ARANJAMENTE, COMBIN
˘
ARI, PERMUT
˘
ARI 14
¦ c
k
← c
k
+ 1;
pentru i = k + 1, n c
i
← c
k
;
afi¸sare(c, n);
¦
¦
cˆat timp (k > 0);
¦.
Observat ¸ia 1.8.1. Analog Observat ¸iei 1.6.1, algoritmul anterior poate fi adaptat pentru generarea
combin˘ arilor cu repetit ¸ie pentru mult ¸imi oarecare.
1.9 Permut˘ari cu repetit ¸ie
Propozit ¸ia 1.9.1 (de num˘arare a permut˘arilor cu repetit ¸ie). Fie
m, n
1
, n
2
, . . . , n
m
∈ N ¸si n = n
1
+ n
2
+ + n
m
. Atunci num˘ arul de cuvinte de lungime n ce pot
fi formate peste un alfabet cu m litere astfel ˆıncˆ at litera num˘ arul i s˘a apar˘ a de exact n
i
ori pentru
orice i ∈ ¦1, . . . , m¦ este egal cu
n!
n
1
!n
2
! . . . n
m
!
def
=

n
n
1
, n
2
, . . . , n
m

.
Demonstrat ¸ie. Fie B = ¦1, 2, . . . , m¦ ¸si
(
5
= ¦(c
1
, c
2
, . . . , c
n
)[c
i
∈ B ∀ i, card (¦i[c
i
= j¦) = n
j
∀ j¦.
Num˘ar˘ am cuvintele din (
5
astfel:
• alegem cei n
1
indici (din totalul de n) ai literelor egale cu 1, rezult˘ a

n
n
1

moduri posibile;
• pentru fiecare alegere de mai sus, alegem cei n
2
indici (din restul de n−n
1
) ai literelor egale cu
2, rezult˘a

n −n
1
n
2

moduri posibile, deci obt ¸inem

n
n
1

n −n
1
n
2

moduri posibile de alegere
a indicilor literelor 1 ¸si 2;
• . . .
• pentru fiecare alegere de mai sus, alegem cei n
m
indici (din restul de n − n
1
− . . . − n
m−1
) ai
literelor egale cu m; rezult˘a

n −n
1
−. . . −n
m−1
n
m

moduri posibile, deci obt ¸inem

n
n
1

n −n
1
n
2

. . .

n −n
1
−. . . −n
m−1
n
m

moduri posibile de alegere a tuturor indicilor literelor 1, 2, . . . , m. Astfel
card ((
5
) =

n
n
1

n −n
1
n
2

. . .

n −n
1
−. . . −n
m−1
n
m

=
n!
n
1
!(n −n
1
)!

(n −n
1
)!
n
2
!(n −n
1
−n
2
)!
. . .

(n −n
1
−. . . −n
m−1
)!
n
m
!(n −n
1
−. . . −n
m
)!
=
n!
n
1
!n
2
! . . . n
m
!
(deoarece (n −n
1
−. . . −n
m
)! = 0! = 1).
Definit ¸ia 1.9.1. Cuvintele num˘ arate ˆın propozit ¸ia anterioar˘ a se numesc permut˘ari cu repetit ¸ie
(anagrame) de n luate cˆate n
1
, n
2
, . . . , n
m
. De asemenea ¸si num˘ arul lor, adic˘ a

n
n
1
, n
2
, . . . , n
m

,
se nume¸ste tot permut˘ ari cu repetit ¸ie de n luate cˆ ate n
1
, n
2
, . . . , n
m
.
TEMA 1. ARANJAMENTE, COMBIN
˘
ARI, PERMUT
˘
ARI 15
Observat ¸ia 1.9.1. Luˆ and n
1
= n
2
= = n
m
= 1 obt ¸inem n = m ¸si

n
1, 1, . . . , 1

= n!, deci
permut˘ arile (f˘ ar˘ a repetit ¸ie) sunt un caz particular al permut˘ arilor cu repetit ¸ie. Pe de alt˘a parte,
luˆ and m = 2 obt ¸inem

n
n
1
, n
2

=
n!
n
1
!n
2
!
, deci ¸si combin˘arile (f˘ ar˘ a repetit ¸ie) sunt un caz particular
al permut˘ arilor cu repetit ¸ie.
Exemplul 1.9.1. Pentru m = 3 ¸si n
1
= 2, n
2
= n
3
= 1, deci n = 4, permut˘ arile cu repetit ¸ie sunt, ˆın
ordine lexicografic˘ a:
(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).
Deci avem

4
2, 1, 1

=
4!
2!1!1!
= 12 permut˘ ari cu repetit ¸ie.
Algoritmul 1.9.1 (de generare a permut˘arilor cu repetit ¸ie). Fie mult ¸imea standard B =
¦1, 2, . . . , m¦ ¸si n
1
, n
2
, . . . , n
m
∈ N, n = n
1
+n
2
+ +n
m
. Vom utiliza din nou ”regula urm˘ atorului”.
• Prima permutare cu repetit ¸ie (de n luate cˆ ate n
1
, n
2
, . . . , n
m
), ˆın ordine lexicografic˘ a, este
(p
1
, p
2
, . . . , p
n
) = (1, 1, . . . , 1
. .. .
de n
1
ori
, 2, 2, . . . , 2
. .. .
de n
2
ori
, . . . , m, m, . . . , m
. .. .
de n
m
ori
).
• Existent ¸a ¸si forma permut˘ arii cu repetit ¸ie urm˘atoare ˆın ordine lexicografic˘ a pentru o permutare
cu repetit ¸ie curent˘a arbitrar˘ a se determin˘ a exact ca la permut˘ arile f˘ ar˘ a repetit ¸ie (Algoritmul
1.6.1).
De exemplu, pentru permutarea cu repetit ¸ie curent˘a
(4, 4, 1, 3, 6, 5, 5, 3, 2, 1)
avem k = 4 (p
4
= 3 < p
5
= 6), j = 7 (p
j
= 5 > p
k
= 3), deci permutarea cu repetit ¸ie urm˘atoare se
obt ¸ine interschimbˆand ˆıntˆ ai p
k
= p
4
= 3 cu p
j
= p
7
= 5, apoi r˘ asturnˆ and subvectorul (6, 5, 3, 3, 2, 1)
dintre pozit ¸iile k + 1 ¸si n (de exemplu prin interschimb˘arile 6 ↔ 1, 5 ↔ 2, 3 ↔ 3), adic˘ a aceat˘ a
permutare cu repetit ¸ie urm˘atoare este
(4, 4, 1, 5, 1, 2, 3, 3, 5, 6).
ˆ
In pseudocod, algoritmul poate fi descris sub forma
permut˘ari cu repetit ¸ie(m, n) :
¦ n ← 0; pentru i = 1, m n ← n + n
i
;
i ← 0;
pentru j = 1, m
pentru k = 1, n
j
¦ i ← i + 1; p
i
← j;
¦
afi¸sare(p, n);
repet˘a
¦ k ← n −1;
cˆat timp (p
k
≥ p
k+1
) ¸si (k > 0) k ← k −1;
dac˘a (k > 0)
¦ j ← n;
TEMA 1. ARANJAMENTE, COMBIN
˘
ARI, PERMUT
˘
ARI 16
cˆat timp (p
j
≤ p
k
) j ← j −1;
p
k
↔ p
j
;
pentru i = 1,
n−k
2
| p
k+i
↔ p
n−i+1
;
afi¸sare(p, n);
¦
¦
cˆat timp (k > 0);
¦,
unde funct ¸ia de afi¸sare este cea din Algoritmul 1.6.1.
Observat ¸ia 1.9.2. Analog Observat ¸iei 1.6.1, algoritmul anterior poate fi u¸sor adaptat pentru generarea
permut˘ arilor cu repetit ¸ie pentru mult ¸imi arbitrare.
Tema 2
Partit ¸ii
2.1 Compuneri ale unui num˘ar natural
Definit ¸ia 2.1.1. Fie n, m ∈ N. O compunere a lui n este o scriere de forma
n = n
1
+ n
2
+ + n
m
,
unde n
1
, n
2
, . . . , n
m
∈ N ¸si conteaz˘a ordinea dintre termenii n
1
, n
2
, . . . , n
m
.
Propozit ¸ia 2.1.1 (de num˘arare a compunerilor unui num˘ar natural). Fie n, m ∈ N. Atunci:
a) num˘arul de compuneri ale lui n cu m termeni este egal cu

m
n

;
b) num˘ arul de compuneri ale lui n cu m termeni nenuli este egal cu

n −1
m−1

.
Demonstrat ¸ie. a) Fie mult ¸imile
^ = ¦(n
1
, n
2
, . . . , n
m
)[n
i
∈ N ∀ i, n
1
+ n
2
+ + n
m
= n¦,
(
4
= ¦(c
1
, c
2
, . . . , c
n
)[c
i
∈ ¦1, 2, . . . , m¦ ∀ i, c
i
≤ c
i+1
∀ i¦.
Definim corespondent ¸ele α : ^ → (
4
, β : (
4
→ ^ prin:
• α(n
1
, . . . , n
m
) = (c
1
, . . . , c
n
), unde









c
1
= = c
n
1
= 1 (n
1
litere),
c
n
1
+1
= = c
n
1
+n
2
= 2 (n
2
litere),
. . .
c
n
1
+···+n
m−1
+1
= = c
n
1
+···+n
m−1
+n
m
= m (n
m
litere);
• β(c
1
, . . . , c
n
) = (n
1
, . . . , n
m
), unde n
i
= num˘ arul de litere i ale cuvˆ antului (c
1
, . . . , c
n
), ∀ i.
Acestea sunt funct ¸ii inverse, deci conform Propozit ¸iei 1.8.1 avem card (^) = card ((
4
) =

m
n

.
b) Fie mult ¸imile ^
1
= ¦(n
1
, n
2
, . . . , n
m
)[n
i
∈ N

∀ i, n
1
+ n
2
+ + n
m
= n¦,
^
2
= ¦(t
1
, t
2
, . . . , t
m
)[t
i
∈ N ∀ i, t
1
+ t
2
+ + t
m
= n −m¦.
Definim corespondent ¸ele ϕ : ^
1
→ ^
2
, ψ : ^
2
→ ^
1
prin:
• ∀(n
1
, . . . , n
m
) ∈ ^
1
, ϕ(n
1
, . . . , n
m
) = (n
1
−1, . . . , n
m
−1);
• ∀(t
1
, . . . , t
m
) ∈ ^
2
, ψ(t
1
, . . . , t
m
) = (t
1
+ 1, . . . , t
m
+ 1).
17
TEMA 2. PARTIT¸ II 18
Acestea sunt funct ¸ii inverse, deci conform punctului a) avem card (^
1
) = card (^
2
) =

m
n −m

=
[m]
n−m
(n −m)!
=
m(m+ 1) . . . (n −1)
(n −m)!
=
(n −1)!
(m−1)!(n −m)!
=

n −1
m−1

.
Exemplul 2.1.1. Pentru n = 4 ¸si m = 3 compunerile sunt
4 = 0 + 0 + 4 = 0 + 1 + 3 = 0 + 2 + 2 = 0 + 3 + 1 = 0 + 4 + 0
= 1 + 0 + 3 = 1 + 1 + 2 = 1 + 2 + 1 = 1 + 3 + 0 = 2 + 0 + 2
= 2 + 1 + 1 = 2 + 2 + 0 = 3 + 0 + 1 = 3 + 1 + 0 = 4 + 0 + 0.
Deci avem

3
4

=
3 4 5 6
1 2 3 4
= 15 compuneri, dintre care

4 −1
3 −1

=

3
2

= 3 compuneri cu
termenii nenuli.
Algoritmul 2.1.1 (de generare a compunerilor unui num˘ar natural). Fie n, m ∈ N

. Vom
utiliza din nou ”regula urm˘ atorului”.
• Prima compunere a lui n cu m termeni, ˆın ordine lexicografic˘ a, este
n = 0 + 0 + + 0 + n.
• O compunere curent˘ a arbitrar˘ a
n = t
1
+ t
2
+ + t
k−1
+ t
k
+ t
k+1
+ + t
m
are o compunere urm˘ atoare dac˘ a ¸si numai dac˘ a exist˘ a un indice k ∈ ¦m, . . . , 2¦ astfel ˆıncˆat
t
k
> 0.
ˆ
In acest caz, luˆand cel mai mare indice k cu aceast˘ a proprietate, compunerea urm˘ atoare,
ˆın ordine lexicografic˘ a, este
n = t
1
+ t
2
+ + t
k−2
+ (t
k−1
+ 1) + 0 + + 0 + (t
k
−1).
De exemplu, urm˘ atoarea compunere dup˘ a
10 = 2 + 0 + 5 + 3 + 0 + 0
este 10 = 2 + 0 + 6 + 0 + 0 + 2 (deoarece t
k
= t
4
= 3).
ˆ
In pseudocod, algoritmul poate fi descris sub forma
compuneri(n, m) :
¦ pentru i = 1, m−1 t
i
← 0;
t
m
← n;
afi¸sare(t, m);
repet˘a
¦ k ← m;
cˆat timp (t
k
= 0) ¸si (k > 1) k ← k −1;
dac˘a (k > 1)
¦ t
k−1
← t
k−1
+ 1; t
m
← t
k
−1;
dac˘a (k < m) t
k
← 0;
afi¸sare(t, m);
¦
¦
cˆat timp (k > 1);
¦,
unde funct ¸ia de afi¸sare este
afi¸sare(t, m) :
¦ pentru i = 1, m afi¸seaz˘a t
i
;
¦.
TEMA 2. PARTIT¸ II 19
Algoritmul 2.1.2 (de generare a compunerilor cu termeni nenuli). Analog algoritmului anterior
se obt ¸ine urm˘atorul algoritm pentru generarea compunerilor lui n cu m termeni nenuli, m ≤ n.
compuneri termeni nenuli(n, m) :
¦ pentru i = 1, m−1 t
i
← 1;
t
m
← n −m + 1;
afi¸sare(t, m);
repet˘a
¦ k ← m;
cˆat timp (t
k
= 1) ¸si (k > 1) k ← k −1;
dac˘a (k > 1)
¦ t
k−1
← t
k−1
+ 1; t
m
← t
k
−1;
dac˘a (k < m) t
k
← 1;
afi¸sare(t, m);
¦
¦
cˆat timp (k > 1);
¦.
2.2 Partit ¸ii ale unui num˘ar natural
Definit ¸ia 2.2.1. O partit ¸ie (descompunere) a num˘arului n ∈ N

este o scriere de forma
n = n
1
+ n
2
+ + n
k
,
unde n
1
, n
2
, . . . , n
k
∈ N

(k ∈ N

) ¸si nu conteaz˘a ordinea dintre termenii n
1
, n
2
, . . . , n
k
.
Observat ¸ia 2.2.1. Deoarece ˆıntr-o partit ¸ie ca mai sus nu conteaz˘ a ordinea dintre termeni, putem
presupune c˘a ace¸stia sunt scri¸si ˆın ordine cresc˘ atoare.
Definit ¸ia 2.2.2. Fie n, k ∈ N

. Not˘ am cu P(n, k) num˘ arul de partit ¸ii ale lui n cu k termeni, iar cu
P(n) num˘ arul tuturor partit ¸iilor lui n.
Exemplul 2.2.1. Num˘arul n = 6 are partit ¸iile
6 = 6 = 1 + 5 = 2 + 4 = 3 + 3 = 1 + 1 + 4 = 1 + 2 + 3 = 2 + 2 + 2
= 1 + 1 + 1 + 3 = 1 + 1 + 2 + 2 = 1 + 1 + 1 + 1 + 2 = 1 + 1 + 1 + 1 + 1 + 1,
deci P(6, 1) = 1, P(6, 2) = 3, P(6, 3) = 3, P(6, 4) = 2, P(6, 5) = 1, P(6, 6) = 1 ¸si P(6) = 11.
Observat ¸ia 2.2.2. Avem P(n) = P(n, 1) + P(n, 2) + + P(n, n), ∀ n ∈ N

.
Propozit ¸ia 2.2.1 (relat ¸ia de recurent ¸˘a a numerelor P(n, k)). Pentru orice n ∈ N

¸si orice k ∈
¦1, . . . , n −1¦ avem
P(n, k) = P(n −k, 1) + P(n −k, 2) + + P(n −k, k).
Demonstrat ¸ie. Pentru orice n ∈ N

¸si orice k ∈ ¦1, . . . , n −1¦ not˘ am
{(n, k) = ¦(n
1
, . . . , n
k
)[n
i
∈ N

∀ i, n
1
≤ ≤ n
k
, n
1
+ + n
k
= n¦.
Definim corespondent ¸ele α : {(n, k) →
k
¸
i=1
{(n −k, i) ¸si β :
k
¸
i=1
{(n −k, i) → {(n, k) prin:
TEMA 2. PARTIT¸ II 20
• ∀ (n
1
, . . . , n
k
) ∈ {(n, k), α(n
1
, . . . , n
k
) = (n
j
− 1, . . . , n
k
− 1), unde j = min¦i[n
i
≥ 2, i ∈
¦1, . . . , k¦¦ (exist˘ a j, deoarece k ≤ n −1);
• ∀ i ∈ ¦1, . . . , k¦, ∀ (n
1
, . . . , n
i
) ∈ {(n −k, i), β(n
1
, . . . , n
i
) = (1, . . . , 1
. .. .
de k−i ori
, n
1
+ 1, . . . , n
i
+ 1).
Interpretarea acestor funct ¸ii este urm˘atoarea: aplicarea funct ¸iei α unei partit ¸ii a lui n cu k termeni
const˘ a ˆın mic¸sorarea cu 1 a fiec˘ arui termen ¸si eliminarea termenilor care astfel devin egali cu zero,
obt ¸inˆandu-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˘ a ˆın m˘arirea cu 1 a fiec˘ arui termen ¸si ad˘ augarea de termeni
egali cu 1 pentru a obt ¸ine k termeni, astfel obt ¸inˆandu-se o partit ¸ie a lui n cu k termeni.
Funct ¸iile α ¸si β sunt bine definite ¸si inverse una celeilalte, deci card ({(n, k)) = card

k
¸
i=1
{(n −k, i)

.
Cum mult ¸imile {(n − k, 1), . . . , {(n − k, k) sunt evident disjuncte dou˘ a cˆ ate dou˘ a, rezult˘a c˘ a
P(n, k) =
k
¸
i=1
P(n −k, i).
Observat ¸ia 2.2.3. Relat ¸ia de recurent ¸˘a din Propozit ¸ia 2.2.1, ˆımpreun˘ a 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 ¸si al
numerelor P(n), conform Corolarului 2.2.2. De exemplu, tabelul numerelor P(n, k) ¸si P(n) pentru
n ≤ 7 (¸si k ≤ 7) este:
P(n, k) k = 1 k = 2 k = 3 k = 4 k = 5 k = 6 k = 7 P(n)
n = 1 1 0 0 0 0 0 0 1
n = 2 1 1 0 0 0 0 0 2
n = 3 1 1 1 0 0 0 0 3
n = 4 1 2 1 1 0 0 0 5
n = 5 1 2 2 1 1 0 0 7
n = 6 1 3 3 2 1 1 0 11
n = 7 1 3 4 3 2 1 1 15
Numerele P(n, k) nenule, aflate doar pe diagonala principal˘ a ¸si sub aceast˘ a diagonal˘ a (adic˘ a 1 ≤ k ≤
n) formeaz˘ a 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 a celor P(n, k) partit ¸ii ale lui n cu k termeni
(t
1
, t
2
, . . . , t
k
), n = t
1
+ t
2
+ + t
k
, t
i
∈ N

∀i, t
1
≤ t
2
≤ ≤ t
k
folosim din nou ”regula urm˘ atorului”.
• Prima partit ¸ie este (1, . . . , 1
. .. .
de k−1 ori
, n −k + 1).
• O partit ¸ie curent˘a arbitrar˘ a
(t
1
, t
2
, . . . , t
j−1
, t
j
, t
j+1
, . . . , t
k
)
are o partit ¸ie urm˘atoare dac˘ a ¸si numai dac˘ a exist˘ a un indice j ∈ ¦k − 1, . . . , 1¦ astfel ˆıncˆat
t
j
≤ t
k
− 2.
ˆ
In acest caz, luˆand cel mai mare indice j cu aceast˘ a proprietate, urm˘ atoarea
partit ¸ie este
(t
1
, t
2
, . . . , t
j−1
, t
j
+ 1, t
j
+ 1, . . . , t
j
+ 1, n −r),
unde r = t
1
+ t
2
+ + t
j−1
+ (t
j
+ 1) + (t
j
+ 1) + + (t
j
+ 1).
TEMA 2. PARTIT¸ II 21
De exemplu, urm˘ atoarea partit ¸ie dup˘a
22 = 1 + 1 + 2 + 4 + 4 + 5 + 5
este
22 = 1 + 1 + 3 + 3 + 3 + 3 + 8
(deoarece t
j
= t
3
= 2 ≤ t
k
−2 = 5 −2).
Descrierea ˆın pseudocod a algoritmului are forma
generare P(n, k) :
¦ pentru i = 1, k −1 t
i
← 1; t
k
← n −k + 1;
afi¸sare(t, k);
repet˘a
¦ j ← k −1;
cˆat timp (t
j
> t
k
−2) ¸si (j > 0) j ← j −1;
dac˘a (j > 0)
¦ t
j
← t
j
+ 1;
pentru i = j + 1, k −1 t
i
← t
j
;
r ← 0;
pentru i = 1, k −1 r ← r + t
i
;
t
k
← n −r;
afi¸sare(t, k);
¦
¦
cˆat timp (j > 0);
¦,
unde funct ¸ia de afi¸sare este aceea¸si ca ˆın Algoritmul 2.1.1.
2.3 Partit ¸ii ale unei mult ¸imi finite
Definit ¸ia 2.3.1. O partit ¸ie a unei mult ¸imi nevide A este o scriere de forma
A = A
1
∪ A
2
∪ ∪ A
k
,
unde submult ¸imile (p˘ art ¸ile, clasele) A
1
, A
2
, . . . , A
k
(k ∈ N

) sunt nevide ¸si disjuncte dou˘ a cˆ ate dou˘a,
¸si nu conteaz˘a ordinea dintre aceste submult ¸imi. Consider˘ am c˘ a singura partit ¸ie a mult ¸imii vide este
partit ¸ia cu zero submult ¸imi.
Definit ¸ia 2.3.2. Fie n, k ∈ N.
a) Num˘ arul lui Stirling de spet ¸a a doua, notat cu S(n, k), reprezint˘ a num˘arul de partit ¸ii ale
unei mult ¸imi cu n elemente ˆın k p˘art ¸i.
b) Num˘ arul lui Bell, notat cu B
n
, reprezint˘ a num˘arul tuturor partit ¸iilor unei mult ¸imi cu n ele-
mente.
Exemplul 2.3.1. Mult ¸imea A = ¦a, b, c¦ are partit ¸iile
A = ¦a, b, c¦ = ¦a, b¦ ∪ ¦c¦ = ¦a, c¦ ∪ ¦b¦ = ¦a¦ ∪ ¦b, c¦ = ¦a¦ ∪ ¦b¦ ∪ ¦c¦,
deci S(3, 1) = 1, S(3, 2) = 3, S(3, 3) = 1 ¸si B
3
= 5.
Observat ¸ia 2.3.1. Evident, avem B
0
= 1 ¸si B
n
= S(n, 1) + S(n, 2) + + S(n, n), ∀ n ∈ N

.
TEMA 2. PARTIT¸ II 22
Propozit ¸ia 2.3.1 (relat ¸ia de recurent ¸˘a a numerelor S(n, k)).
S(n, k) = S(n −1, k −1) + kS(n −1, k), ∀ n, k ∈ N

.
Demonstrat ¸ie. Not˘ am
o(n, k) = ¦¦A
1
, . . . , A
k
¦[A
i
= ∅ ∀ i, A
i
∩ A
j
= ∅ ∀ i = j, A = A
1
∪ ∪ A
k
¦,
pentru orice n, k ∈ N

. Definim corespondent ¸ele
α : o(n, k) → o(n −1, k −1) ∪ ¦1, . . . , k¦ o(n −1, k),
β : o(n −1, k −1) ∪ ¦1, . . . , k¦ o(n −1, k) → o(n, k),
prin:
• ∀ ¦A
1
, . . . , A
k
¦ ∈ o(n, k), α(¦A
1
, . . . , A
k
¦) =
=

¦A
1
, . . . , A
k
¦ ` ¦A
i
¦, dac˘a n ∈ A
i
¸si A
i
= ¦n¦,
(i, ¦A
1
, . . . , A
i
` ¦n¦, . . . , A
k
¦), dac˘a n ∈ A
i
¸si A
i
= ¦n¦;
• ∀ ¦A
1
, . . . , A
k−1
¦ ∈ o(n −1, k −1), β(¦A
1
, . . . , A
k−1
¦) = ¦A
1
, . . . , A
k−1
, ¦n¦¦,
• ∀ (i, ¦A
1
, . . . , A
k
¦) ∈ ¦1, . . . , k¦ o(n −1, k), β(i, ¦A
1
, . . . , A
k
¦) = ¦A
1
, . . . , A
i
∪ ¦n¦, . . . , A
k
¦.
Interpretarea acestor definit ¸ii este urm˘atoarea: aplicarea funct ¸iei α unei partit ¸ii a mult ¸imii ¦1, . . . , n¦
ˆın k p˘art ¸i const˘ a ˆın eliminarea elementului n, astfel obt ¸inˆandu-se o partit ¸ie a mult ¸imii ¦1, . . . , n−1¦
ˆın k − 1 sau ˆın k p˘art ¸i, dup˘ a cum n este sau nu singur ˆıntr-o parte. Reciproc, aplicarea funct ¸iei β
const˘ a ˆın ad˘ augarea elementului n, fie singur ˆıntr-o parte, fie la oricare din cele k p˘art ¸i.
Funct ¸iile α ¸si β sunt bine definite ¸si inverse una celeilalte, deci
card (o(n, k)) = card (o(n −1, k −1) ∪ ¦1, . . . , k¦ o(n −1, k)) ,
adic˘ a S(n, k) = S(n −1, k −1) + kS(n −1, k).
Observat ¸ia 2.3.2. Relat ¸ia de recurent ¸˘a de mai sus ˆımpreun˘ a cu condit ¸iile init ¸iale evidente S(0, 0) = 1,
S(0, k) = 0 ∀ k ≥ 1, S(n, 0) = 0 ∀n ≥ 1 permit calculul tuturor numerelor S(n, k), deci ¸si al numerelor
B
n
, conform Corolarului 2.3.1. De exemplu, tabelul numerelor S(n, k) ¸si B
n
pentru n ≤ 6 (¸si k ≤ 6)
este:
S(n, k) k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 k = 6 B
n
n = 0 1 0 0 0 0 0 0 1
n = 1 0 1 0 0 0 0 0 1
n = 2 0 1 1 0 0 0 0 2
n = 3 0 1 3 1 0 0 0 5
n = 4 0 1 7 6 1 0 0 15
n = 5 0 1 15 25 10 1 0 52
n = 6 0 1 31 90 65 15 1 203
Numerele S(n, k) nenule, aflate doar pe diagonala principal˘ a ¸si sub aceast˘ a diagonal˘ a (1 ≤ k ≤ n)
formeaz˘ a triunghiul numerelor lui Stirling de spet ¸a a doua.
TEMA 2. PARTIT¸ II 23
Algoritmul 2.3.1 (de generare a partit ¸iilor unei mult ¸imi ˆıntr-un num˘ar fixat de p˘art ¸i). Fie
A = ¦1, 2, . . . , n¦ ¸si 1 ≤ k ≤ n. Pentru scrierea unei partit ¸ii
A = A
1
∪ ∪ A
k
vom folosi convent ¸ia c˘ a ˆın fiecare parte A
i
elementele sunt ordonate cresc˘ ator, iar ordinea dintre
p˘art ¸ile A
1
, . . . , A
k
este dat˘ a 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˘ a sub forma
¦1, 2, 3, 4, 5¦ = ¦1, 4¦ ∪ ¦2, 3¦ ∪ ¦5¦. (2.3.1)
Pentru reprezentarea unei partit ¸ii A = A
1
∪ ∪A
k
scrise conform convent ¸iei de mai sus, vom folosi
vectorul caracteristic v = (v
1
, . . . , v
n
), unde
v
i
= j dac˘a i ∈ A
j
, ∀ i ∈ ¦1, 2, . . . , n¦, ∀ j ∈ ¦1, 2, . . . , k¦.
De exemplu, vectorul caracteristic al partit ¸iei (2.3.1) este v = (1, 2, 2, 1, 3).
Cu aceast˘a reprezentare, conform demonstrat ¸iei relat ¸iei de recurent ¸˘a a numerelor S(n, k) (Propozit ¸ia
2.3.1) obt ¸inem un algoritm recursiv de generare a partit ¸iilor mult ¸imii ¦1, 2, . . . , n¦ˆın k p˘art ¸i.
ˆ
In pseu-
docod, acest algoritm poate fi descris sub forma
generare S(n, k) :
¦ dac˘a (k = 1) //condit ¸ie init ¸ial˘ a
¦ pentru i = 1, n v
i
← 1; //partit ¸ia cu o parte
afi¸sare(v);
¦
altfel
¦ dac˘a (k = n) //condit ¸ie init ¸ial˘ a
¦ pentru i = 1, n v
i
← i; //partit ¸ia cu n p˘art ¸i
afi¸sare(v);
¦
altfel //relat ¸ia de recurent ¸˘a
¦ v
n
← k; generare S(n −1, k −1); //n singur ˆın parte
pentru i = 1, k //n nesingur ˆın parte
¦ v
n
← i; generare S(n −1, k);
¦
¦
¦
¦,
unde funct ¸ia de afi¸sare, ce transform˘ a vectorul caracteristic v ˆın partit ¸ia corespunz˘ atoare, este
afisare(v) :
¦ pentru j = 1, k //afi¸s˘am partea A
j
¦ afi¸seaz˘a ”¦”;
pentru i = 1, n dac˘a (v
i
= j) afi¸seaz˘a i;
afi¸seaz˘a ”¦”;
¦
¦.
Tema 3
Grafuri
Grafurile sunt modele matematice cu o gam˘ a larg˘ a de aplicat ¸ii. Aceast˘a aplicabilitate a condus
la dezvoltarea accelerat˘ a a teoriei grafurilor, atˆ at din punct de vedere al rezultatelor teoretice cˆ at
¸si al algoritmicii, grafurile impunˆ andu-se drept modele de baz˘ a ˆın informatic˘ a, ˆın special ˆın teoria
structurilor de date ¸si a analizei algoritmilor.
3.1 Definit ¸ii generale
Definit ¸ia 3.1.1. Un graf neorientat (graf, pseudograf, graf general) este o pereche G = (V, E)
unde:
• V este o mult ¸ime finit˘ a ¸si nevid˘a, elementele sale numindu-se nodurile (vˆarfurile, punctele)
grafului G;
• E este o colect ¸ie (mult ¸ime multipl˘ a, multiset) finit˘a de perechi neordonate, posibil egale, de
noduri, elementele sale numindu-se muchiile (leg˘aturile directe, liniile) grafului G.
Observat ¸ia 3.1.1.
ˆ
Intr-o pereche neordonat˘ a, notat˘ a [x, y], nu conteaz˘ a ordinea dintre elemente, adic˘ a
[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˘ a ¸si nevid˘a, elementele sale numindu-se vˆarfurile (nodurile, punctele)
grafului G;
• E este o colect ¸ie (mult ¸ime multipl˘ a, multiset) finit˘a de perechi ordonate de vˆ arfuri, elementele
sale numindu-se arcele (leg˘aturile directe ale) grafului G.
Observat ¸ia 3.1.2.
ˆ
Intr-o pereche ordonat˘ a, notat˘ a (x, y), conteaz˘ a ordinea dintre elemente, adic˘ a
(x, y) = (y, x) pentru x = y.
Definit ¸ia 3.1.3. Num˘ arul de noduri ale unui graf (neorientat sau orientat) se nume¸ste ordinul
grafului, iar num˘ arul de muchii sau arce se nume¸ste dimensiunea grafului.
Definit ¸ia 3.1.4. a) Dac˘a e = [x, y] este o muchie a unui graf neorientat, atunci nodurile x ¸si y
se numesc extremit˘at ¸ile muchiei e ¸si spunem c˘ a muchia e este incident˘ a cu nodurile x ¸si
y.
b) Dac˘a e = (x, y) este un arc al unui graf orientat, atunci nodul x se nume¸ste extremitatea
init ¸ial˘ a iar nodul y se nume¸ste extremitatea final˘a a arcului e ¸si spunem c˘ a arcul e este
incident cu x spre exterior ¸si cu y spre interior.
24
TEMA 3. GRAFURI 25
c) O bucl˘ a a unui graf (neorientat sau orientat) este o muchie sau un arc avˆ and extremit˘ at ¸ile
egale (adic˘ a o muchie de forma [x, x], respectiv un arc de forma (x, x)).
d) Dou˘a noduri x ¸si y ale unui graf (neorientat sau orientat) se numesc adiacente (vecine) dac˘ a
exist˘a o muchie sau un arc incident cu x ¸si cu y (adic˘ a o muchie de forma [x, y], respectiv un
arc de forma (x, y) sau de forma (y, x)).
Definit ¸ia 3.1.5. Dac˘a ˆın colect ¸ia (mult ¸imea multipl˘a) de muchii sau arce a unui graf (neorientat
sau orientat) exist˘ a dou˘ a sau mai multe elemente egale (¸si aflate pe pozit ¸ii diferite), atunci acestea
se numesc muchii sau arce multiple.
Definit ¸ia 3.1.6. Un graf (neorientat sau orientat) f˘ ar˘ a bucle se nume¸ste multigraf (neorientat,
respectiv orientat).
Definit ¸ia 3.1.7. Un graf (neorientat sau orientat) se nume¸ste simplu (sau strict) dac˘ a nu cont ¸ine
nici bucle ¸si 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˘ a ¸si nevid˘a (de elemente numite noduri) iar E ⊆ {
2
(V ) este o mult ¸ime finit˘a (de elemente numite
muchii), unde
{
2
(V ) = ¦¦x, y¦[x, y ∈ V, x = y¦
(mult ¸imea tuturor submult ¸imilor cu dou˘ a elemente ale lui V ).
b) Un graf orientat simplu este o pereche G = (V, E), unde V este o mult ¸ime finit˘a ¸si nevid˘a (de
elemente numite noduri) iar E ⊆ V V ` ¦(x, x)[x ∈ V ¦ este o mult ¸ime finit˘a (de elemente numite
arce).
Definit ¸ia 3.1.8. Fie G = (V, E) un graf (orientat sau neorientat). O reprezentare grafic˘a a lui
G se obt ¸ine reprezentˆ and nodurile sale prin puncte distincte (ˆın plan sau pe o alt˘ a suprafat ¸˘a dat˘ a),
iar muchiile [x, y] sau arcele (x, y) prin segmente (de curb˘ a continu˘ a) distincte neorientate, respectiv
orientate, de la punctul ce reprezint˘ a nodul x pˆan˘ a la punctul ce reprezint˘ a nodul y.
Exemplul 3.1.1. Graful neorientat G = (V, E), cu V = ¦1, 2, 3, 4, 5, 6¦ ¸si E = ¦e
1
, e
2
, e
3
, e
4
, e
5
, e
6
, e
7
, e
8
, e
9
¦,
unde e
1
= [1, 2], e
2
= [1, 4], e
3
= [2, 2], e
4
= [2, 5], e
5
= [3, 6], e
6
= [3, 6], e
7
= [4, 5], e
8
= [4, 5], e
9
=
[4, 5] (E este o mult ¸ime multipl˘ a!) are reprezentarea grafic˘ a din Figura 3.1.1.
9
e
1
4
2
5
1
e
4
e
3
e
8
e
7
e
5
e
6
e 2
e
3
6
Figura 3.1.1:
1
2
3
4
5
Figura 3.1.2:
Acest graf are ordinul 6 ¸si dimensiunea 9. El cont ¸ine bucla e
3
, muchiile multiple e
5
, e
6
¸si muchiile
multiple e
7
, e
8
, e
9
, deci nu este nici multigraf, nici simplu. Nodurile 1 ¸si 2 sunt adiacente, iar nodurile
1 ¸si 5 nu sunt adiacente.
Exemplul 3.1.2. Graful orientat G = (V, E), cu V = ¦1, 2, 3, 4, 5¦ ¸si
E = ¦(1, 2), (2, 3), (2, 4), (2, 5), (3, 1), (3, 2), (5, 4)¦
este un graf simplu avˆ and reprezentarea grafic˘ a din Figura 3.1.2. Arcul (3, 1) are extremitatea init ¸ial˘ a
3 ¸si extremitatea final˘ a 1.
TEMA 3. GRAFURI 26
Definit ¸ia 3.1.9. Fie G
1
= (V
1
, E
1
) ¸si G
2
= (V
2
, E
2
) dou˘a grafuri (ambele orientate sau ambele
neorientate).
a) Spunem c˘ a G
1
este un subgraf al lui G
2
¸si not˘am G
1
⊆ G
2
dac˘ a V
1
⊆ V
2
¸si E
1
⊆ E
2
.
b) Spunem c˘ a G
1
este un graf part ¸ial al lui G
2
dac˘ a V
1
= V
2
¸si E
1
⊆ E
2
.
Definit ¸ia 3.1.10. Fie G = (V, E) un graf (neorientat sau orientat) ¸si U ⊆ V o submult ¸ime nevid˘ a
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˘ at ¸i ˆın U.
Definit ¸ia 3.1.11. Fie G = (V, E) un graf (orientat sau neorientat) ¸si 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˘ at ¸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.3.
1
4
5
3
Figura 3.1.3:
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.4, iar graful part ¸ial generat de aceea¸si submult ¸ime de arce are
reprezentarea din Figura 3.1.5.
5
4
2
3
Figura 3.1.4:
1
5
4
2
3
Figura 3.1.5:
3.2 Reprezentarea grafurilor
ˆ
In continuare descriem cˆateva forme de reprezentare (memorare) a grafurilor ˆın informatic˘ a. Dintre
aceste forme, cea mai utilizat˘ a este matricea de adiacent ¸˘a.
Definit ¸ia 3.2.1. Fie G = (V, E) un graf (neorientat sau orientat) unde V = ¦v
1
, . . . , v
n
¦ ¸si E =
¦e
1
, . . . , e
m
¦. Matricea de adiacent ¸˘a asociat˘ a grafului G este matricea A = (a
ij
)
i,j=1,n
definit˘a
prin
a
ij
= num˘ arul de muchii sau de arce e
k
∈ E de la nodul v
i
la nodul v
j
(adic˘ a muchii de forma
e
k
= [v
i
, v
j
], respectiv arce de forma e
k
= (v
i
, v
j
)), ∀i, j ∈ ¦1, . . . , n¦.
TEMA 3. GRAFURI 27
Observat ¸ia 3.2.1. a) Dac˘ a graful neorientat G = (V, E) este simplu, atunci
a
ij
=

1, dac˘a v
i
¸si v
j
sunt adiacente (adic˘ a [v
i
, v
j
] ∈ E),
0, ˆın caz contrar.
b) Dac˘ a graful orientat G = (V, E) este simplu, atunci
a
ij
=

1, dac˘a (v
i
, v
j
) ∈ E,
0, ˆın caz contrar.
Exemplul 3.2.1. Matricea de adiacent ¸˘a asociat˘ a grafului neorientat din Exemplul 3.1.1 este
A =








0 1 0 1 0 0
1 1 0 0 1 0
0 0 0 0 0 2
1 0 0 0 3 0
0 1 0 3 0 0
0 0 2 0 0 0








,
iar matricea de adiacent ¸˘a asociat˘ a grafului orientat din Exemplul 3.1.2 este
A =






0 1 0 0 0
0 0 1 1 1
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 ¸˘a simetric˘a (a
ij
= a
ji
∀i, j).
Definit ¸ia 3.2.2. Fie G = (V, E) un graf, unde V = ¦v
1
, . . . , v
n
¦ ¸si E = ¦e
1
, . . . , e
m
¦, E = ∅.
a) Dac˘a G este neorientat, atunci matricea de incident ¸˘a asociat˘ a grafului G este matricea
B = (b
ij
)
i = 1, n
j = 1, m
definit˘a prin
b
ij
=



0, dac˘ a e
j
nu este incident˘ a cu v
i
,
1, dac˘ a e
j
nu este bucl˘ a ¸si este incident˘a cu v
i
,
2, dac˘ a e
j
este o bucl˘ a incident˘a cu v
i
,
∀ i ∈ ¦1, . . . , n¦, ∀ j ∈ ¦1, . . . , m¦.
b) Dac˘a G este orientat ¸si f˘ ar˘ a bucle, atunci matricea de incident ¸˘a asociat˘ a grafului G este
matricea B = (b
ij
)
i = 1, n
j = 1, m
definit˘a prin
b
ij
=



0, dac˘ a e
j
nu este incident˘ a cu v
i
,
1, dac˘ a e
j
este incident˘ a cu v
i
spre exterior,
−1, dac˘ a e
j
este incident˘ a cu v
i
spre interior,
∀ i ∈ ¦1, . . . , n¦, ∀ j ∈ ¦1, . . . , m¦.
TEMA 3. GRAFURI 28
Exemplul 3.2.2. Matricea de incident ¸˘a a grafului neorientat din Exemplul 3.1.1 este
B =








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
0 1 0 0 0 0 1 1 1
0 0 0 1 0 0 1 1 1
0 0 0 0 1 1 0 0 0








,
iar matricea de incident ¸˘a a grafului orientat din Exemplul 3.1.2 este
B =






1 0 0 0 −1 0 0
−1 1 1 1 0 −1 0
0 −1 0 0 1 1 0
0 0 −1 0 0 0 −1
0 0 0 −1 0 0 1






.
Observat ¸ia 3.2.3. Fie G = (V, E) un graf (neorientat sau orientat), unde V = ¦v
1
, . . . , v
n
¦ ¸si E =
¦e
1
, . . . , e
m
¦, E = ∅. O alt˘ a reprezentare a grafului G este matricea T ce ret ¸ine ˆın fiecare coloan˘ a
extremit˘ at ¸ile unei muchii sau arc, adic˘ a T = (t
kj
)
k = 1, 2
j = 1, m
definit˘a prin t
1j
= x, t
2j
= y, unde
e
j
= [x, y] (pentru muchii) sau e
j
= (x, y) (pentru arce), ∀ j ∈ ¦1, . . . , m¦. Pentru graful din
Exemplul 3.1.1 matricea T este
T =

1 1 2 2 3 3 4 4 4
2 4 2 5 6 6 5 5 5

,
iar pentru graful din Exemplul 3.1.2 matricea T este
T =

1 2 2 2 3 3 5
2 3 4 5 1 2 4

.
Observat ¸ia 3.2.4. O alt˘ a form˘ a frecvent utilizat˘ a ˆın reprezentarea grafurilor simple este dat˘ a de
listele de adiacent ¸˘a (memorate static sau dinamic). Lista de adiacent ¸˘a a unui nod x este format˘ a
din toate nodurile y pentru care exist˘ a muchie sau arc de la x la y (y se nume¸ste succesor direct
al lui x). Pentru graful orientat din Exemplul 3.1.2, listele de adiacent ¸˘a sunt
L(1) = ¦2¦, L(2) = ¦3, 4, 5¦, L(3) = ¦1, 2¦, L(4) = ∅, L(5) = ¦4¦,
unde L(i) reprezint˘ a lista de adiacent ¸˘a a nodului i. Pentru grafurile orientate simple, deseori se
memoreaz˘ a ¸si listele de predecesori direct ¸i. Lista de predecesori direct ¸i a unui nod x este format˘ a
din toate nodurile y pentru care exist˘ a arc de la y la x (y se nume¸ste 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 ¸si predecesor direct coincid, fiind ¸si
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 ¸si de u¸surint ¸a implement˘ arii operat ¸iilor necesare de prelucrare a acestor
forme, deci de tipul problemei modelate prin grafuri ¸si de algoritmul de rezolvare utilizat.
TEMA 3. GRAFURI 29
3.3 Grade
Definit ¸ia 3.3.1. Fie G = (V, E) un graf ¸si x ∈ V un nod arbitrar fixat.
a) Dac˘a G este neorientat, atunci gradul lui x, notat d
G
(x) = d(x), este definit prin
d(x) = a(x) + 2 b(x),
unde a(x) reprezint˘ a num˘arul de muchii e ∈ E ce nu sunt bucle ¸si sunt incidente cu x, iar b(x)
este num˘ arul de bucle e ∈ E ce sunt incidente cu x.
b) Dac˘a G este orientat, atunci:
• gradul de ie¸sire (semigradul exterior) al lui x, notat d
+
G
(x) = d
+
(x), reprezint˘ a
num˘ arul de arce e ∈ E incidente cu x spre exterior;
• gradul de intrare (semigradul interior) al lui x, notat d

G
(x) = d

(x), reprezint˘ a
num˘ arul de arce e ∈ E incidente cu x spre interior;
• gradul (total al) lui x, notat d
G
(x) = d(x), este
d(x) = d
+
(x) + d

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

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

(2) = 2, d(2) = 5,
d
+
(3) = 2, d

(3) = 1, d(3) = 3,
d
+
(4) = 0, d

(4) = 2, d(4) = 2,
d
+
(5) = 1, d

(5) = 1, d(5) = 2.
Propozit ¸ia 3.3.1. Fie G = (V, E) un graf, V = ¦v
1
, . . . , v
n
¦, ¸si fie A = (a
ij
)
i,j=1,n
matricea de
adiacent ¸˘ a a grafului G.
a) Dac˘a G este neorientat, atunci d(v
i
) = a
ii
+
n
¸
j=1
a
ij
, ∀ i ∈ ¦1, . . . , n¦.
b) Dac˘a G este orientat, atunci d
+
(v
i
) =
n
¸
j=1
a
ij
, d

(v
i
) =
n
¸
j=1
a
ji
, ∀ i ∈ ¦1, . . . , n¦.
Observat ¸ia 3.3.1. Dac˘ a graful G este simplu, atunci a
ii
= 0 ∀ i ¸si egalitatea de la punctul a) al
propozit ¸iei anterioare devine d(v
i
) =
n
¸
j=1
a
ij
.
Propozit ¸ia 3.3.2. Fie G = (V, E) un graf avˆ and dimensiunea m. Atunci
¸
x∈V
d(x) = 2m.
ˆ
In plus, dac˘a G este orientat atunci
¸
x∈V
d
+
(x) =
¸
x∈V
d

(x) = m.
Definit ¸ia 3.3.2. Fie G = (V, E) un graf. Un nod x ∈ V cu d
G
(x) = 0 se nume¸ste nod izolat, iar
un nod y ∈ V cu d
G
(y) = 1 se nume¸ste nod terminal.
TEMA 3. GRAFURI 30
3.4 Conexitate
Definit ¸ia 3.4.1. Fie G = (V, E) un graf.
a) Un lant ¸ ˆın graful G este o succesiune alternant˘a
[v
1
, e
1
, v
2
, e
2
, . . . , v
k
, e
k
, v
k+1
],
unde v
1
, v
2
, . . . , v
k+1
∈ V (noduri), e
1
, e
2
, . . . , e
k
∈ E (muchii sau arce), k ∈ N, cu proprietatea
c˘ a pentru orice i ∈ ¦1, . . . , k¦ e
i
este o muchie sau un arc avˆ and extremit˘ at ¸ile v
i
¸si v
i+1
(adic˘ a
e
i
= [v
i
, v
i+1
] pentru un graf neorientat, respectiv e
i
= (v
i
, v
i+1
) sau e
i
= (v
i+1
, v
i
) pentru un
graf orientat). Nodurile v
1
¸si v
k+1
se numesc extremit˘at ¸ile lant ¸ului, iar nodurile v
2
, . . . , v
k
se numesc noduri intermediare. Num˘ arul k de muchii sau arce (nu neap˘ arat distincte) ale
lant ¸ului se nume¸ste lungimea lant ¸ului.
b) Un lant ¸ se nume¸ste ˆınchis dac˘ a are extremit˘ at ¸ile egale, respectiv deschis ˆın caz contrar.
c) Un lant ¸ se nume¸ste simplu dac˘ a muchiile sau arcele sale sunt diferite dou˘ a cˆ ate dou˘a (con-
siderˆ and diferite ¸si muchiile sau arcele multiple aflate pe pozit ¸ii diferite ˆın E).
d) Un lant ¸ deschis se nume¸ste elementar dac˘ a nodurile sale sunt diferite dou˘ a cˆ ate dou˘a. Un
lant ¸ ˆınchis se nume¸ste elementar dac˘ a este simplu ¸si, cu except ¸ia extremit˘ at ¸ilor, nodurile
sale sunt diferite dou˘ a cˆ ate dou˘ a.
e) Un ciclu este un lant ¸ ˆınchis ¸si simplu de lungime nenul˘a (adic˘ a cu cel put ¸in o muchie sau un
arc).
f ) Un drum este un lant ¸ [v
1
, e
1
, v
2
, e
2
, . . . , v
k
, e
k
, v
k+1
] cu proprietatea c˘ a pentru orice i ∈ ¦1, . . . , k¦
muchia sau arcul e
i
are extremitatea init ¸ial˘a v
i
¸si extremitatea final˘ a v
i+1
(adic˘ a e
i
= (v
i
, v
i+1
)
pentru graf orientat).
Un astfel de drum se noteaz˘ a ¸si cu
(v
1
, e
1
, v
2
, e
2
, . . . , v
k
, e
k
, v
k+1
),
nodurile v
1
¸si v
k+1
numindu-se extremitatea init ¸ial˘ a, respectiv extremitatea final˘a a dru-
mului.
g) Un circuit este un drum ˆınchis ¸si simplu de lungime nenul˘a (adic˘ a un drum ce este ¸si ciclu).
Observat ¸ia 3.4.1. Pentru grafurile neorientate not ¸iunile de lant ¸ ¸si de drum coincid; deci ¸si not ¸iunile
de ciclu ¸si de circuit coincid.
Observat ¸ia 3.4.2. Orice lant ¸ elementar este ¸si simplu.
Observat ¸ia 3.4.3. Pentru grafurile neorientate sau orientate simple orice lant ¸ [v
1
, e
1
, v
2
, e
2
, . . . , v
k
, e
k
, v
k+1
]
sau drum (v
1
, e
1
, v
2
, e
2
, . . . , v
k
, e
k
, v
k+1
) este bine determinat de nodurile sale (deoarece muchia sau
arcul e
i
nu poate fi decˆ at singura muchie sau singurul arc de la v
i
la v
i+1
, ∀ i), deci poate fi notat,
pe scurt, doar prin nodurile succesive
[v
1
, v
2
, . . . , v
k
, v
k+1
], respectiv (v
1
, v
2
, . . . , v
k
, v
k+1
).
Exemplul 3.4.1. Pentru graful neorientat din Exemplul 3.1.1,
[1, e
2
, 4, e
9
, 5, e
4
, 2, e
1
, 1, e
2
, 4]
TEMA 3. GRAFURI 31
este un lant ¸ (drum) deschis, nesimplu (cont ¸ine de dou˘ a ori e
2
), neelementar (cont ¸ine de dou˘ a ori 1),
de lungime 5.
ˆ
In acela¸si graf, [1, e
1
, 2, e
3
, 2, e
4
, 5, e
7
, 4, e
9
, 5, e
8
, 4, e
2
, 1] este un ciclu (circuit) simplu ¸si neelementar
(cont ¸ine de dou˘ a 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 (¸si lant ¸) deschis elementar
(¸si simplu) de lungime 4.
ˆ
In acela¸si graf, (1, 2, 3, 1) este un circuit (¸si 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 nume¸ste conex dac˘ a pentru orice dou˘ a
noduri distincte x, y exist˘a cel put ¸in un lant ¸ de la x la y.
b) Un graf orientat se nume¸ste tare-conex dac˘ a pentru orice dou˘ a noduri distincte x, y exist˘a cel
put ¸in un drum de la x la y (deci, schimbˆ and ordinea lui x ¸si y, exist˘a cel put ¸in un drum ¸si de
la y la x).
Observat ¸ia 3.4.4. Orice graf tare-conex este ¸si conex (deoarece orice drum este ¸si lant ¸). Orice graf
cu un singur nod verific˘ a definit ¸ia anterioar˘ a, deci este ¸si conex ¸si tare-conex.
Observat ¸ia 3.4.5. Deoarece pentru orice nod x exist˘ a lant ¸ul [x] ¸si drumul (x) de lungimi zero, rezult˘ a
c˘a ˆın definit ¸ia anterioar˘ a putem renunt ¸a la condit ¸iile ca nodurile x ¸si y s˘a 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ˆ and acelea¸si extremit˘ at ¸i, rezult˘a c˘ a ˆın definit ¸ia
anterioar˘ a putemˆınlocui termenii de ”lant ¸” ¸si ”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˘ a lant ¸uri ˆıntre
nodurile 1 ¸si 3. Graful orientat din Exemplul 3.1.2 este conex, dar nu este tare-conex, deoarece nu
exist˘ a drum de la nodul 4 la nodul 1 (de¸si exist˘a drum de la nodul 1 la nodul 4!).
Definit ¸ia 3.4.3. a) O component˘a conex˘a 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˘ a G[U] este
conex ¸si maximal cu aceast˘a proprietate (ˆın raport cu incluziunea), adic˘ a pentru orice nod
x ∈ V ` U subgraful G[U ∪ ¦x¦] nu mai este conex.
b) O component˘a tare-conex˘a a unui graf orientat G = (V, E) este un subgraf G[U] generat
de o mult ¸ime U ⊆ V de noduri cu proprietatea c˘ a G[U] este tare-conex ¸si maximal cu aceast˘a
proprietate (ˆın raport cu incluziunea), adic˘ a pentru orice noduri x
1
, x
2
, . . . , x
p
∈ V `U subgraful
G[U ∪ ¦x
1
, x
2
, . . . , x
p
¦] nu mai este tare-conex.
Observat ¸ia 3.4.6. Un graf este conex dac˘ a ¸si numai dac˘ a are o singur˘ a component˘ a conex˘ a. Un graf
orientat este tare-conex dac˘ a ¸si numai dac˘ a are o singur˘ a component˘ a tare-conex˘ a. Num˘ arul de
componente tare-conexe ale unui graf orientat este mai mare sau egal decˆ at num˘ arul de componente
conexe ale acelui graf, deoarece orice component˘ a tare-conex˘ a este inclus˘ a ˆıntr-o component˘ a conex˘ a
(conform definit ¸iei anterioare ¸si Observat ¸iei 3.4.4).
Observat ¸ia 3.4.7. Orice nod izolat x genereaz˘a o component˘ a conex˘ a ¸si o component˘ a tare-conex˘ a,
ambele avˆ and forma G[¦x¦] = (¦x¦, ∅).
Propozit ¸ia 3.4.1. a) Fie G[V
1
], . . . , G[V
k
] componentele conexe (diferite) ale unui graf G = (V, E).
Atunci ¦V
1
, . . . , V
k
¦ este o partit ¸ie a mult ¸imii V (adic˘ a V
i
= ∅ ∀ i, V
i
∩ V
j
= ∅ ∀ i = j,
V
1
∪ ∪ V
k
= V ).
b) Fie G[V

1
], . . . , G[V

r
] componentele tare-conexe (diferite) ale unui graf orientat G = (V, E).
Atunci ¦V

1
, . . . , V

r
¦ este de asemenea o partit ¸ie a mult ¸imii V .
TEMA 3. GRAFURI 32
Exemplul 3.4.3. Componentele conexe ale grafului neorientat din Exemplul 3.1.1 sunt generate de
submult ¸imile de noduri V
1
= ¦1, 2, 4, 5¦ ¸si V
2
= ¦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 V
1
= ¦1, 2, 3¦, V
2
= ¦4¦ ¸si V
3
= ¦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˘ a 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 ¸si y se afl˘ a ˆıntr-o aceea¸si component˘ a conex˘ a ¸si aceast˘ a component˘ a
va cont ¸ine ¸si pe e). Afirmat ¸ia nu mai este valabil˘ a pentru componentele tare-conexe. De exemplu,
pentru graful din Exemplul 3.1.2 arcul (5, 4) nu apart ¸ine nici-unei componente tare-conexe.
Algoritmi pentru testarea conexit˘ at ¸ii ¸si tare-conexit˘ at ¸ii unui graf, precum ¸si pentru determinarea
componentelor conexe ¸si tare-conexe ale unui graf, vor fi prezentat ¸i ˆın sect ¸iunile urm˘ atoare.
Definit ¸ia 3.4.4. a) Un arbore este un graf conex ¸si f˘ ar˘ a cicluri.
b) O p˘adure este un graf f˘ ar˘ a cicluri.
c) Un arbore part ¸ial al unui graf G = (V, E) este un graf part ¸ial al lui G ce este arbore (adic˘ a
un arbore T = (V, F) cu F ⊆ E).
Observat ¸ia 3.4.9. Arborii ¸si p˘adurile sunt grafuri simple (deoarece orice bucl˘ a este un ciclu ¸si orice
dou˘ a muchii sau arce multiple formeaz˘ a un ciclu).
Observat ¸ia 3.4.10. Componentele conexe ale unei p˘aduri sunt arbori.
Exemplul 3.4.4. Graful neorientat din Exemplul 3.1.1 nu este p˘ adure (deoarece are cicluri), deci nici
arbore. Graful s˘ au part ¸ial reprezentat ˆın Figura 3.4.1 este o p˘ adure (avˆ and dou˘ a componente conexe
arbori). Graful orientat din Exemplul 3.1.2 nu este arbore (deoarece are cicluri). Doi arbori part ¸iali
ai s˘ ai sunt reprezentat ¸i ˆın Figura 3.4.2.
2
e
1
4
2
5
1
e
4
e
5
e
3
6
Figura 3.4.1:
1
1
2
2
3
3
4
4
5
5
Figura 3.4.2:
Propriet˘ at ¸ile teoretice ¸si algoritmice de baz˘ a ale arborilor vor fi evident ¸iate ˆın capitolul urm˘ ator.
3.5 Parcurgerea grafurilor
Prin parcurgerea unui graf se ˆınt ¸elege o metod˘ a sistematic˘ a de vizitare succesiv˘ a a nodurilor sale (ˆın
vederea prelucr˘arii informat ¸iilor ata¸sate ˆın structura de date modelat˘ a prin graful dat).
TEMA 3. GRAFURI 33
Definit ¸ia 3.5.1. Fie G = (V, E) un graf ¸si x ∈ V un nod arbitrar fixat. Parcurgerea ˆın adˆ ancime
(DF, ”depth first”) a grafului G pornind din nodul x, numit ¸si r˘ ad˘acin˘a a acestei parcurgeri, const˘ a
ˆın:
• se vizitez˘a nodul x, acesta devine nod curent;
• dac˘ a nodul curent v
i
are succesori direct ¸i (adic˘ a noduri v
j
pentru care exist˘ a muchie sau arc de
la v
i
la v
j
) nevizitat ¸i, atunci se viziteaz˘ a primul astfel de nod v
j
; nodul v
j
devine nod curent ¸si
se continu˘a procedeul de parcurgere pornind din acest nod;
• dac˘ a nodul curent v
j
nu mai are succesori direct ¸i nevizitat ¸i, atunci se revine la nodul predecesor
direct v
i
(cel din care a fost vizitat); nodul v
i
redevine nod curent ¸si se continu˘a procedeul de
parcurgere pornind din acest nod;
• dac˘ a nodul curent nu mai are nici succesori direct ¸i nevizitat ¸i, nici predecesor direct (deci este
chiar rad˘ acina x), atunci parcurgerea se ˆıncheie.
Observat ¸ia 3.5.1. Pentru parcurgerea DF, considerˆ and cˆ ate o muchie sau un arc de la fiecare nod
curent v
i
la primul s˘ au succesor direct nevizitat v
j
(care va deveni urm˘ atorul nod curent) se obt ¸ine
un arbore, numit arbore DF.
Exemplul 3.5.1. Pentru graful din Exemplul 3.1.2, parcurgerea ˆın adˆ ancime pornind din nodul 2 este
DF(2) : 2, 3, 1, 4, 5
(considerˆ and c˘ a ordinea dintre succesorii direct ¸i ai fiec˘arui nod este ordinea cresc˘ atoare). Arborele
DF corespunz˘ator acestei parcurgeri este reprezentat ˆın Figura 3.5.1. Pentru acela¸si graf, parcurgerea
1
3
2
4 5
Figura 3.5.1:
1
3
2
4 5
Figura 3.5.2:
DF pornind din nodul 3 este
DF(3) : 3, 1, 2, 4, 5,
iar arborele DF corespunz˘ ator este reprezentat ˆın Figura 3.5.2.
Prezent˘am ˆın continuare doi algoritmi, unul recursiv ¸si altul nerecursiv, pentru implementarea
parcurgerii ˆın adˆ ancime.
TEMA 3. GRAFURI 34
Algoritmul 3.5.1 (parcurgerea DF, recursiv). Fie graful G = (V, E) avˆ and mult ¸imea de noduri
V = ¦1, . . . , n¦ ¸si matricea de adiacent ¸˘a A = (a
ij
)
i,j=1,n
. Fie x ∈ V un nod arbitrar fixat. Pentru
implementarea parcurgerii DF(x) vom utiliza un vector V IZ avˆ and semnificat ¸ia
V IZ[i] =

1, dac˘a nodul i a fost vizitat,
0, ˆın caz contrar,
∀ i ∈ ¦1, . . . , n¦.
Pentru memorarea arborelui DF(x) vom utiliza un vector TATA avˆ and semnificat ¸ia
TATA[i] =

0, dac˘a i = x (r˘ ad˘ acina),
predecesorul direct al lui i, dac˘a i = x,
pentru orice nod i din parcurgerea DF. Descriereaˆın pseudocod a algoritmului recursiv de parcurgere
ˆın adˆ ancime pornind din nodul x are forma
DF recursiv(x) :
¦ viziteaz˘a(x); //se viziteaz˘ a x, de exemplu se afi¸seaz˘a x
V IZ[x] ← 1; //x a fost vizitat
pentru y = 1, n
¦ dac˘a (a
xy
≥ 1) ¸si (V IZ[y] = 0) //y este primul succesor direct
// nevizitat al lui x
¦ TATA[y] ← x;
DF recursiv(y);//se continu˘ a parcurgerea DF din nodul y
¦
¦
¦.
Programul C++ corespunz˘ ator, cu citirea grafului dintr-un fi¸sier (avˆ and pe prima linie numerele
n de noduri ¸si m de muchii sau arce ale grafului ¸si pe liniile urm˘ atoare perechile de noduri ce formeaz˘ a
aceste muchii sau arce) ¸si afi¸sarea parcurgerii DF(x) ¸si a vectorului TATA (ce memoreaz˘a arborele
DF(x)) este:
#include<iostream.h> //parcurgerea DF a unui graf, recursiv
#include<conio.h>
#include<fstream.h>
#define nmax 50 // nr. maxim de noduri
int n,m,A[nmax][nmax],VIZ[nmax],TATA[nmax];
void citire_graf() // citirea grafului din fisierul "graf2.dat"
{ int i,j,k;
ifstream f("graf2.dat");
f>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++) A[i][j]=0;
for(k=1;k<=m;k++)
{ f>>i>>j;
A[i][j]++;
// if (j!=i) A[j][i]++; // doar pt. grafuri NEORIENTATE
}
f.close();
}
void viziteaza(int x) // vizitarea nodului x
{ cout<<x<<" ";
}
void DF_recursiv(int x) // parcurgerea DF pornind din nodul x
{ int y;
viziteaza(x);
VIZ[x]=1;
for(y=1;y<=n;y++)
TEMA 3. GRAFURI 35
if ((A[x][y]>=1)&&(VIZ[y]==0))
{ TATA[y]=x;
DF_recursiv(y);
}
}
void main()
{ int x,i;
clrscr();
citire_graf();
for(i=1;i<=n;i++)
{ VIZ[i]=0; TATA[i]=0;
}
cout<<"Nodul de pornire: x=";cin>>x;
cout<<"Parcurgerea DF: ";
DF_recursiv(x);
cout<<"\nArborele DF este dat de vectorul TATA: ";
for (i=1;i<=n;i++) cout<<TATA[i]<<" ";
getch();
}
Exemplul 3.5.2. Pentru graful din Exemplul 3.1.2, fi¸sierul de intrare ”graf2.dat” folosit la citirea
grafului ˆın programul anterior cont ¸ine datele:
5 7 //5 noduri ¸si 7 arce
1 2 //arcul (1, 2)
2 3 //arcul (2, 3)
2 4 //arcul (2, 4)
2 5 //arcul (2, 5)
3 1 //arcul (3, 1)
3 2 //arcul (3, 2)
5 4 //arcul (5, 4).
Algoritmul 3.5.2 (parcurgerea DF, nerecursiv). Fie din nou G = (V, E) un graf avˆ and mult ¸imea
de noduri V = ¦1, . . . , n¦ ¸si matricea de adiacent ¸˘a A = (a
ij
)
i,j=1,n
. Fie x ∈ V un nod arbitrar
fixat. Pentru implementarea nerecursiv˘ a a parcurgerii DF(x) vom utiliza vectorii V IZ ¸si TATA cu
acelea¸si semnificat ¸ii ca ˆın algoritmul anterior, un vector URM cu semnificat ¸ia
URM[i] = urm˘ atorul succesor direct al nodului i,
¸si o structur˘ a de tip stiv˘a S, memorat˘ a ca un vector, ce cont ¸ine nodurile vizitate ¸si ˆın curs de
prelucrare, adic˘ a de vizitare a tuturor succesorilor.
Descrierea ˆın pseudocod a algoritmului are forma
DF(x) :
¦ viziteaz˘a(x);//se viziteaz˘a x, de exemplu se afi¸seaz˘a x
V IZ[x] ← 1;//x a fost vizitat
TATA[x] ← 0;
varf ← 1; S[varf] ← x;//nodul x se introduce ˆın vˆ arful stivei
cˆat timp (varf > 0)//stiva este nevid˘a
¦ i ← S[varf];//i este nodul din vˆ arful stivei
j ← URM[i] + 1;//j va fi urm˘ atorul succesor direct nevizitat
//al lui i, dac˘ a exist˘a
cˆat timp (a
ij
= 0) ¸si (j ≤ n) j ← j + 1;
dac˘a (j > n) //nodul i nu mai are succesori direct ¸i nevizitat ¸i
¦ varf ← varf −1; //s-a ˆıncheiat prelucrarea lui i ¸si
//ˆıl elimin˘ am din stiv˘ a
¦
TEMA 3. GRAFURI 36
altfel
¦ URM[i] ← j;//j este urm˘atorul succesor direct al lui i
dac˘a (V IZ[j] = 0) //j nu a fost vizitat
¦ viziteaz˘a(j);//se viziteaz˘a j
V IZ[j] ← 1;//j a fost vizitat
TATA[j] ← i;
varf ← varf + 1;
S[varf] ← j; //se introduce j ˆın vˆ arful stivei
¦
¦
¦//stiva este vid˘a, nu mai exist˘ a noduri neprelucrate,
//parcurgerea este ˆıncheiat˘ a.
¦.
Observat ¸ia 3.5.2. Dac˘ a G = (V, E) este un graf neorientat, atunci pentru orice nod x ∈ V componenta
conex˘a a nodului x este (indus˘a de) chiar mult ¸imea nodurilor vizitate prin parcurgerea DF(x).
Pe baza acestei observat ¸ii obt ¸inem urm˘atorul algoritm.
Algoritmul 3.5.3 (determinarea componentelor conexe). Fie din nou G = (V, E) un graf neori-
entat, V = ¦1, . . . , n¦ ¸si fie A = (a
ij
)
i,j=1,n
matricea de adiacent ¸˘a a grafului G. Pentru determinarea
componentelor conexe ale grafului G vom utiliza un vector CC cu semnificat ¸ia
CC[i] = num˘ arul componentei conexe ˆın care se afl˘ a nodul i,
∀ i ∈ ¦1, . . . , n¦ ¸si o variabil˘ a nrc ce reprezint˘a num˘ arul de componente conexe. Evident, graful G
este conex dac˘a ¸si numai dac˘ a valoarea final˘ a a variabilei nrc este egal˘ a cu 1.
Descrierea ˆın pseudocod a algoritmului are forma
componente conexe :
¦ nrc ← 0;
pentru i = 1, n CC[i] ← 0;
pentru i = 1, n
¦ dac˘a (CC[i] = 0) //nodul i nu a fost vizitat
¦ nrc ← nrc + 1; //nodurile din parcurgerea DF(i)
// vor forma o nou˘ a component˘a conex˘a
DF(i);
¦
¦
¦,
unde funct ¸ia DF(i) este cea din Algoritmul 3.5.1 sau cea din Algoritmul 3.5.2, ad˘ augˆ and instruct ¸iunea
CC[i] ← nrc ˆın funct ¸ia viziteaz˘a(i).
Observat ¸ia 3.5.3. Algoritmul anterior poate fi utilizat ¸si pentru determinarea componentelor conexe
ale unui graf orientat, ˆınlocuind condit ¸ia ”a
xy
≥ 1” din funct ¸ia DF recursiv(x) cu ”a
xy
≥ 1 sau
a
yx
≥ 1”, respectiv condit ¸ia ”a
ij
= 0” din funct ¸ia DF(x) cu ”a
ij
= 0 ¸si a
ji
= 0” (deoarece ˆın
determinarea componentelor conexe nu se t ¸ine cont de orientarea arcelor).
Observat ¸ia 3.5.4. Dac˘ a G = (V, E) este un graf orientat, atunci pentru orice nod x ∈ V componenta
tare-conex˘a a nodului x este (indus˘a de) mult ¸imea nodurilor y vizitate prin parcurgerea DF(x) a
grafului G cu proprietatea c˘ a y este vizitat ¸si ˆın parcurgerea DF(x) a grafului
G = (V, E), unde E = ¦(j, i)[(i, j) ∈ E¦,
numit transpusul (simetricul) lui G. Evident, orice drum (y, v
1
, . . . , v
k
, x) ˆın graful G corespunde
drumului (x, v
k
, . . . , v
1
, y) ˆın graful G, deci x ¸si y sunt ˆın aceea¸si component˘ a tare-conex˘ a a lui G
TEMA 3. GRAFURI 37
dac˘a ¸si numai dac˘ a exist˘ a un drum de la x la y ˆın G ¸si un drum de la x la y ˆın G, adic˘ a y este vizitat
prin parcurgerea DF(x) atˆ at ˆın G cˆat ¸si ˆın G.
Matricea de adiacent ¸˘a a grafului G este transpusa matricei de adiacent ¸˘a a grafului G, deci pentru
parcurgerea DF(x) a grafului G putem utiliza tot matricea de adiacent ¸˘a A a grafului dat G, ˆınlocuind
condit ¸ia ”a
ij
= 0” cu ”a
ji
= 0”, iar condit ¸ia ”a
xy
≥ 1” cu ”a
yx
≥ 1” ˆın funct ¸iile DF(x), respectiv
DF recursiv(x). Astfel, algoritmul DF poate fi utilizat ¸si pentru determinarea componentelor
tare-conexe, deci ¸si pentru verificarea tare-conexit˘ at ¸ii grafului.
Definit ¸ia 3.5.2. Fie G = (V, E) un graf ¸si x ∈ V un nod arbitrar fixat. Parcurgerea ˆın l˘ at ¸ime
(BF,”breadth first”, parcurgerea pe nivele) a grafului G pornind din nodul x, numit ¸si r˘ ad˘acin˘a
a acestei parcurgeri, const˘ a ˆın:
• se vizitez˘a nodul x, considerat nod de nivelul zero;
• se viziteaz˘a apoi succesorii direct ¸i nevizitat ¸i ai acestuia (diferit ¸i de x), considerat ¸i noduri de
nivelul 1;
• se viziteaz˘a apoi, pe rˆ and, succesorii direct ¸i nevizitat ¸i ai acestora, considerat ¸i noduri de nivelul
2;
¸s.a.m.d.;
• parcurgerea se ˆıncheie cˆand nici-un nod de pe un nivel nu mai are succesori direct ¸i nevizitat ¸i.
Observat ¸ia 3.5.5. Analog parcurgerii DF, considerˆ and cˆ ate o muchie sau un arc de la fiecare nod
curent v al parcurgerii BF la fiecare din nodurile nevizitate (de pe urm˘ atorul nivel) pentru care v
este predecesorul direct, se obt ¸ine un arbore, numit arbore BF.
Exemplul 3.5.3. Pentru graful din Exemplul 3.1.2, parcurgerea ˆın l˘ at ¸ime pornind din nodul 2 este
BF(2) : 2, 3, 4, 5, 1
(considerˆ and din nou ordinea dintre succesorii direct ¸i ai fiec˘arui nod ca fiind ordinea cresc˘ atoare).
Arborele BF corespunz˘ator acestei parcurgeri este reprezentat ˆın Figura 3.5.3. Pentru acela¸si graf,
1
3
2
4 5
Figura 3.5.3:
1
3
2
4 5
Figura 3.5.4:
parcurgerea BF pornind din nodul 3 este
BF(3) : 3, 1, 2, 4, 5,
iar arborele BF corespunz˘ ator este reprezentat ˆın Figura 3.5.4.
TEMA 3. GRAFURI 38
Algoritmul 3.5.4 (parcurgerea BF). Fie graful G = (V, E) avˆ and mult ¸imea de noduri V =
¦1, . . . , n¦ ¸si matricea de adiacent ¸˘a A = (a
ij
)
i,j=1,n
. Fie x ∈ V un nod arbitrar fixat. Pentru imple-
mentarea parcurgerii BF(x) vom utiliza vectorii V IZ, TATA, URM ¸si S avˆ and acelea¸si semnificat ¸ii
ca la parcurgerea DF(x) (Algoritmul 3.5.2), cu deosebirea c˘ a vectorul S al nodurilor vizitate ¸si ˆın
curs de prelucrare este organizat ¸si utilizat acum ca o structur˘ a de tip coad˘a.
Aceasta fiind singura modificare fat ¸˘a de Algoritmul 3.5.2, obt ¸inem urm˘ atoarea descriere ˆın pseu-
docod a algoritmului de parcurgere ˆın l˘ at ¸ime
BF(x) :
¦ viziteaz˘a(x);
V IZ[x] ← 1; TATA[x] ← 0;
varf ← 1; coada ← 1;//nodurile se adaug˘ a la S pe pozit ¸ia ”coada”
//¸si se elimin˘a de pe pozit ¸ia ”varf ”
S[coada] ← x;
cˆat timp (varf ≤ coada)
¦ i ← S[varf];
j ← URM[i] + 1;
cˆat timp (a
ij
= 0) ¸si (j ≤ n) j ← j + 1;
dac˘a (j > n)
¦ varf ← varf + 1;
¦
altfel
¦ URM[i] ← j;
dac˘a (V IZ[j] = 0)
¦ viziteaz˘a (j);
V IZ[j] ← 1; TATA[j] ← i;
coada ← coada + 1; S[coada] ← j;
¦
¦
¦
¦.
Observat ¸ia 3.5.6. Observat ¸iile 3.5.2, 3.5.3 ¸si 3.5.4 ¸si algoritmii corespunz˘ atori r˘ amˆ an valabile dac˘ a
ˆınlocuim parcurgerea DF cu parcurgerea BF.
3.6 Algoritmul Roy-Warshall
Definit ¸ia 3.6.1. Fie G = (V, E) un graf (neorientat sau orientat), unde V = ¦v
1
, . . . , v
n
¦. Ma-
tricea drumurilor asociat˘ a grafului G este matricea D = (d
ij
)
i,j=1,n
definit˘ a prin
d
ij
=

1, dac˘ a ∃ μ = (v
i
, . . . , v
j
) drum cu l(μ) > 0,
0, ˆın caz contrar,
unde l(μ) reprezint˘ a lungimea drumului μ.
Exemplul 3.6.1. Matricea drumurilor asociat˘ a grafului neorientat din Exemplul 3.1.1 este
D =








1 1 0 1 1 0
1 1 0 1 1 0
0 0 1 0 0 1
1 1 0 1 1 0
1 1 0 1 1 0
0 0 1 0 0 1








,
TEMA 3. GRAFURI 39
iar matricea drumurilor asociat˘ a grafului orientat din Exemplul 3.1.2 este
D =






1 1 1 1 1
1 1 1 1 1
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˘ a.
Observat ¸ia 3.6.2. Conform Observat ¸iei 3.4.5, pentru i = j putem ˆınlocui termenul de ”drum” cu
”drum elementar” ˆın definit ¸ia matricei drumurilor.
Urm˘ atorul algoritm determin˘ a matricea drumurilor unui graf pornind de la matricea de adiacent ¸˘a.
Algoritmul 3.6.1 (Roy-Warshall). Fie G = (V, E) un graf simplu cu V = ¦v
1
, . . . , v
n
¦ ¸si fie A =
(a
ij
)
i,j=1,n
matricea sa de adiacent ¸˘a (avˆ and toate elementele 0 sau 1). Se calculeaz˘ a matricele
D
(k)
= (d
(k)
ij
)
i,j=1,n
, k ∈ ¦0, 1, . . . , n¦,
definite prin
D
(0)
= A, (3.6.1)
d
(k)
ij
= d
(k−1)
ij
∨ d
(k−1)
ik
d
(k−1)
kj
, ∀k, i, j ∈ ¦1, . . . , n¦, (3.6.2)
unde 0 ∨ 0 = 0, 0 ∨ 1 = 1 ∨ 0 = 1 ∨ 1 = 1 (operat ¸ia de disjunct ¸ie, ”sau”).
Teorema 3.6.1 (de corectitudine a Algoritmului Roy-Warshall).
ˆ
In contextul Algoritmului
Roy-Warshall, ultima matrice calculat˘ a este chiar matricea drumurilor asociat˘ a grafului G, adic˘ a
D
(n)
= D.
Demonstrat ¸ie. Vom demonstra prin induct ¸ie dup˘a k ∈ ¦0, 1, . . . , n¦ c˘a pentru orice i, j ∈ ¦1, . . . , n¦
avem
d
(k)
ij
=

1, dac˘a ∃ μ = (v
i
, . . . , v
j
) drum cu l(μ) > 0 ¸si I(μ) ⊆ ¦v
1
, . . . , v
k
¦,
0, ˆın caz contrar,
(3.6.3)
unde l(μ) reprezint˘ a lungimea drumului μ, I(μ) reprezint˘ a mult ¸imea nodurilor intermediare ale dru-
mului μ, iar ¦v
1
, . . . , v
k
¦ reprezint˘a mult ¸imea ¦v
i
[, 1 ≤ i ≤ k¦, deci pentru k = 0 aceast˘ a mult ¸ime
este ∅.
Pentru k = 0 avem
d
(0)
ij
= a
ij
(conform (3.6.1)) ¸si a
ij
=

1, dac˘a (v
i
, v
j
) ∈ E,
0, ˆın caz contrar
(din definit ¸ia matricei de adiacent ¸˘a), iar (v
i
, v
j
) ∈ E dac˘a ¸si numai dac˘ a ∃ μ = (v
i
, . . . , v
j
) drum cu
l(μ) > 0 ¸si I(μ) = ∅, deci obt ¸inem egalitatea (3.6.3).
Presupunem acum egalitatea (3.6.3) adev˘ arat˘ a pentru k −1 (1 ≤ k ≤ n) ¸si o demonstr˘ am pentru
k. Folosind (3.6.2), definit ¸ia operat ¸iilor ∨ ¸si ¸si ipoteza de induct ¸ie avem echivalent ¸ele:
d
(k)
ij
= 1 ⇔ d
(k−1)
ij
= 1 sau d
(k−1)
ik
= d
(k−1)
kj
= 1 ⇔ ∃ μ = (v
i
, . . . , v
j
) drum cu
l(μ) > 0, I(μ) ⊆ ¦v
1
, . . . , v
k−1
¦ sau ∃ μ
1
= (v
i
, . . . , v
k
), μ
2
= (v
k
, . . . , v
j
)
drumuri cu l(μ
1
), l(μ
2
) > 0, I(μ
1
), I(μ
2
) ⊆ ¦v
1
, . . . , v
k−1
¦
⇔ ∃ μ = (v
i
, . . . , v
j
) cu l(μ) > 0, I(μ) ⊆ ¦v
1
, . . . , v
k
¦, v
k
∈ I(μ) sau
∃ μ

= (v
i
, . . . , v
k
, . . . , v
j
) cu l(μ

) > 0, I(μ

) ⊆ ¦v
1
, . . . , v
k
¦, v
k
∈ I(μ

)
TEMA 3. GRAFURI 40

se obt ¸ine parcurgˆ and ˆıntˆ ai μ
1
apoi μ
2
¸si, reciproc, μ
1
, μ
2
sunt port ¸iunile din μ

dintre v
i
¸si prima
aparit ¸ie a lui v
k
ˆın I(μ

), respectiv dintre ultima aparit ¸ie a lui v
k
ˆın I(μ

) ¸si v
j
)
⇔ ∃ μ = (v
i
, . . . , v
j
) drum cu l(μ) > 0 ¸si I(μ) ⊆ ¦v
1
, . . . , v
k
¦.
Demonstrat ¸ia prin induct ¸ie a egalit˘ at ¸ii (3.6.3) este astfel ˆıncheiat˘ a.
Pentru k = n condit ¸ia I(μ) ⊆ ¦v
1
, . . . , v
n
¦ poate fi eliminat˘ a, fiind ˆıntotdeauna adev˘ arat˘ a, deci
din (3.6.3) ¸si Definit ¸ia 3.6.1 obt ¸inem c˘a
d
(n)
ij
= d
ij
, ∀ i, j ∈ ¦1, . . . , n¦,
adic˘ a egalitatea din enunt ¸.
Observat ¸ia 3.6.3. Pentru n fixat, Algoritmul Roy-Warshall necesit˘ a 2n
3
operat ¸ii (cˆate o operat ¸ie ¸si
∨ pentru fiecare (k, i, j) ∈ ¦1, . . . , n¦¦1, . . . , n¦¦1, . . . , n¦), deci acest algoritm are complexitatea
O(n
3
). Reamintim notat ¸ia utilizat˘ a, pentru orice funct ¸ie f : N →N,
O(f) = ¦g[g : N →N, ∃r > 0, ∃n
0
∈ N a.ˆı. g(n) ≤ rf(n) ∀n ≥ n
0
¦.
Observat ¸ia 3.6.4. Algoritmul Roy-Warshall r˘ amˆ ane evident valabil ¸si pentru grafuri nesimple, cu
modificarea
d
(0)
ij
=

1, dac˘a a
ij
> 0,
0, dac˘a a
ij
= 0,
∀ i, j ∈ ¦1, . . . , n¦.
Exemplul 3.6.2. Pentru graful din Exemplul 3.1.2, prin aplicarea Algoritmului Roy-Warshall obt ¸inem
matricele:
D
(0)
= A =






0 1 0 0 0
0 0 1 1 1
1 1 0 0 0
0 0 0 0 0
0 0 0 1 0






(matricea de adiacent ¸˘a);
D
(1)
=






0 1 0 0 0
0 0 1 1 1
1 1 0 0 0
0 0 0 0 0
0 0 0 1 0






; D
(2)
=






0 1 1 1 1
0 0 1 1 1
1 1 1 1 1
0 0 0 0 0
0 0 0 1 0






(deoarece, de exemplu, d
(2)
13
= d
(1)
13
∨ d
(1)
12
d
(1)
23
= 0 ∨ 1 1 = 0 ∨ 1 = 1);
D
(3)
=






1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
0 0 0 0 0
0 0 0 1 0






; D
(4)
=






1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
0 0 0 0 0
0 0 0 1 0






;
D
(5)
=






1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
0 0 0 0 0
0 0 0 1 0






= D (matricea drumurilor).
TEMA 3. GRAFURI 41
Observat ¸ia 3.6.5. Conform ecuat ¸iilor (3.6.3), Algoritmul Roy-Warshall este un algoritm specific
metodei program˘arii dinamice.
Conform ecuat ¸iilor (3.6.2) ¸si definit ¸iei operat ¸iei ∨ avem d
(k)
ik
= d
(k−1)
ik
¸si d
(k)
kj
= d
(k−1)
kj
, ∀ k, i, j ∈
¦1, . . . , n¦, deci pentru implementarea algoritmului putem utiliza o singur˘ a matrice D. Astfel obt ¸inem
urm˘ atoarea descriere ˆın pseudocod a algoritmului
Roy Warshall :
¦ pentru i = 1, n
pentru j = 1, n d
ij
← a
ij
;//init ¸ializare
pentru k = 1, n
pentru i = 1, n
pentru j = 1, n d
ij
← d
ij
∨ d
ik
d
kj
;
¦,
iar pentru grafuri oarecare (simple sau nesimple) init ¸ializarea are forma
pentru i = 1, n
pentru j = 1, n
dac˘a (a
ij
> 0) d
ij
← 1;
altfel d
ij
← 0.
Observat ¸ia 3.6.6. Dac˘ a G = (V, E) este un graf neorientat ¸si V = ¦1, . . . , n¦, atunci pentru orice nod
x ∈ V componenta conex˘ a a nodului x este (indus˘a de) mult ¸imea
¦x¦ ∪ ¦y[y ∈ V ` ¦x¦, d
xy
= 1¦.
Astfel Algoritmul Roy-Warshall poate fi utilizat pentru determinarea componentelor conexe ¸si
pentru verificarea conexit˘ at ¸ii grafului.
Algoritmul 3.6.2 (determinarea componentelor tare-conexe). Dac˘ a G = (V, E) este un graf
orientat ¸si V = ¦1, . . . , n¦, atunci pentru orice nod x ∈ V componenta tare-conex˘ a a nodului x este
(indus˘a de) mult ¸imea
¦x¦ ∪ ¦y[y ∈ V ` ¦x¦, d
xy
= d
yx
= 1¦,
deci Algoritmul Roy-Warshall poate fi utilizat pentru determinarea componentelor tare-conexe ¸si
pentru verificarea tare-conexit˘ at ¸ii grafului.
Descrierea ˆın pseudocod a algoritmului are forma
componente tare conexe :
¦ nrc ← 0;//num˘ arul de componente tare-conexe
pentru i = 1, n CC[i] ← 0;//vectorul componentelor tare-conexe
Roy Warshall;
pentru i = 1, n
¦ dac˘a (CC[i] = 0)
¦ nrc ← nrc + 1; CC[i] ← nrc;
pentru j = i + 1, n
dac˘a (CC[j] = 0) ¸si (d
ij
= 1) ¸si (d
ji
= 1)
CC[j] ← nrc;
¦
¦
¦,
unde CC[i] reprezint˘ a num˘ arul componentei tare-conexe ˆın care se afl˘ a nodul i, ∀ i ∈ ¦1, . . . , n¦.
Tema 4
Arbori
4.1 Num˘arul ciclomatic
Propozit ¸ia 4.1.1 (Dirac). Fie G = (V, E) un graf neorientat simplu ¸si
δ(G) = min
x∈V
d(x)
gradul minim al nodurilor din G.
a) G cont ¸ine un lant ¸ deschis elementar μ astfel ˆıncˆ at
l(μ) ≥ δ(G),
unde l(μ) reprezint˘ a lungimea lant ¸ului μ.
b) Dac˘a δ(G) ≥ 2, atunci G cont ¸ine un ciclu elementar C astfel ˆıncˆ at
l(C) ≥ δ(G) + 1.
Definit ¸ia 4.1.1. Un graf se nume¸ste par dac˘ a toate nodurile sale au gradele pare.
Propozit ¸ia 4.1.2 (Veblen). Fie G = (V, E) un graf cu E = ∅. Atunci graful G este par dac˘ a ¸si
numai dac˘a exist˘a C
1
, . . . , C
k
cicluri elementare muchie-disjuncte (dou˘ a cˆ ate dou˘a) astfel ˆıncˆ at
E = E(C
1
) ∪ ∪ E(C
k
) (k ∈ N

), (4.1.1)
unde E(C
i
) reprezint˘ a mult ¸imea muchiilor ciclului C
i
, ∀ i ∈ ¦1, . . . , k¦.
Propozit ¸ia 4.1.3. Fie G = (V, E) un graf. Atunci ({(E), Δ, ) este un spat ¸iu vectorial peste corpul
finit cu dou˘ a elemente (Z
2
, +, ), unde
{(E) = ¦F[F ⊆ E¦, AΔB = (A ` B) ∪ (B ` A) (diferent ¸a simetric˘ a),
´
0 A = ∅,
´
1 A = A, ∀ A ∈ {(E).
Definit ¸ia 4.1.2. Spat ¸iul vectorial ({(E), Δ, ) din propozit ¸ia anterioar˘ a se nume¸ste spat ¸iul muchi-
ilor grafului G.
Propozit ¸ia 4.1.4. Fie G = (V, E) un graf ¸si
((E) = ¦F ⊆ E[(V, F) = graf par¦.
Atunci ((E) este un subspat ¸iu vectorial al spat ¸iului muchiilor grafului G.
42
TEMA 4. ARBORI 43
Propozit ¸ia 4.1.5. Fie G = (V, E) un graf ¸si
(
0
(E) = ¦F ⊆ E[∃ C = ciclu elementar ˆın G a.ˆı. F = E(C)¦,
unde E(C) este mult ¸imea muchiilor ciclului C. Atunci subspat ¸iul vectorial al spat ¸iului muchiilor lui
G generat de (
0
(E) este subspat ¸iul ((E) din propozit ¸ia anterioar˘ a.
Demonstrat ¸ie. Evident, (
0
(E) ⊆ ((E). Conform Propozit ¸iei 4.1.2, pentru orice F ∈ ((E), F = ∅,
exist˘ a F
1
, . . . , F
k
∈ (
0
(E) disjuncte dou˘ a cˆ ate dou˘ a a.ˆı. F = F
1
∪ ∪ F
k
, deci F = F
1
Δ. . . ΔF
k
=
´
1 F
1
Δ. . . Δ
´
1 F
k
.
Definit ¸ia 4.1.3. Subspat ¸iul ((E) din Propozit ¸ia 4.1.4 se nume¸ste spat ¸iul ciclurilor grafului G.
Dimensiunea acestui subspat ¸iu se nume¸ste num˘ arul ciclomatic al grafului G ¸si se noteaz˘a cu ν(G).
Propozit ¸ia 4.1.6 (Listing). Fie G = (V, E) o p˘adure cu n noduri, m muchii ¸si k componente
conexe. Atunci
m−n + k = 0.
Demonstrat ¸ie. Demonstr˘ am egalitatea din enunt ¸ prin induct ¸ie dup˘a m.
Pentru m = 0 rezult˘ a c˘ a toate nodurile sunt izolate, deci fiecare nod formeaz˘ a o component˘ a
conex˘a, adic˘ a k = n ¸si egalitatea m−n + k = 0 este verificat˘ a.
Presupunem adev˘arat˘ a egalitatea din enunt ¸ pentru orice p˘ adure cu m− 1 muchii (m ≥ 1) ¸si o
demonstr˘ am pentru p˘ adurea G cu m muchii. Fie
G

= (V, E

), unde E

= E ` ¦e¦, cu e ∈ E, e = [x, y].
Evident G

este o p˘ adure cu n noduri, m − 1 muchii ¸si k + 1 componente conexe (deoarece
componentele conexe din G ce nu cont ¸in x ¸si y r˘ amˆ an componente conexe ¸si ˆın G

, iar componenta
conex˘a din G ce cont ¸ine x ¸si y se partit ¸ioneaz˘ a ˆın dou˘ a componente conexe ˆın G

, una cont ¸inˆand pe
x ¸si cealalt˘ a pe y). Aplicˆ and ipoteza de induct ¸ie pentru graful G

avem
(m−1) −n + (k + 1) = 0, deci m−n + k = 0.
Corolarul 4.1.1. Orice arbore cu n noduri are m = n −1 muchii.
Demonstrat ¸ie. Se aplic˘ a propozit ¸ia anterioar˘ a, cu k = 1.
Propozit ¸ia 4.1.7. Un graf este conex dac˘ a ¸si numai dac˘a are arbori part ¸iali.
Demonstrat ¸ie. Dac˘ a graful G = (V, E) are un arbore part ¸ial T, atunci pentru orice x, y ∈ V , x = y,
exist˘ a un lant ¸ [x, . . . , y] ˆın T (fiind conex), deci ¸si ˆın G, ¸si astfel G este conex.
Reciproc, demonstr˘ am c˘ a orice graf conex G = (V, E) are arbori part ¸iali prin induct ¸ie dup˘a
num˘ arul p de cicluri elementare ale lui G.
Pentru p = 0 rezult˘ a c˘ a ˆınsu¸si G este un arbore, deci arbore part ¸ial ˆın G.
Presupunem adev˘arat˘ a afirmat ¸ia pentru orice graf conex cu cel mult p − 1 cicluri elementare
(p ≥ 1) ¸si o demonstr˘ am pentru graful conex G = (V, E) cu p cicluri elementare. Fie e = [x, y] o
muchie a lui G aflat˘ a pe un ciclu elementar C ¸si fie G

= (V, E ` ¦e¦). Graful G

r˘ amˆ ane conex (ˆıntre
x ¸si y exist˘ a lant ¸ul [x, v
1
, . . . , v
k
, y], unde [x, v
1
, . . . , v
k
, y, x] este ciclul C) ¸si are cel mult p −1 cicluri
elementare. Conform ipotezei de induct ¸ie, exist˘a un arbore part ¸ial T ˆın G

, deci ¸si ˆın G.
Propozit ¸ia 4.1.8. Fie G = (V, E) un graf, T = (V, F) un arbore part ¸ial al lui G ¸si e ∈ E ` F.
Atunci graful part ¸ial
T + e = (V, F ∪ ¦e¦)
are un unic ciclu elementar ¸si acest ciclu cont ¸ine muchia e.
TEMA 4. ARBORI 44
Demonstrat ¸ie. Fie e = [x, y]. T fiind arbore part ¸ial, exist˘ a un lant ¸ elementar μ = [x, v
1
, . . . , v
k
, y] ˆın
T, deci μ + e = [x, v
1
, . . . , v
k
, y, x] este un ciclu elementar ˆın T + e.
Unicitatea acestui ciclu rezult˘ a din unicitatea lant ¸ului elementar μ (dac˘ a ar exista dou˘ a lant ¸uri
elementare distincte μ
1
= [x, . . . , y] ¸si μ
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˘arului ciclomatic). Orice graf G = (V, E) cu n noduri, m muchii
¸si k componente conexe are num˘ arul ciclomatic
ν(G) = m−n + k.
Demonstrat ¸ie. Demonstr˘ am egalitatea din enunt ¸ ˆın dou˘ a etape.
Etapa 1) Presupunem c˘ a graful G este conex, deci k = 1. Fie T = (V, F) un arbore part ¸ial al lui
G (exist˘ a, conform Propozit ¸iei 4.1.7). Conform Corolarului 4.1.1, card (F) = n −1. Fie
E ` F = ¦e
1
, . . . , e
m−n+1
¦.
Pentru orice i ∈ ¦1, . . . , m−n + 1¦, fie C
i
mult ¸imea muchiilor ciclului elementar unic din T +e
i
(conform Propozit ¸iei 4.1.8). Atunci
B = ¦C
1
, . . . , C
m−n+1
¦
este o baz˘ a a spat ¸iului ciclurilor ((E) (numit˘ a baz˘a de cicluri a grafului G). Rezult˘ a c˘ a
ν(G) = card (B) = m−n + 1 = m−n + k.
Etapa 2) Fie acum G un graf oarecare ¸si G
1
, . . . , G
k
componentele sale conexe. Fie n
i
¸si m
i
numerele de noduri, respectiv muchii ale componentei G
i
. Evident, n = n
1
+ + n
k
¸si m =
m
1
+ + m
k
.
Deoarece subspat ¸iile ciclurilor componentelor G
1
, . . . , G
k
sunt liniar independente, avem
ν(G) = ν(G
1
) + + ν(G
k
).
Dar, conform etapei 1), ν(G
i
) = m
i
− n
i
+ 1 ∀ i ∈ ¦1, . . . , k¦, ¸si astfel prin adunare rezult˘ a c˘ a
ν(G) = m−n + k.
Observat ¸ia 4.1.1. Demonstrat ¸ia teoremei anterioare este constructiv˘ a, indicˆ and urm˘ atorul algoritm
de determinare a unei baze de cicluri pentru graful G:
• se determin˘ a componentele conexe G
1
, . . . , G
k
;
• pentru fiecare component˘ a G
i
, se determin˘ a un arbore part ¸ial T (de exemplu arborele DF sau
BF) ¸si ciclurile elementare C
1
, . . . , C
m
i
−n
i
+1
din grafurile T + e
i
, pentru fiecare muchie e
i
din
G
i
ce nu apart ¸ine lui T;
• ciclurile astfel determinate formeaz˘a ˆımpreun˘a o baz˘ a de cicluri pentru graful G.
Exemplul 4.1.1. Fie graful G reprezentat ˆın Figura 4.1.1.
Num˘arul s˘ au ciclomatic este ν(G) = m−n + k = 9 −7 + 1 = 3.
Considerˆ and arborele part ¸ial T reprezentat ˆın Figura 4.1.2 ¸si aplicˆ and algoritmul din observat ¸ia
anterioar˘ a se obt ¸ine baza de cicluri ¦C
1
, C
2
, C
3
¦ unde C
1
= ¦[1, 4], [4, 2], [2, 1]¦, C
2
= ¦[4, 5], [5, 2], [2, 4]¦
¸si C
3
= ¦[5, 6], [6, 3], [3, 2], [2, 5]¦.
TEMA 4. ARBORI 45
1 2 3
7
4 5 6
Figura 4.1.1:
1 2 3
7
4 5 6
Figura 4.1.2:
4.2 Teorema de caracterizare a arborilor
Teorema 4.2.1 (de caracterizare a arborilor). Fie G = (V, E) un graf cu n noduri. Urm˘ atoarele
afirmat ¸ii sunt echivalente:
1) G este un arbore (adic˘ a este conex ¸si f˘ ar˘ a cicluri);
2) G este f˘ ar˘ a cicluri ¸si are m = n −1 muchii;
3) G este conex ¸si are m = n −1 muchii;
4) G este f˘ ar˘ a cicluri ¸si maximal cu aceast˘a proprietate, adic˘ a dac˘ a se adaug˘ a o muchie ˆıntre
oricare dou˘ a noduri graful obt ¸inut cont ¸ine cicluri;
5) G este conex ¸si minimal cu aceast˘ a proprietate, adic˘ a dac˘ a se elimin˘ a o muchie oarecare graful
obt ¸inut devine neconex;
6) ˆıntre oricare dou˘ a noduri ale lui G exist˘a un unic lant ¸ elementar.
Demonstrat ¸ie. 1) ⇒ 2) Fie G un arbore, adic˘ a ¸si conex ¸si f˘ar˘ a cicluri. Deci 0 = ν(G) = m−n +1 ¸si
astfel m = n −1.
2) ⇒ 3) Fie G f˘ar˘ a cicluri ¸si cu m = n − 1 muchii. Avem 0 = ν(G) = n − 1 − n + k, unde k
reprezint˘a num˘ arul de componente conexe ale lui G, deci k = 1, adic˘ a G este conex.
3) ⇒ 4) Fie G conex ¸si cu m = n −1 muchii. Avem ν(G) = n −1 −n + 1 = 0, deci G este f˘ar˘ a
cicluri. Fie G + e = (V, E ∪ ¦e¦), e ∈ E. Graful G + e r˘ amˆ ane conex ¸si are n noduri ¸si m + 1 = n
muchii. Astfel ν(G + e) = n −n + 1 = 1, adic˘ a G + e cont ¸ine un ciclu (elementar).
4) ⇒ 5) Fie G f˘ar˘ a cicluri maximal. Dac˘ a G nu ar fi conex, atunci ad˘ augˆ and o muchie ˆıntre dou˘ a
noduri x ¸si y din componente conexe diferite ale lui G s-ar obt ¸ine un graf f˘ ar˘ a cicluri (deoarece nu
exist˘ a lant ¸ ˆıntre x ¸si y ˆın G), contradict ¸ie cu ipoteza. Deci G este conex.
Fie G − e = (V, E ` ¦e¦), e ∈ E, e = [x, y]. Dac˘ a graful G − e ar fi conex, atunci ar exista un
lant ¸ elementar [x, v
1
, . . . , v
k
, y] ˆın G−e ¸si astfel [x, v
1
, . . . , v
k
, 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˘ a x = y, rezult˘a c˘ a exist˘ a un lant ¸ elementar [x, . . . , y].
Dac˘ a x = y exist˘ a de asemenea lant ¸ul elementar [x] de lungime zero.
Dac˘ a ˆıntre nodurile x ¸si y ar exista dou˘ a lant ¸uri elementare distincte μ
1
= [x, v
1
, . . . , v
i
, y] ¸si
μ
2
= [x, w
1
, . . . , w
j
, y], atunci notˆ and cu e muchia [x, v
1
] a lant ¸ului μ
1
, graful G−e = (V, E ` ¦e¦) ar
r˘ amˆ ane conex (deoarece ˆıntre x ¸si v
1
avem lant ¸ul [x, w
1
, . . . , w
j
, y, v
i
, . . . , v
1
]), contradict ¸ie cu ipoteza.
Deci ˆıntre x ¸si y exist˘ a un unic lant ¸ elementar.
6) ⇒ 1) Fie G cu proprietatea c˘ a ˆıntre orice dou˘ a noduri exist˘ a un unic lant ¸ elementar. Evident,
G este conex. Dac˘ a G ar avea un ciclu elementar C = [x, v
1
, . . . , v
k
, x] atunci [x, v
1
] ¸si [v
1
, . . . , v
k
, x]
ar fi dou˘ a lant ¸uri elementare ˆıntre x ¸si v
1
, contradict ¸ie cu ipoteza. Deci G nu are cicluri elementare,
¸si nici neelementare (deoarece orice ciclu neelementar s-ar descompune ˆın cicluri elementare muchie-
disjuncte).
TEMA 4. ARBORI 46
4.3 Num˘ararea arborilor part ¸iali
Definit ¸ia 4.3.1. Fie G = (V, E) un graf f˘ ar˘ a bucle, unde V = ¦v
1
, . . . , v
n
¦. Matricea de
admitant ¸˘a asociat˘ a grafului G este matricea M = (m
ij
)
i,j=1,n
definit˘ a prin:
m
ii
= d
G
(v
i
), ∀ i ∈ ¦1, . . . , n¦;
−m
ij
= num˘ arul de muchii sau arce dintre v
i
¸si v
j
, ∀ i, j ∈ ¦1, . . . , n¦, i = j.
Exemplul 4.3.1. Fie G graful reprezentat ˆın Figura 4.3.1.
1 2
5
3 4
Figura 4.3.1:
Matricea de admitant ¸˘a a acestui graf este
M =






2 −1 −1 0 0
−1 5 −2 −1 −1
−1 −2 4 −1 0
0 −1 −1 2 0
0 −1 0 0 1






.
Observat ¸ia 4.3.1. Matricea de admitant ¸˘a este o matrice simetric˘ a (¸si pentru grafuri orientate!) ¸si are
toate sumele pe linii ¸si pe coloane egale cu zero.
Observat ¸ia 4.3.2. Definit ¸ia 4.3.1 se poate extinde ¸si pentru grafuri cu bucle, considerˆ and drept matrice
de admitant ¸˘a a unui astfel de graf matricea de admitant ¸˘a a grafului obt ¸inut prin eliminarea tuturor
buclelor.
Teorema 4.3.1 (Kirchoff-Trent). Fie G = (V, E) un graf f˘ ar˘ a bucle avˆ and matricea de admitant ¸˘a
M = (m
ij
)
i,j=1,n
, n ≥ 2. Atunci num˘ arul t(G) de arbori part ¸iali ai grafului G verific˘ a egalitatea
t(G) = (−1)
i+j
det[M]
ij
, ∀ i, j ∈ ¦1, . . . , n¦,
unde [M]
ij
reprezint˘ a matricea obt ¸inut˘ a din M prin eliminarea liniei i ¸si coloanei j.
Observat ¸ia 4.3.3. Teorema anterioar˘ a este valabil˘ a ¸si pentru grafuri cu bucle, folosind Observat ¸ia
4.3.2.
Exemplul 4.3.2. Aplicˆ and teorema anterioar˘ a rezult˘ a c˘ a num˘ arul arborilor part ¸iali ai grafului G din
Exemplul 4.3.1 este
t(G) = det[M]
22
=

2 −1 0 0
−1 4 −1 0
0 −1 2 0
0 0 0 1

= 12.
TEMA 4. ARBORI 47
Definit ¸ia 4.3.2. a) Graful neorientat simplu K
n
= (V, E) definit prin
V = ¦v
1
, . . . , v
n
¦, E = ¦[v
i
, v
j
][i, j ∈ ¦1, . . . , n¦, i = j¦
se nume¸ste graf complet de ordinul n, unde n ∈ N

.
b) Graful neorientat simplu K
p,q
= (V, E) definit prin
V = ¦x
1
, . . . , x
p
, y
1
, . . . , y
q
¦, E = ¦[x
i
, y
j
][i ∈ ¦1, . . . , p¦, j ∈ ¦1, . . . , q¦¦
se nume¸ste graf bipartit complet, unde p, q ∈ N

.
Corolarul 4.3.1. Graful complet K
n
are n
n−2
arbori part ¸iali.
Demonstrat ¸ie. Matricea de admitant ¸˘a a grafului K
n
este
M =




n −1 −1 . . . −1
−1 n −1 . . . −1
. . . . . . . . . . . .
−1 −1 . . . n −1




( de tipul n n),
deci conform teoremei anterioare avem
t(K
n
) = det[M]
11
=

n −1 −1 . . . −1
−1 n −1 . . . −1
. . . . . . . . . . . .
−1 −1 . . . n −1

(determinant de ordinul n −1). Adunˆ and toate liniile la prima linie, apoi adunˆ and linia obt ¸inut˘a la
cel˘alalte linii obt ¸inem
t(K
n
) =

1 1 . . . 1
−1 n −1 . . . −1
. . . . . . . . . . . .
−1 −1 . . . n −1

=

1 1 . . . 1
0 n . . . 0
. . . . . . . . . . . .
0 0 . . . n

= n
n−2
.
Observat ¸ia 4.3.4. Corolarul anterior poate fi reformulat astfel: num˘ arul arborilor ce pot fi construit ¸i
cu n noduri date (numit ¸i ¸si arbori etichetat ¸i) este egal cu n
n−2
.
Corolarul 4.3.2. Graful bipartit complet K
p,q
are p
q−1
q
p−1
arbori part ¸iali.
4.4 Arbori part ¸iali de cost minim
Definit ¸ia 4.4.1. Un graf ponderat este o pereche (G, c), unde G = (V, E) este un graf iar c : E →
R este o funct ¸ie numit˘a pondere (cost). Pentru orice e ∈ E, c(e) se nume¸ste ponderea (costul)
muchiei sau arcului e.
Definit ¸ia 4.4.2. Fie (G, c) un graf ponderat, G = (V, E).
a) Dac˘a H = (U, F) este un subgraf al lui G, atunci costul (ponderea) lui H este
c(H) =
¸
e∈F
c(e)
(adic˘ a suma costurilor muchiilor sau arcelor sale).
TEMA 4. ARBORI 48
b) Un arbore part ¸ial T

= (V, F) al lui G cu proprietatea c˘ a
c(T

) = min¦c(T)[T = arbore part ¸ial al lui G¦
se nume¸ste arbore part ¸ial de cost minim (APM) al grafului ponderat (G, c).
Observat ¸ia 4.4.1. Conform Propozit ¸iei 4.1.7, un graf ponderat are arbori part ¸iali de cost minim dac˘ a
¸si numai dac˘ a este conex.
Problema determin˘ arii arborilor part ¸iali de cost minim are numeroase aplicat ¸ii practice. Prezent˘am
ˆın continuare doi algoritmi fundamentali pentru rezolvarea acestei probleme.
Algoritmul 4.4.1 (Kruskal). Fie (G, c) un graf ponderat conex cu G = (V, E), V = ¦v
1
, . . . , v
n
¦.
Algoritmul are n −1 pa¸si.
• La pasul i, i = 1, n −1, dintre muchiile neselectate la pa¸sii anteriori se selecteaz˘a o muchie
e
i
∈ E de cost minim cu proprietatea c˘ a nu formeaz˘ a cicluri cu muchiile ¦e
1
, . . . , e
i−1
¦ selectate
la pa¸sii anteriori.
Algoritmul 4.4.2 (Prim). Fie (G, c) un graf ponderat conex cu G = (V, E), V = ¦v
1
, . . . , v
n
¦.
Algoritmul are n pa¸si.
• La pasul 0 se selecteaz˘ a un nod arbitrar x
0
∈ V .
• La pasul i, i = 1, n −1, se selecteaz˘a o muchie e
i
= [x
j
, x
i
] ∈ E de cost minim cu proprietatea
c˘a are ca extremit˘ at ¸i un nod x
j
∈ V selectat la un pas anterior ¸si cel˘alalt nod x
i
∈ V neselectat
la pa¸sii anteriori; se selecteaz˘ a ¸si nodul x
i
.
Teorema 4.4.1 (de corectitudine a algoritmilor Kruskal ¸si Prim).
ˆ
In contextul Algoritmilor
Kruskal sau Prim, fie F = ¦e
1
, . . . , e
n−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 a corectitudinii celor doi algoritmi. Fie T
0
=
(V, ∅) ¸si T
i
= (V, ¦e
1
, . . . , e
i
¦), ∀ i ∈ ¦1, 2, . . . , n −1¦, unde e
1
, e
2
, . . . , e
n−1
sunt muchiile selectate, ˆın
aceast˘ a ordine, de Algoritmul Kruskal sau de Algoritmul Prim.
Graful G fiind conex, selectarea muchiei e
i
este posibil˘ a la fiecare pas i, iar T
i
este o p˘ adure
part ¸ial˘ a a lui G (afirmat ¸ie evident˘a pentru Algoritmul Kruskal, iar pentru Algoritmul Prim este o
consecint ¸˘a a faptului c˘ a nodurile neselectate la pasul i sunt izolate ˆın T
i
).
Demonstr˘ am prin induct ¸ie dup˘a i ∈ ¦0, 1, . . . , n −1¦ c˘a exist˘ a un APM T

= (V, F

) astfel ˆıncˆat
T
i
⊆ T

(adic˘ a ¦e
1
, . . . , e
i
¦ ⊆ F

). (4.4.1)
Pentru i = 0 afirmat ¸ia este evident˘a, luˆ and T

orice APM (exist˘a, deoarece G este conex).
Presupunem (4.4.1) adev˘ arat˘ a pentru i − 1, adic˘ a exist˘ a T

= (V, F

) APM cu T
i−1
⊆ T

¸si o
demonstr˘ am pentru i (i ∈ ¦1, 2, . . . , n −1¦).
Fie e
i
= [x
j
, x
i
] muchia selectat˘ a de Algoritmul Kruskal sau de Algoritmul Prim la pasul i.
ˆ
In
cazul Algoritmului Prim, x
j
este nodul selectat la un pas anterior (j ≤ i −1). Avem dou˘ a cazuri.
Cazul 1) e
i
∈ F

. Atunci ¦e
1
, . . . , e
i
¦ ⊆ F

, deci T
i
⊆ T

.
Cazul 2) e
i
∈ F

. Conform Teoremei num˘ arului ciclomatic, graful H = T

+ e
i
= (V, F

∪ ¦e
i
¦)
obt ¸inut din T

prin ad˘ augarea muchiei e
i
cont ¸ine un ciclu elementar unic
C
i
= [x
j
, w
0
, . . . , w
k
, x
i
, x
j
]
avˆ and ultima muchie chiar muchia e
i
. Cum T
i
= T
i−1
+e
i
este o p˘ adure, rezult˘ a c˘ a x
j
¸si x
i
sunt ˆın com-
ponente conexe diferite ale lui T
i−1
(ˆın caz contrar T
i
ar cont ¸ine un ciclu de forma [x
j
, y
0
, . . . , y
r
, x
i
, x
j
]
avˆ and ultima muchie e
i
). Rezult˘ a c˘ a lant ¸ul elementar
μ
i
= [x
j
, w
0
, . . . , w
k
, x
i
]
TEMA 4. ARBORI 49
(obt ¸inut din ciclul C
i
prin eliminarea muchiei e
i
) cont ¸ine o muchie e

i
= [x

, y

] astfel ˆıncˆat x

este
ˆın aceea¸si component˘ a conex˘ a cu x
j
ˆın p˘ adurea T
i−1
, iar y

nu este ˆın aceast˘ a component˘ a conex˘ a.
Evident, rezult˘ a c˘ a e

i
nu este muchie a lui T
i−1
, adic˘ a e

i
∈ ¦e
1
, . . . , e
i−1
¦, iar graful T

i
= T
i−1
+ e

i
nu cont ¸ine cicluri. De asemenea, e

i
= e
i
, deci e

i
∈ F

.
Pe de o parte, din descrierea Algoritmului Kruskal deducem c˘ a
c(e
i
) ≤ c(e

i
)
(deoarece muchia e

i
nu formeaz˘ a cicluri cu ¦e
1
, . . . , e
i−1
¦, deci e
i
fiind muchia selectat˘ a la pasul i
verific˘ a aceast˘ a inegalitate).
Pe de alt˘a parte, din descrierea Algoritmului Prim deducem c˘ a la pasul i nodul x

era deja selectat
la un pas anterior (fiind ˆın aceea¸si component˘ a conex˘ a cu x
j
ˆın T
i−1
), iar nodul y

nu era selectat la
un pas anterior (nefiind ˆın acea component˘ a conex˘ a), deci din nou avem
c(e
i
) ≤ c(e

i
)
(e
i
fiind muchia selectat˘ a la pasul i verific˘a aceast˘ a inegalitate).
Continu˘ am demonstrat ¸ia comun˘ a pentru cei doi algoritmi. Fie
T

= (T

+ e
i
) −e

i
graful part ¸ial al lui G obt ¸inut din T

prin ad˘ augarea muchiei e
i
¸si eliminarea muchiei e

i
, adic˘ a
T

= (V, F

), unde F

= F

∪ ¦e
i
¦ ` ¦e

i
¦.
Evident, T

este conex (T

este conex iar ˆıntre nodurile x

¸si y

dup˘ a eliminarea muchiei e

i
r˘ amˆ ane lant ¸ul obt ¸inut din ciclul C
i
prin eliminarea acestei muchii) ¸si are n −1 muchii (deoarece T

are n −1 muchii). Conform Teoremei num˘ arului ciclomatic rezult˘ a c˘ a T

este un arbore part ¸ial al
grafului G.
Deoarece c(e
i
) ≤ c(e

i
) obt ¸inem
c(T

) ≤ c(T

)
¸si cum T

este un APM rezult˘a c˘ a ¸si T

este un APM (¸si, ˆın plus, c(T

) = c(T

)). Cum T
i
⊆ T

,
demonstrat ¸ia prin induct ¸ie a relat ¸iei (4.4.1) este complet˘ a.
Luˆ and i = n−1ˆın aceast˘ a relat ¸ie obt ¸inem c˘a T ⊆ T

, unde T = T
n−1
= (V, F), F = ¦e
1
, . . . , e
n−1
¦
(mult ¸imea muchiilor selectate de algoritm) iar T

este un APM. Dar T ¸si T

au fiecare cˆate n − 1
muchii, deci T = T

¸si astfel T este un APM al grafului dat.
Exemplul 4.4.1. Fie graful ponderat (G, c) reprezentat ˆın Figura 4.4.1, unde costul fiec˘ arei muchii
este scris lˆang˘ a segmentul corespunz˘ator acesteia.
120
150
130
90
80
40
70
20 60
30 50 100
70
110
100 30
10
1 2 3 4
5
6
7 8 9 10
Figura 4.4.1:
Aplicarea Algoritmului Kruskal este evident ¸iat˘ a ˆın urm˘atorul tabel:
TEMA 4. ARBORI 50
Pas Muchia selectat˘a Costul ei
1 [5, 8] 10
2 [3, 6] 20
3 [1, 2] 30
4 [8, 9] 30
5 [2, 3] 50
6 [2, 5] 60
7 [4, 6] 90
8 [7, 8] 100
9 [4, 10] 120
Arborele part ¸ial de cost minim obt ¸inut este reprezentat ˆın Figura 4.4.2. Costul acestui APM este de
510.
Aplicarea Algoritmului Prim pentru acela¸si graf este evident ¸iat˘ a ˆın urm˘atorul tabel:
Pas Muchia selectat˘a 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 acela¸si cu cel obt ¸inut prin aplicarea Algoritmului
Kruskal.
120
90
20 60
30 50
100 30
10
1 2 3 4
5
6
7 8 9 10
Figura 4.4.2:
Observat ¸ia 4.4.2. Algoritmii Kruskal ¸si Prim sunt specifici metodei de programare Greedy.
Algoritmul Kruskal selecteaz˘ a muchii, ˆın ordinea cresc˘ atoare a costurilor, subgrafurile induse pe
parcurs de acestea nefiind neap˘ arat conexe. Algoritmul Prim selecteaz˘ a muchii ¸si noduri, nu neap˘ arat
ˆın ordinea cresc˘ atoare a costurilor muchiilor, iar subgrafurile induse pe parcurs de muchiile selectate
sunt conexe.
ˆ
In implement˘ ari optime, se poate ar˘ ata c˘ a Algoritmul Kruskal are complexitatea O(mln n) (fiind
necesar˘a sortarea muchiilor dup˘ a cost), iar Algoritmul Prim are complexitatea O(n
2
) (o astfel de
implementare va fi prezentat˘ a ˆın continuare), unde n ¸si m reprezint˘ a numerele de noduri, respectiv
de muchii ale grafului dat. Graful fiind conex, m ≥ n −1.
TEMA 4. ARBORI 51
Pentru grafuri simple, m ≤
n(n−1)
2
. Folosind ¸si inegalitatea ln n ≤ n − 1, obt ¸inem c˘a Algoritmul
Kruskal este mai eficient pentru grafuri ”s˘ arace” ˆın muchii, iar Algoritmul Prim este mai eficient
pentru grafuri ”bogate” ˆın muchii.
Observat ¸ia 4.4.3. Pentru implementarea Algoritmului Kruskal, memor˘ am graful ponderat conex
(G, c), unde G = (V, E), V = ¦1, . . . , n¦, E = ¦e
1
, . . . , e
m
¦, ˆıntr-o matrice cu 3 linii ¸si m coloane
P = (p
ik
)
i = 1, 3
k = 1, m
avˆ and semnificat ¸ia:
dac˘a e
k
= [x
k
, y
k
] ∈ E, atunci p
1k
= x
k
, p
2k
= y
k
¸si p
3k
= c(e
k
).
Utiliz˘ am un vector S cu semnificat ¸ia
S[k] =

1, dac˘ a e
k
a fost selectat˘ a,
0, ˆın caz contrar,
∀ k ∈ ¦1, . . . , m¦ ¸si un vector CC cu semnificat ¸ia
CC[i] = num˘ arul componentei conexeˆın care se afl˘ a nodul i ˆın graful indus de muchiile selectate,
∀ i ∈ ¦1, . . . , n¦.
Astfel o muchie [x, y] nu formeaz˘ a cicluri cu muchiile selectate dac˘a ¸si numai dac˘ a
CC[x] = CC[y].
Descrierea ˆın pseudocod a algoritmului are forma
Kruskal :
¦ sortare(P);//se sorteaz˘a coloanele matricei P
//cresc˘ator dup˘ a costurile muchiilor
pentru i = 1, m S[i] ← 0;
pentru i = 1, n CC[i] ← i;
cost ← 0;//costul APM
poz ← 0;//c˘autarea urm˘ atoarei muchii e
k
ce
//va fi selectat˘a ˆıncepe de pe pozit ¸ia poz + 1
pentru l = 1, n −1 //pasul l
¦ k ← poz;
repet˘a
¦ k ← k + 1; x ← p
1k
; y ← p
2k
; c ← p
3k
;
¦
cˆat timp (CC[x] = CC[y]);
S[k] ← 1;//select˘am e
k
= [x, y]
cost ← cost + c; poz ← k;
aux ← CC[y];//actualiz˘am vectorul CC prin
//unificarea componentelor conexe ale lui x ¸si y
pentru i = 1, n
dac˘a (CC[i] = aux) CC[i] ← CC[x];
¦
¦.
Observat ¸ia 4.4.4. Pentru implementarea Algoritmului Prim, memor˘ am graful ponderat conex ¸si
simplu (G, c), unde G = (V, E), V = ¦1, . . . , n¦, E = ¦e
1
, . . . , e
m
¦, cu ajutorul unei matrice
C = (c
ij
)
i,j=1,n
a costurilor (directe) avˆ and semnificat ¸ia
c
ij
=



c([i, j]), dac˘a [i, j] ∈ E,
0, dac˘a i = j,
∞, ˆın rest,
(4.4.2)
TEMA 4. ARBORI 52
∀i, j ∈ ¦1, . . . , n¦. Pentru grafuri neorientate, matricea C este simetric˘a.
ˆ
In cazul grafurilor nesimple
putem lua
c
ij
= min¦c(e)[e = [i, j] ∈ E¦.
Utiliz˘ am un vector S cu semnificat ¸ia
S[i] =

1, dac˘a nodul i a fost selectat,
0, ˆın caz contrar
¸si doi vectori t ¸si TATA avˆ and semnificat ¸ia
t[i] = costul minim al unei muchii [i, j] de la nodul i la un nod selectat j,
TATA[i] = nodul j ce atinge minimul ˆın t[i], ∀ i ∈ ¦1, . . . , n¦.
Descrierea ˆın pseudocod a algoritmului are forma
Prim :
¦ S[1] ← 1;//select˘am nodul 1
cost ← 0;//costul APM
pentru i = 2, n
¦ S[i] ← 0; t[i] ← c
i1
; TATA[i] ← 1;
¦
pentru l = 1, n −1 //c˘aut˘ am nodul y ¸si muchia [x, y]
//ce vor fi selectate la pasul l
¦ min ← ∞;
pentru i = 2, n
¦ dac˘a (S[i] = 0) ¸si (t[i] < min)
¦ min ← t[i]; y ← i;
¦
¦
S[y] ← 1;// select˘am nodul y
x ← TATA[y];// ¸si muchia [x, y]
cost ← cost + c
xy
;
pentru i = 2, n// actualiz˘am vectorii t ¸si TATA
¦ dac˘a (S[i] = 0) ¸si (t[i] > c
iy
)
¦ t[i] ← c
iy
; TATA[i] ← y;
¦
¦
¦
¦.
Tema 5
Arborescent ¸e
5.1 Teorema de caracterizare a arborescent ¸elor
Definit ¸ia 5.1.1. Fie G = (V, E) un graf orientat. Un nod x ∈ V se nume¸ste r˘ ad˘acin˘ a a grafului
G dac˘ a pentru orice nod y ∈ V ` ¦x¦ exist˘a cel put ¸in un drum de la x la y.
Exemplul 5.1.1.
ˆ
In graful din Exemplul 3.1.2 nodurile 1, 2 ¸si 3 sunt r˘ ad˘ acini, iar nodurile 4 ¸si 5 nu
sunt r˘ ad˘ acini.
Definit ¸ia 5.1.2. a) O arborescent ¸˘a este un arbore care are o r˘ ad˘ acin˘ a.
b) O arborescent ¸˘a part ¸ial˘ a a unui graf orientat G = (V, E) este un graf part ¸ial al lui G ce este
arborescent ¸˘a (adic˘ a o arborescent ¸˘ a T = (V, F) cu F ⊆ E).
Exemplul 5.1.2. Graful din Exemplul 3.1.2 nu este arborescent ¸˘a (are cicluri, deci nu este arbore).
Dou˘ a arborescent ¸e part ¸iale ale sale sunt reprezentate ˆın Figurile 5.1.1 ¸si 5.1.2.
1 2
5
4
3
Figura 5.1.1:
1 2
5
4
3
Figura 5.1.2:
1 2
4 3
Figura 5.1.3:
Definit ¸ia 5.1.3. Un graf orientat G = (V, E) se nume¸ste quasi-tare conex dac˘ a pentru orice dou˘ a
noduri x, y ∈ V exist˘a un nod z ∈ V ¸si drumuri de la z la x ¸si de la z la y.
Observat ¸ia 5.1.1. Ca ¸si ˆın definit ¸iile conexit˘ at ¸ii ¸si tare-conexit˘ at ¸ii, ¸si ˆın Definit ¸iile 5.1.1 ¸si 5.1.3 putem
ˆınlocui termenul de ”drum” cu ”drum elementar” (conform Observat ¸iei 3.4.5).
Observat ¸ia 5.1.2. Evident, orice graf quasi-tare conex este conex. Reciproca nu este adev˘arat˘ a. De
exemplu, graful reprezentat ˆın Figura 5.1.3 este conex, dar nu este quasi-tare conex (pentru nodurile
x = 1 ¸si y = 4 nu exist˘ a noduri z din care s˘ a avem drumuri la x ¸si la y).
Observat ¸ia 5.1.3. Orice graf tare-conex este quasi-tare conex (deoarece pentru orice noduri x, y luˆ and
z = x exist˘ a drumuri (z, . . . , x) ¸si (z, . . . , y)). Reciproca nu este adev˘ arat˘ a. De exemplu, graful din
Exemplul 3.1.2 este quasi-tare conex, dar nu este tare-conex.
Propozit ¸ia 5.1.1. Un graf orientat este quasi-tare conex dac˘ a ¸si numai dac˘a are (cel put ¸in) o
r˘ ad˘ acin˘ a.
53
TEMA 5. ARBORESCENT¸ E 54
Demonstrat ¸ie. ”⇒” Fie G = (V, E) un graf quasi-tare conex, V = ¦v
1
, . . . , v
n
¦. Demonstr˘ am prin
induct ¸ie dup˘a k ∈ ¦1, . . . , n¦ c˘a exist˘ a un nod x
k
∈ V cu drumuri (x
k
, . . . , v
1
), (x
k
, . . . , v
2
), . . . , (x
k
, . . . , v
k
).
Pentru k = 1 lu˘ am x
1
= v
1
.
Presupunem adev˘arat˘ a afirmat ¸ia pentru k − 1 ¸si o demonstr˘ am pentru k. Deoarece graful este
quasi-tare conex, rezult˘a c˘ a exist˘ a un nod x
k
∈ V cu drumuri (x
k
, . . . , x
k−1
) ¸si (x
k
, . . . , v
k
). Conform
ipotezei de induct ¸ie, exist˘a drumuri (x
k−1
, . . . , v
1
), . . . , (x
k−1
, . . . , v
k−1
), deci exist˘ a drumuri
(x
k
, . . . , x
k−1
, . . . , v
1
), . . . , (x
k
, . . . , x
k−1
, . . . , v
k−1
), (x
k
, . . . , v
k
).
Demonstrat ¸ia prin induct ¸ie este ˆıncheiat˘ a.
Luˆ and k = n, nodul x
n
este o r˘ ad˘ acin˘ a a grafului G.
”⇐” Fie G = (V, E) ¸si z ∈ V o r˘ ad˘ acin˘ a a lui G. Pentru orice noduri x, y ∈ V exist˘ a drumuri
(z, . . . , x) ¸si (z, . . . , y), deci G este quasi-tare conex.
Teorema 5.1.1 (de caracterizare a arborescent ¸elor). Fie G = (V, E) un graf orientat cu n
noduri. Urm˘ atoarele afirmat ¸ii sunt echivalente:
1) G este quasi-tare conex ¸si f˘ ar˘ a cicluri;
2) G este quasi-tare conex ¸si are m = n −1 arce;
3) G este o arborescent ¸˘a (adic˘ a arbore cu r˘ ad˘ acin˘ a);
4) exist˘ a un nod x ∈ V astfel ˆıncˆ at pentru orice nod v ∈ V exist˘a un unic drum de la x la v;
5) G este quasi-tare conex ¸si minimal cu aceast˘ a proprietate, adic˘ a dac˘ a se elimin˘ a un arc oarecare
graful obt ¸inut nu mai este quasi-tare conex;
6) G este conex ¸si exist˘a un nod x ∈ V astfel ˆıncˆ at d

(x) = 0 ¸si d

(v) = 1 ∀ v ∈ V ` ¦x¦;
7) G este f˘ ar˘ a cicluri ¸si exist˘a un nod x ∈ V astfel ˆıncˆ at d

(x) = 0 ¸si d

(v) = 1 ∀ v ∈ V ` ¦x¦.
Demonstrat ¸ie. 1) ⇒ 2) Fie G quasi-tare conex ¸si f˘ar˘ a cicluri. Fiind quasi-tare conex, G este conex.
Deci G este un arbore ¸si astfel are m = n −1 arce (conform Teoremei de caracterizare a arborilor).
2) ⇒ 3) Fie G quasi-tare conex ¸si cu m = n −1 arce. Fiind quasi-tare conex, G este conex ¸si are
r˘ ad˘ acin˘ a (conform propozit ¸iei anterioare). Fiind conex cu m = n − 1 arce, G este arbore (conform
teoremei amintite mai sus).
3) ⇒ 4) Fie G arborescent ¸˘a ¸si x o r˘ ad˘ acin˘ a a lui G. Deci pentru orice nod v ∈ V exist˘ a un drum
de la x la v. Graful G fiind un arbore, acest drum, fiind ¸si lant ¸, este unic.
4) ⇒ 5) Fie G cu proprietatea 4). Deci x este o r˘ ad˘ acin˘ a a lui G ¸si astfel G este quasi-tare
conex (conform propozit ¸iei anterioare). Fie e = (y, z) ∈ E un arc arbitrar fixat. Demonstr˘ am c˘ a
G − e = (V, E ` ¦e¦) nu este quasi-tare conex prin reducere la absurd. Dac˘ a G − e ar fi quasi-tare
conex, atunci ar exista un nod v ∈ V ¸si drumuri (v, . . . , y) ¸si (v, . . . , z) ˆın G − e. x fiind r˘ ad˘ acin˘ a
ˆın G, s-ar obt ¸ine dou˘ a drumuri distincte (x, . . . , v, . . . , y, z) ¸si (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˘ ad˘ acin˘ a x. Demonstr˘ am c˘ a d

(x) = 0 prin reducere la absurd.
Dac˘ a am avea d

(x) > 0, atunci ar exista un arc e = (y, x) ∈ E, iar G − e ar avea ˆın continuare
r˘ ad˘ acina x (deoarece exist˘a drum elementar (x, . . . , y) ˆın G, deci ¸si ˆın G−e) ¸si astfel G−e ar r˘ amˆ ane
quasi-tare conex (conform propozit ¸iei anterioare), contradict ¸ie cu ipoteza.
Fie acum v ∈ V ` ¦x¦ un nod arbitrar fixat. x fiind r˘ ad˘ acin˘ a, exist˘ a un drum (x, . . . , y, v) de
lungime nenul˘ a (v = x), deci d

(v) ≥ 1 (∃(y, v) ∈ E). Demonstr˘ am c˘ a d

(v) = 1 prin reducere la
absurd. Dac˘ a am avea d

(v) > 1, atunci ar exista dou˘ a arce diferite e
1
= (y
1
, v),e
2
= (y
2
, v) ∈ E, iar
TEMA 5. ARBORESCENT¸ E 55
G − e
1
ar avea ˆın continuare r˘ ad˘ acina x (deoarece exist˘a un drum (x, . . . , y
2
, v) ˆın G − e
1
) ¸si astfel
G−e
1
ar r˘ amˆ ane quasi-tare conex (conform propozit ¸iei anterioare), contradict ¸ie cu ipoteza.
6) ⇒ 7) Fie G cu proprietatea 6). Conform Propozit ¸iei 3.3.2, m =
¸
t∈V
d

(t) = n −1, deci G este
un arbore (conform Teoremei de caracterizare a arborilor) ¸si astfel nu are cicluri.
7) ⇒ 1) Fie G cu proprietatea 7). Din nou, m =
¸
t∈V
d

(t) = n−1, deci G este un arbore ¸si astfel
este conex. Rezult˘a c˘ a pentru orice nod y ∈ V exist˘ a un lant ¸ elementar unic [x, v
1
, . . . , v
k
, y].
Deoarece d

(x) = 0 nu putem avea (v
1
, x) ∈ E, deci (x, v
1
) ∈ E. Cum (x, v
1
) ∈ E ¸si d

(v
1
) = 1,
nu putem avea (v
2
, v
1
) ∈ E, deci (v
1
, v
2
) ∈ E.
Continuˆ andˆın acest mod (induct ¸ie!) obt ¸inem (v
2
, v
3
) ∈ E, . . . , (v
k
, y) ∈ E, deci lant ¸ul [x, v
1
, . . . , v
k
, y]
este un drum de la x la y.
Rezult˘ a c˘ a x este o r˘ ad˘ acin˘ a ˆın G ¸si astfel, conform propozit ¸iei anterioare, G este quasi-tare
conex.
Corolarul 5.1.1. Orice arborescent ¸˘ a G = (V, E) are o unic˘ a r˘ ad˘ acin˘ a x ¸si aceasta verific˘ a pro-
priet˘ at ¸ile 4), 6) ¸si 7) din teorema anterioar˘ a.
Demonstrat ¸ie. Concluzia rezult˘ a imediat din demonstrat ¸ia teoremei anterioare.
5.2 Arborescent ¸e part ¸iale de cost minim
Definit ¸ia 5.2.1. Fie (G, c) un graf orientat ponderat, G = (V, E). O arborescent ¸˘a part ¸ial˘a T

=
(V, F) a lui G cu proprietatea c˘ a
c(T

) = min¦c(T)[T = arborescent ¸˘ a part ¸ial˘a a lui G¦
se nume¸ste arborescent ¸˘a part ¸ial˘ a de cost minim a grafului ponderat (G, c).
Pezent˘am ˆın continuare un algoritm fundamental pentru rezolvarea acestei probleme. Avem
nevoie de cˆateva not ¸iuni ¸si rezultate preg˘atitoare.
Lema 5.2.1. Un graf orientat are arborescent ¸e part ¸iale dac˘a ¸si numai dac˘a este quasi-tare conex,
adic˘ a dac˘ a ¸si numai dac˘a are (cel put ¸in) o r˘ ad˘ acin˘ a.
Definit ¸ia 5.2.2. Fie (G, c) un graf orientat ponderat ¸si quasi-tare conex, G = (V, E), V = ¦v
1
, . . . , v
n
¦.
Fie x = v
s
o r˘ ad˘ acin˘ a ˆın G.
Definim graful part ¸ial α(G, c) = (V, F) astfel:
• pentru fiecare nod v
i
∈ V `¦x¦, fie e
i
∈ E un arc de cost minim avˆ and forma e
i
= (y, v
i
), y ∈ V
(exist˘ a un astfel de arc, conform propriet˘ at ¸ii 6) din Teorema 5.1.1, Corolarului 5.1.1 ¸si Lemei
5.2.1);
• dac˘ a d

(x) = 0, atunci F = ¦e
i
[i ∈ ¦1, . . . , n¦ ` ¦s¦¦;
• dac˘ a d

(x) > 0, fie e
s
∈ E un arc de cost minim avˆ and forma e
s
= (y, x), y ∈ V . Fie e
i
un
arc de cost maxim din mult ¸imea ¦e
i
[i ∈ ¦1, . . . , n¦¦. Atunci F = ¦e
i
[i ∈ ¦1, . . . , n¦ ` ¦i

¦¦.
Observat ¸ia 5.2.1.
ˆ
In contextul definit ¸iei anterioare, dac˘ a d

(x) = 0 atunci x este unica r˘ad˘ acin˘ a a lui
G, iar dac˘ a d

(x) > 0 atunci mult ¸imea F nu depinde de alegerea lui x; deci ˆın ambele cazuri graful
α(G, c) nu depinde de alegerea r˘ ad˘ acinii x.
Exemplul 5.2.1. Fie (G, c) graful ponderat reprezentat ˆın Figura 5.2.1.
Arcele de cost minim la intrarea ˆın noduri fiind (5, 1), (3, 2), (5, 3), (2, 4), (4, 5), (4, 6), (1, 7),
(7, 8) iar cel mai mare cost dintre aceste arce avˆ and arcul (5, 1), obt ¸inem c˘a graful α(G, c) este cel
reprezentat ˆın Figura 5.2.2.
TEMA 5. ARBORESCENT¸ E 56
20
15
5
40
30
25
20
10 15
10
20
5
10
23
1
2
3
4
5
6
7
8
Figura 5.2.1:
Lema 5.2.2. Fie (G, c) un graf orientat ponderat ¸si quasi-tare conex, ¸si fie α(G, c) graful part ¸ial al
lui G dat de definit ¸ia anterioar˘ a. Dac˘a α(G, c) nu are circuite, atunci α(G, c) este o arborescent ¸˘a
part ¸ial˘ a de cost minim a grafului (G, c).
Definit ¸ia 5.2.3. Fie (G, c) un graf orientat ponderat, G = (V, E), ¸si fie C un circuit elementar al
lui G. Definim graful ponderat (G
|C
, c
|C
), G
|C
= (V

, E

) astfel:
• V

= V ` V (C) ∪ ¦x
C
¦, unde V (C) este mult ¸imea nodurilor circuitului C, iar x
C
∈ V este un
nod nou; spunem c˘ a nodul x
C
este obt ¸inut prin contract ¸ia circuitului C;
• E

= E
1
∪ E
2
∪ E
3
, unde
E
1
= ¦e ∈ E[e = (x, y), x, y ∈ V (C)¦,
E
2
= ¦(x
C
, y)[y ∈ V (C), ∃x ∈ V (C) astfel ˆıncˆ at (x, y) ∈ E¦,
E
3
= ¦(y, x
C
)[y ∈ V (C), ∃x ∈ V (C) astfel ˆıncˆ at (y, x) ∈ E¦;
• pentru orice e = (x, y) ∈ E
1
, c
|C
(e) = c(e);
• pentru orice e = (x
C
, y) ∈ E
2
,
c
|C
(e) = min¦c(x, y)[x ∈ V (C), (x, y) ∈ E¦;
spunem c˘ a arcul e provine din arcul (x, y) ∈ E ce atinge acest minim;
• pentru orice e = (y, x
C
) ∈ E
3
,
c
|C
(e) = min¦c(y, x) −c(z, x)[x ∈ V (C), (y, x) ∈ E, (z, x) ∈ E(C)¦
(unde E(C) reprezint˘ a mult ¸imea arcelor circuitului C); spunem din nou c˘ a arcul e provine
din arcul (y, x) ∈ E ce atinge acest minim.
Spunem c˘ a graful ponderat (G
|C
, c
|C
) se obt ¸ine din graful (G, c) prin contract ¸ia circuitului C.
TEMA 5. ARBORESCENT¸ E 57
15
5
20
15
10
5
10
1
2
3
4
5
6
7
8
Figura 5.2.2:
15
20
5
40
20
8
30
1
6
7
8
9
C
x =
Figura 5.2.3:
Exemplul 5.2.2. Pentru graful ponderat (G, c) din Exemplul 5.2.1 ¸si circuitul elementar C = (2, 4, 5, 3, 2),
graful (G
|C
, c
|C
) este reprezentat ˆın Figura 5.2.3.
De exemplu, arcul (x
C
, 6) provine din arcul de cost minim dintre (4, 6) ¸si (5, 6), adic˘ a din (4, 6), ¸si
are costul 20; arcul (1, x
C
) provine din acel arc dintre (1, 2) ¸si (1, 3) ce are diferent ¸a de cost minim˘ a
dintre c(1, 2) −c(3, 2) = 20−10 = 10 ¸si c(1, 3) −c(5, 3) = 23−15 = 8, adic˘ a din (1, 3) ¸si are costul 8.
Definit ¸ia 5.2.4. Fie (G, c) un graf orientat ponderat, G = (V, E), V = ¦v
1
, . . . , v
n
¦, C un circuit
elementar al lui G ¸si (G
|C
, c
|C
) graful ponderat obt ¸inut din G prin contract ¸ia circuitului C, G
|C
=
(V

, E

). Fie T = (V

, F

) o arborescent ¸˘a part ¸ial˘ a ˆın graful G
|C
¸si x
T
r˘ ad˘ acina sa. Definim graful
part ¸ial ϕ(T) = (V, F) al lui G prin:
• dac˘ a x
T
= x
C
(x
C
fiind nodul obt ¸inut prin contract ¸ia circuitului C ˆın graful G), atunci F =
F
1
∪ F
2
∪ [E(C) ` ¦e

¦], unde
F
1
= ¦e ∈ F

[e = (x, y), x, y ∈ V

` ¦x
C
¦¦,
F
2
= ¦(x, y)[(x, y) ∈ E este arcul din care provine un arc (x
C
, y) ∈ F

¦
TEMA 5. ARBORESCENT¸ E 58
(luˆand un singur arc (x, y) ∈ E pentru fiecare arc e = (x
C
, y) ∈ F

),
E(C) este mult ¸imea arcelor circuitului C, iar e

este un arc de cost maxim din E(C);
• dac˘ a x
T
= x
C
, atunci F = F
1
∪ F
2
∪ ¦(y, x)¦ ∪ [E(C) ` ¦(z, x)¦], unde F
1
¸si F
2
sunt definite
mai sus, (y, x) ∈ E este arcul din care provine unicul arc (y, x
C
) ∈ F

, iar (z, x) ∈ E(C) (arcul
unic de pe circuitul C incident cu x spre interior).
Lema 5.2.3.
ˆ
In contextul definit ¸iei anterioare, ϕ(T) este o arborescent ¸˘a part ¸ial˘a ˆın graful G.
Definit ¸ia 5.2.5.
ˆ
In contextul definit ¸iei anterioare, spunem c˘ a arborescent ¸a part ¸ial˘ a ϕ(T) se obt ¸ine
din arborescent ¸a part ¸ial˘ a T prin decontract ¸ia circuitului C.
Exemplul 5.2.3. Fie graful (G, c) din Exemplul 5.2.1, circuitul elementar C = (2, 4, 5, 3, 2) ¸si graful
(G
1
, c
1
) calculat ¸si reprezentat ˆın Exemplul 5.2.2.
Graful part ¸ial T = α(G
1
, c
1
) construit conform Definit ¸iei 5.2.2 este reprezentat ˆın Figura 5.2.4.
15
5
20
8
1
6
7
8
9
C
x =
Figura 5.2.4:
Deci T este o arborescent ¸˘a part ¸ial˘ a (de cost minim, conform Lemei 5.2.2) ˆın graful (G
1
, c
1
), avˆ and
r˘ ad˘ acina 1, 1 = x
C
. Arborescent ¸a part ¸ial˘ a ϕ(T) a grafului init ¸ial G obt ¸inut˘ a din T prin decontract ¸ia
circuitului C este reprezentat˘a ˆın Figura 5.2.5. Arcul (x
C
, 6) din T s-a ˆınlocuit ˆın ϕ(T) cu arcul (4, 6)
din care a provenit; arcul (1, x
C
) din T s-a ˆınlocuit ˆın ϕ(T) cu arcul (1, 3) din care a provenit ¸si a
condus ¸si la eliminarea arcului (5, 3) (arcul unic de pe circuitul C incident cu 3 spre interior).
Lema 5.2.4. Fie (G, c) un graf orientat ponderat, C un circuit elementar al lui G ¸si (G
1
, c
1
) =
(G
|C
, c
|C
) graful ponderat obt ¸inut din G prin contract ¸ia circuitului C. Atunci G are arborescent ¸e
part ¸iale dac˘a ¸si numai dac˘a G
1
are arborescent ¸e part ¸iale.
Lema 5.2.5. Fie (G, c) un graf orientat ponderat ¸si quasi-tare conex, C un circuit elementar al
lui G ¸si (G
1
, c
1
) = (G
|C
, c
|C
) graful ponderat obt ¸inut din G prin contract ¸ia circuitului C. Fie T
o arborescent ¸˘a part ¸ial˘ a ˆın graful (G
1
, c
1
) ¸si ϕ(T) arborescent ¸a part ¸ial˘ a ˆın graful (G, c) construit˘ a
conform Definit ¸iei 5.2.4. Atunci, cu notat ¸iile din acea definit ¸ie, avem
c(ϕ(T)) =

c
1
(T) + c(C), dac˘ a x
C
= x
T
,
c
1
(T) + c(C) −c(e

), dac˘ a x
C
= x
T
.
TEMA 5. ARBORESCENT¸ E 59
15
5
20
10
5
10
23
1
2
3
4
5
6
7
8
Figura 5.2.5:
Lema 5.2.6. Fie (G, c) un graf orientat ponderat ¸si quasi-tare conex ¸si fie α(G, c) graful part ¸ial al
lui G dat de Definit ¸ia 5.2.2. Fie C un circuit elementar ˆın graful α(G, c), deci ¸si ˆın graful G. Fie
(G
1
, c
1
) = (G
|C
, c
|C
) graful ponderat obt ¸inut din G prin contract ¸ia circuitului C ¸si fie T o arborescent ¸˘a
part ¸ial˘ a de cost minim ˆın acest graf. Atunci graful ϕ(T) construit conform Definit ¸iei 5.2.4 este o
arborescent ¸˘ a part ¸ial˘ a de cost minim ˆın graful (G, c).
Exemplul 5.2.4. Revenind la exemplul anterior, cum T = α(G
1
, c
1
) este o arborescent ¸˘a part ¸ial˘ a de
cost minim ˆın graful (G
1
, c
1
) (conform Lemei 5.2.2), rezult˘ a c˘ a ϕ(T) este o arborescent ¸˘a part ¸ial˘ a de
cost minim ˆın graful init ¸ial (G, c).
Conform Lemelor 5.2.2 ¸si 5.2.6 obt ¸inem urm˘ atorul algoritm pentru determinarea unei arborescent ¸e
part ¸iale de cost minim.
Algoritmul 5.2.1 (Edmonds). Fie (G, c) un graf orientat ponderat ¸si quasi-tare conex (verificarea
quasi-tare conexit˘ at ¸ii poate fi efectuat˘ a pe baza Propozit ¸iei 5.1.1). Fie G = (V, E), V = ¦1, . . . , n¦.
Algoritmul descris ˆın pseudocod are forma
Edmonds :
¦ repet˘a
¦ k ← 1; nv ← n;//k = pasul; nv = num˘ arul de noduri la pasul curent
greedy;//se determin˘a graful part ¸ial α(G, c) pentru graful curent
dac˘a (exist˘a circuit) //acesta cont ¸ine circuite
¦ determin˘a circuit;// se determin˘a un circuit elementar C
nv ← nv + 1;//nv reprezint˘ a nodul x
C
contract ¸ie;// se efectueaz˘a contract ¸ia circuitului C
k ← k + 1;//se reia algoritmul pentru noul graf
¦
¦
cˆat timp (exist˘a circuit);
//nu mai exist˘ a circuite, structura α(G, c) din graful curent este arborescent ¸˘a part ¸ial˘ a de cost minim
//ˆın acest graf; trecem la decontract ¸iile succesive ale arborescent ¸elor part ¸iale de cost minim,
//ˆın ordinea invers˘ a a pa¸silor
k ← k −1;
cˆat timp (k > 0)
¦ decontract ¸ie;//decontract ¸ia arborescent ¸ei part ¸iale din graful curent
TEMA 5. ARBORESCENT¸ E 60
nv ← nv −1;
k ← k −1;//se reia algoritmul pentru noul graf
¦
afi¸sare;//se afi¸seaz˘a arborescent ¸a part ¸ial˘ a de cost minim
¦.
Graful part ¸ial (structura de tip greedy) α(G, c) poate fi u¸sor memorat ˆıntr-un vector TATA avˆ and
semnificat ¸ia
TATA[i] =

j, dac˘a (j, i) este un arc al grafului α(G, c),
0, ˆın caz contrar,
iar circuitul elementar C din acest graf poate fi determinat ¸si memorat folosind un vector PAS avˆ and
semnificat ¸ia
PAS[i] =

k, dac˘a nodul i face parte din circuitul C de la un pas k,
0, ˆın caz contrar.
Observat ¸ia 5.2.2. Algoritmul Edmonds este specific metodei de programare Greedy.
ˆ
In imple-
mentarea optim˘ a, se poate ar˘ ata c˘ a acest algoritm are complexitatea O(mn), unde n ¸si m reprezint˘ a
numerele de noduri, respectiv de arce ale grafului dat.
Tema 6
Clase particulare de grafuri
6.1 Grafuri euleriene
Definit ¸ia 6.1.1. a) Fie G = (V, E) un graf. Un lant ¸ simplu, ciclu, drum simplu sau circuit ˆın
graful G ce cont ¸ine toate muchiile sau arcele lui G se nume¸ste eulerian.
b) Un graf neorientat se nume¸ste eulerian dac˘ a are (cel put ¸in) un ciclu eulerian.
c) Un graf orientat se nume¸ste eulerian dac˘ a are (cel put ¸in) un circuit eulerian.
Exemplul 6.1.1. Graful neorientat reprezentat ˆın Figura 6.1.1 este eulerian, un ciclu eulerian al s˘ au
fiind C = [1, 2, 3, 4, 10, 9, 3, 6, 2, 5, 8, 7, 5, 1].
1 2 3 4
7 8 9 10
6
5
Figura 6.1.1:
Exemplul 6.1.2. Fie graful orientat reprezentat ˆın Figura 6.1.2. Un drum eulerian ˆın acest graf este
(1, 2, 3, 4, 6, 3, 5, 6, 1, 5, 4).
2
1
3
4
5 6
Figura 6.1.2:
61
TEMA 6. CLASE PARTICULARE DE GRAFURI 62
Observat ¸ia 6.1.1. Existent ¸a lant ¸urilor, ciclurilor, drumurilor sau circuitelor euleriene nu este influent ¸at˘ a
de prezent ¸a unor eventuale noduri izolate, deci putem analiza ˆın continuare doar grafurile f˘ ar˘ a noduri
izolate.
Teorema 6.1.1 (Euler, de caracterizare a grafurilor euleriene neorientate). Un graf neorientat f˘ ar˘ a
noduri izolate este eulerian dac˘ a ¸si numai dac˘a este conex ¸si par.
Demonstrat ¸ie. ”⇒” Fie G = (V, E) un graf neorientat eulerian, f˘ ar˘ a noduri izolate. Fie C un ciclu
eulerian al lui G. Neexistˆand noduri izolate, orice nod x ∈ V are o muchie incident˘a, ¸si cum aceast˘ a
muchie apart ¸ine lui C rezult˘a c˘ a ¸si nodul x apart ¸ine lui C. Deci C cont ¸ine ¸si toate nodurile lui
G. Rezult˘ a c˘ a G este conex, ˆıntre orice dou˘ a noduri distincte x, y ∈ V existˆ and un lant ¸ elementar
cont ¸inut ˆın ciclul C.
Cum C cont ¸ine toate muchiile lui G rezult˘a c˘ a
d
G
(x) = d
C
(x) = par, ∀ x ∈ V
(orice ciclu este evident un subgraf par).
”⇐” Fie G = (V, E) un graf neorientat conex, par ¸si f˘ar˘ a noduri izolate. Conform Propozit ¸iei
4.1.2, graful G are o descompunere ˆın cicluri elementare muchie-disjuncte C
1
, . . . , C
k
, k ≥ 1.
Dac˘ a k = 1, atunci C
1
este un ciclu eulerian ˆın G.
Dac˘ a k ≥ 2, graful G fiind conex, ciclul C
1
are un nod comun cu un alt ciclu din ¦C
2
, . . . , C
k
¦. Fie
C
2
acest ciclu ¸si C

2
ciclul obt ¸inut pornind din nodul comun ¸si parcurgˆ and ˆıntˆ ai C
1
apoi C
2
. Spunem
c˘a C

2
se obt ¸ine prin concatenarea (alipirea) ciclurilor C
1
¸si C
2
.
Dac˘ a k = 2, atunci C

2
este un ciclu eulerian ˆın G.
Dac˘ a k ≥ 3, din conexitatea lui G obt ¸inem c˘a C

2
are un nod comun cu un alt ciclu din
¦C
3
, . . . , C
k
¦, fie acesta C
3
, ¸si fie C

3
ciclul obt ¸inut prin concatenarea ciclurilor C

2
¸si C
3
. Continuˆ and
acest procedeu de concatenare a ciclurilor, rezult˘ a (prin induct ¸ie dup˘a k) c˘a obt ¸inem un ciclu C

k
ce
este eulerian ˆın G.
Exemplul 6.1.3. Graful din Exemplul 6.1.1 este conex, par ¸si f˘ar˘ a noduri izolate, deci este eulerian.
Observat ¸ia 6.1.2. Demonstrat ¸ia teoremei anterioare este constructiv˘ a, ea indicˆ and un algoritm de
determinare a unui ciclu eulerian ˆıntr-un graf neorientat conex, par ¸si f˘ar˘ a noduri izolate.
Prezent˘am ˆın continuare un algoritm pentru determinarea unui ciclu eulerian bazat pe arborele
DF al grafului dat.
Algoritmul 6.1.1 (de determinare a unui ciclu eulerian). Fie G = (V, E) un graf neorientat
conex, par ¸si f˘ar˘ a noduri izolate. Verificarea conexit˘ at ¸ii, cu neglijarea nodurilor izolate, poate fi
efectuat˘ a cu ajutorul parcurgerii DF (Algoritmul 3.5.3), iar verificarea parit˘ at ¸ii poate fi efectuat˘ a cu
ajutorul Propozit ¸iei 3.3.1. Fie T = (V, F) arborele DF al lui G, considerˆ and ca r˘ ad˘ acin˘ a a parcurgerii
DF un nod x
1
∈ V arbitrar fixat. Un ciclu eulerian ˆın G poate fi obt ¸inut astfel:
• se porne¸ste din nodul r˘ ad˘ acin˘ a x
1
;
• se parcurg cu prioritate muchiile (neparcurse anterior) ce nu apart ¸in arborelui DF (adic˘ a dac˘ a
exist˘ a o astfel de muchie [x, y], incident˘a cu nodul curent x, se parcurge aceast˘ a muchie ¸si nodul
curent devine y, iar dac˘ a nu exist˘ a o astfel de muchie se parcurge, dac˘ a exist˘ a, o muchie [x, z]
a arborelui DF, incident˘a cu nodul curent x, ¸si nodul curent devine z).
• se continu˘ a parcurgerea ˆın modul descris mai sus, cˆat timp este posibil.
Exemplul 6.1.4. Arborele DF(1) al grafului din Exemplul 6.1.1 este reprezentat ˆın Figura 6.1.3.
Aplicˆ and algoritmul anterior obt ¸inem ciclul eulerian
[1, 5, 8, 7, 5, 2, 6, 3, 9, 10, 4, 3, 2, 1].
TEMA 6. CLASE PARTICULARE DE GRAFURI 63
1 2 3 4
7 8 9 10
6
5
Figura 6.1.3:
Observat ¸ia 6.1.3. Datorit˘ a necesit˘at ¸ii parcurgerii DF, dar ¸si a tuturor muchiilor grafului dat, com-
plexitatea Algoritmului 6.1.1 este O(m), unde m reprezint˘a num˘ arul de muchii ale grafului dat.
Observat ¸ia 6.1.4. Pentru implementarea Algoritmului 6.1.1, ˆın cazul grafurilor simple putem memora
arborele DF tot ˆın matricea de adiacent ¸˘a A considerˆ and
a
ij
= 2 dac˘ a muchia [i, j] apart ¸ine arborelui DF.
Algoritmul descris ˆın pseudocod are forma
ciclu eulerian(x) :
¦ i ← x;//i este nodul curent al ciclului eulerian
repet˘a
¦ afi¸seaz˘a i;
j ← 1;
cˆat timp (a
ij
= 1) ¸si (j ≤ n) j ← j + 1;// c˘aut˘ am [i, j] ∈ DF
dac˘a (j ≤ n) //exist˘a, deci [i, j] ∈ ciclu eulerian
¦ a
ij
← 0; a
ji
← 0;//elimin˘ am [i, j] din graf
i ← j;
¦
altfel
¦ j ← 1;
cˆat timp (a
ij
= 2) ¸si (j ≤ n) j ← j + 1;//c˘aut˘ am [i, j] ∈ DF
dac˘a (j ≤ n) //exist˘a, deci [i, j] ∈ ciclu eulerian
¦ a
ij
← 0; a
ji
← 0;//elimin˘ am [i, j] din graf
i ← j;
¦
¦
¦
cˆat timp (j ≤ n);
¦.
Observat ¸ia 6.1.5.
ˆ
In cazul grafurilor nesimple, pentru implementarea Algoritmului 6.1.1 graful dat
poate fi memorat cu ajutorul matricei de adiacent ¸˘a, iar arborele DF poate fi memorat cu ajutorul
vectorului TATA. Verificarea dac˘ a [i, j] ∈ DF revine la ”TATA[i] = j sau TATA[j] = i”, iar
eliminarea unei muchii [i, j] din graf revine la ”a
ij
← a
ij
−1 ¸si a
ji
← a
ji
−1”.
Corolarul 6.1.1. Un graf neorientat f˘ ar˘ a noduri izolate are un lant ¸ eulerian deschis dac˘ a ¸si nu-
mai dac˘ a este conex ¸si are exact dou˘ a noduri de grade impare.
ˆ
In plus, orice lant ¸ eulerian are ca
extremit˘ at ¸i cele dou˘ a noduri de grade impare.
Demonstrat ¸ie. ”⇒” Fie G = (V, E) un graf neorientat f˘ ar˘ a noduri izolate, avˆ and un lant ¸ eulerian
deschis μ = [x, v
1
, . . . , v
k
, y]. Evident, G este conex.
TEMA 6. CLASE PARTICULARE DE GRAFURI 64
Fie G

= (V, E ∪ ¦e¦), unde e = [y, x], e ∈ E (muchie nou˘ a). Ad˘ augˆ and muchia e la lant ¸ul μ
obt ¸inem un ciclu eulerian C = [x, v
1
, . . . , v
k
, y, x] ˆın graful G

. Conform Teoremei 6.1.1, G

este conex
¸si par. Rezult˘ a c˘ a
d
G
(x) = d
G
(x) −1 = impar,
d
G
(y) = d
G
(y) −1 = impar,
d
G
(z) = d
G
(z) = par ∀ z ∈ V ` ¦x, y¦.
”⇐” Fie G = (V, E) un graf neorientat conex, f˘ ar˘ a noduri izolate, cu exact dou˘ a noduri x ¸si y
de grade impare. Fie G

graful definit ca mai sus. Rezult˘ a c˘ a G

este conex ¸si par, deci conform
Teoremei 6.1.1 el cont ¸ine un ciclu eulerian C = [x, v
1
, . . . , v
k
, y, x]. Eliminˆand muchia e = [y, x] de
pe ciclul C obt ¸inem un lant ¸ eulerian deschis μ = [x, v
1
, . . . , v
k
, y] ˆın graful G.
Observat ¸ia 6.1.6. Folosind trecerea ˆıntre grafurile G ¸si G

¸si ˆıntre lant ¸ul eulerian deschis μ ¸si ciclul
eulerian C din demonstrat ¸ia corolarului anterior, precum ¸si Algoritmul 6.1.1, se obt ¸ine un algoritm
pentru determinarea lant ¸urilor euleriene deschise ˆıntr-un graf dat.
Teorema 6.1.2 (de caracterizare a grafurilor euleriene orientate). Un graf orientat f˘ ar˘ a noduri
izolate este eulerian dac˘ a ¸si numai dac˘a este conex ¸si d
+
(x) = d

(x), pentru orice nod x.
Demonstrat ¸ie. Demonstrat ¸ia este analog˘ a cu cea a Teoremei 6.1.1, ˆınlocuind ”ciclu” cu ”circuit” ¸si
”d(x) = par” cu ”d
+
(x) = d

(x)”.
Existent ¸a unui circuit se obt ¸ine pornind dintr-un nod arbitrar ¸si parcurgˆ and succesiv arce cˆat
timp este posibil (revenirea ˆın nodul init ¸ial este asigurat˘ a de condit ¸ia d
+
(x) = d

(x) ∀x).
Corolarul 6.1.2. Un graf orientat f˘ ar˘ a noduri izolate are un drum eulerian deschis dac˘ a ¸si numai
dac˘ a este conex ¸si are dou˘ a noduri x ¸si y astfel ˆıncˆ at d
+
(x) = d

(x) + 1, d
+
(y) = d

(y) − 1,
d
+
(z) = d

(z) pentru orice nod z diferit de x ¸si y.
ˆ
In plus, orice drum eulerian are ca extremitate
init ¸ial˘a nodul x ¸si ca extremitate final˘ a nodul y.
Demonstrat ¸ie. Demonstrat ¸ia este analog˘ a cu cea a Corolarului 6.1.1, utilizˆ and acum Teorema 6.1.2.
Exemplul 6.1.5. Graful din Exemplul 6.1.2 este conex, f˘ ar˘ a noduri izolate ¸si
d
+
(1) = d

(1) + 1, d
+
(4) = d

(4) −1, d
+
(z) = d

(z) ∀ z ∈ V ` ¦1, 4¦,
deci graful are drumuri euleriene de forma (1, . . . , 4).
Observat ¸ia 6.1.7. Demonstrat ¸ia Teoremei 6.1.2 este constructiv˘ a, ea indicˆ and un algoritm de de-
terminare a unui circuit eulerian ˆıntr-un graf orientat ce verific˘ a ipotezele teoremei. De asemenea,
analog Observat ¸iei 6.1.6, acest algoritm poate fi utilizat ¸si pentru determinarea unui drum eulerian
deschis ˆıntr-un graf orientat ce verific˘ a ipotezele Corolarului 6.1.2.
6.2 Grafuri hamiltoniene
Definit ¸ia 6.2.1. a) Fie G = (V, E) un graf. Un lant ¸ elementar, ciclu elementar, drum elementar
sau circuit elementar ˆın graful G ce cont ¸ine toate nodurile lui G se nume¸ste hamiltonian.
b) Un graf neorientat se nume¸ste hamiltonian dac˘ a are (cel put ¸in) un ciclu hamiltonian.
c) Un graf orientat se nume¸ste hamiltonian dac˘ a are (cel put ¸in) un circuit hamiltonian.
Exemplul 6.2.1. Graful eulerian din Exemplul 6.1.1 nu este hamiltonian, deoarece pentru ca un circuit
s˘a treac˘ a de la nodul 1 la nodul 3 ¸si s˘a revin˘ a ˆın nodul 1 ar trebui s˘ a treac˘ a de cel put ¸in dou˘ a ori
prin nodul 2.
TEMA 6. CLASE PARTICULARE DE GRAFURI 65
Exemplul 6.2.2. Graful reprezentat ˆın Figura 6.2.1 este hamiltonian, un ciclu hamiltonian al s˘ au fiind
C = [1, 2, 3, 4, 8, 7, 6, 5, 1]. Acest graf nu este eulerian, avˆ and 4 noduri de grade impare.
1 2 3 4
5 6 7 8
Figura 6.2.1:
Observat ¸ia 6.2.1. Spre deosebire de problemele euleriene studiate ˆın sect ¸iunea anterioar˘ a, problemele
de testare a hamiltoneit˘ at ¸ii unui graf ¸si de determinare a unui ciclu sau circuit hamiltonian optim
ˆıntr-un graf ponderat sunt probleme pentru care nu se cunosc (pˆ an˘ aˆın prezent) algoritmi de rezolvare
cu complexitate polinomial˘ a (numite ¸si probleme NP). Dispunem totu¸si de numeroase condit ¸ii fie
necesare, fie suficiente, pentru ca un graf dat s˘ a fie hamiltonian. Cˆ ateva astfel de condit ¸ii vor fi
prezentate ˆın continuare.
Observat ¸ia 6.2.2. Este evident c˘a ˆıntr-un graf cu n ≥ 3 noduri orice lant ¸, ciclu, drum sau circuit
hamiltonian nu utilizeaz˘ a bucle ¸si nici muchii sau arce multiple, deci este suficient s˘a studiem hamil-
toneitatea pentru grafurile simple.
Lema 6.2.1 (Bondy, Chv´ atal). Fie G = (V, E) un graf neorientat simplu cu n ≥ 3 noduri. Fie
x, y ∈ V astfel ˆıncˆ at
x = y, [x, y] ∈ E ¸si d(x) + d(y) ≥ n.
Atunci graful G este hamiltonian dac˘ a ¸si numai dac˘a graful
G + [x, y] = (V, E ∪ ¦[x, y]¦)
este hamiltonian.
Demonstrat ¸ie. Evident, dac˘ a G este hamiltonian atunci orice ciclu hamiltonianˆın G este ciclu hamil-
tonian ¸si ˆın G + [x, y], deci G + [x, y] este hamiltonian.
Reciproc, fie G + [x, y] hamiltonian ¸si C un ciclu hamiltonian ˆın acest graf.
Cazul 1) Dac˘ a C nu cont ¸ine muchia [x, y], atunci C este un ciclu hamiltonian ˆın graful G.
Cazul 2) Dac˘ a C cont ¸ine muchia [x, y], atunci prin eliminarea muchiei [x, y] din ciclul C obt ¸inem
un lant ¸ hamiltonian
μ = [x = v
1
, v
2
, . . . , v
n
= y]
ˆın graful G. Fie
A = ¦i ∈ ¦1, . . . , n −1¦[[x, v
i+1
] ∈ E¦,
B = ¦i ∈ ¦1, . . . , n −1¦[[v
i
, y] ∈ E¦.
Avem card (A) = d(x) ¸si card (B) = d(y), deci, conform ipotezei,
card (A) + card (B) ≥ n.
TEMA 6. CLASE PARTICULARE DE GRAFURI 66
Cum A ∪ B ⊆ ¦1, . . . , n −1¦, avem card (A ∪ B) ≤ n −1, deci
card (A ∩ B) = card (A) + card (B) −card (A ∪ B) ≥ n −(n −1) = 1,
adic˘ a A ∩ B = ∅. Fie k ∈ A ∩ B. Atunci
[x = v
1
, v
2
, . . . , v
k
, y = v
n
, v
n−1
, . . . , v
k+1
, x]
este un ciclu hamiltonian ˆın graful G.
Definit ¸ia 6.2.2. Fie G un graf neorientat simplu cu n ≥ 3 noduri.
ˆ
Inchiderea lui G, notat˘ a cu
cl(G), este graful neorientat simplu obt ¸inut din G prin ad˘ augarea repetat˘ a a tuturor muchiilor [x, y]
ˆıntre noduri distincte ¸si neadiacente x, y cu d(x) + d(y) ≥ n ˆın graful curent.
Observat ¸ia 6.2.3. Dac˘ a H = cl(G), atunci pentru orice noduri distincte x, y cu [x, y] ∈ E(H) avem
d
H
(x) + d
H
(y) < n, unde E(H) este mult ¸imea muchiilor grafului H.
Observat ¸ia 6.2.4. Graful cl(G) este bine definit, nedepinzˆand de ordinea de ad˘ augare a muchiilor.
Acest fapt poate fi demonstrat prin induct ¸ie dup˘a num˘ arul muchiilor ad˘ augate.
Exemplul 6.2.3. Fie G graful reprezentat ˆın Figura 6.2.2.
2
1
3
4
6 5
Figura 6.2.2:
Ad˘ augˆ and succesiv muchiile [1, 5] (deoarece d(1) + d(5) = 4 + 2 ≥ n = 6), [2, 4] (deoarece
d(2) +d(4) = 2 +4 ≥ n, ˆın graful curent), [2, 5] (deoarece d(2) +d(5) = 3 +3 ≥ n, ˆın graful curent!),
[2, 6], [3, 5] ¸si [3, 6], obt ¸inem ˆınchiderea cl(G) = K
6
, unde K
6
este graful complet cu 6 noduri.
Lema 6.2.2 (Lema ˆınchiderii; Bondy, Chv´ atal). Fie G un graf neorientat simplu cu n ≥ 3 noduri.
Atunci G este hamiltonian dac˘ a ¸si numai dac˘a graful cl(G) este hamiltonian.
Demonstrat ¸ie. Concluzia este evident˘a conform Lemei 6.2.1 ¸si definit ¸iei anterioare.
Lema 6.2.3. Fie G un graf neorientat simplu cu n ≥ 3 noduri. Dac˘ a avem cl(G) = K
n
, atunci G
este hamiltonian.
Demonstrat ¸ie. Concluzia rezult˘ a folosind lema anterioar˘ a ¸si faptul c˘a graful complet K
n
, n ≥ 3, este
evident hamiltonian (orice succesiune de forma [v
1
, v
2
, . . . , v
n
, v
1
] cu nodurile v
1
, . . . , v
n
distincte este
un ciclu hamiltonian ˆın K
n
).
Observat ¸ia 6.2.5. Reciproca lemei anterioare nu este adev˘ arat˘ a. De exemplu graful G reprezentat ˆın
Figura 6.2.3 este hamiltonian, dar cl(G) = G = K
6
.
TEMA 6. CLASE PARTICULARE DE GRAFURI 67
2
1
3
4
6
5
Figura 6.2.3:
Teorema 6.2.1 (Chv´ atal). Fie G = (V, E) un graf neorientat simplu cu n ≥ 3 noduri avˆ and gradele
d
1
≤ d
2
≤ ≤ d
n
.
Dac˘a pentru orice k ∈ N

este verificat˘ a proprietatea
d
k
≤ k <
n
2
⇒ d
n−k
≥ n −k,
atunci G este hamiltonian.
Demonstrat ¸ie. Se arat˘ a c˘ a are loc egalitatea cl(G) = K
n
¸si conform lemei anterioare rezult˘ a astfel c˘ a
G este hamiltonian.
Observat ¸ia 6.2.6. Dac˘ a graful G verific˘ a ipoteza Teoremei lui Chv´ atal atunci cl(G) = K
n
. Reciproca
nu este adev˘arat˘ a. De exemplu, graful G din Exemplul 6.2.3 are cl(G) = K
n
, dar nu verific˘ a ipoteza
Teoremei lui Chv´ atal (are gradele, ˆın ordine cresc˘atoare, 2, 2, 3, 3, 4, 4, deci d
2
≤ 2 <
n
2
dar d
4
< 4).
Astfel nici reciproca Teoremei lui Chv´atal nu este adev˘ arat˘ a.
Corolarul 6.2.1 (Teorema lui Bondy). Fie G un graf neorientat simplu cu n ≥ 3 noduri avˆ and
gradele
d
1
≤ d
2
≤ ≤ d
n
.
Dac˘a pentru orice p, q ∈ N

este verificat˘ a proprietatea
d
p
≤ p, d
q
≤ q, p = q ⇒ d
p
+ d
q
≥ n,
atunci G este hamiltonian.
Demonstrat ¸ie. Se arat˘ a c˘ a graful G verific˘a ipoteza Teoremei lui Chv´ atal ¸si astfel este hamiltonian.
Observat ¸ia 6.2.7. Teorema lui Chv´ atal generalizeaz˘ a Teorema lui Bondy. Aceast˘ a generalizare este
strict˘ a. De exemplu, graful reprezentatˆın Figura 6.2.4 are gradele, ˆın ordine cresc˘ atoare, 3, 3, 3, 4, 5, 5, 5, 6,
deci verific˘a ipoteza Teoremei lui Chv´ atal dar nu verific˘ a ipoteza Teoremei lui Bondy (d
3
= 3 ≤3,
d
4
= 4 ≤4, dar d
3
+ d
4
= 7 <n = 8).
Corolarul 6.2.2 (Teorema lui P´ osa). Fie G un graf neorientat simplu cu n ≥ 3 noduri avˆ and gradele
d
1
≤ d
2
≤ ≤ d
n
.
Dac˘a

d
k
> k, ∀ k <
n−1
2
,
d
k+1
> k, pentru k =
n−1
2
¸si n = impar,
atunci G este hamiltonian.
TEMA 6. CLASE PARTICULARE DE GRAFURI 68
1
2 3
4
5
6
7
8
Figura 6.2.4:
Demonstrat ¸ie. Se arat˘ a c˘ a graful G verific˘a ipoteza Teoremei lui Bondy (corolarul anterior) ¸si astfel
este hamiltonian.
Observat ¸ia 6.2.8. Teorema lui Bondy generalizeaz˘ a Teorema lui P´ osa. Generalizarea este strict˘a. De
exemplu, graful reprezentat ˆın Figura 6.2.5 are gradele, ordonate cresc˘ ator, 2, 2, 4, 4, 4, 4, deci verific˘a
ipoteza Teoremei lui Bondy, dar nu verific˘ a ipoteza Teoremei lui P´ osa.
1
2 3
4
5 6
Figura 6.2.5:
Corolarul 6.2.3 (Teorema lui Ore). Fie G = (V, E) un graf neorientat simplu cu n ≥ 3 noduri.
Dac˘a pentru orice dou˘ a noduri x, y distincte ¸si neadiacente avem
d(x) + d(y) ≥ n,
atunci G este hamiltonian.
Demonstrat ¸ie. Se arat˘ a c˘ a graful G verific˘a ipoteza Teoremei lui P´ osa (corolarul anterior) ¸si astfel
este hamiltonian.
Observat ¸ia 6.2.9. Teorema lui P´ osa generalizeaz˘ a Teorema lui Ore. Aceast˘ a generalizare este strict˘ a.
De exemplu, graful reprezentat ˆın Figura 6.2.6 are gradele, ordonate cresc˘ ator, 2, 3, 3, 4, 4, 4, deci
verific˘a ipoteza Teoremei lui P´ osa, dar nu verific˘ a ipoteza Teoremei lui Ore.
Corolarul 6.2.4 (Teorema lui Dirac). Fie G = (V, E) un graf neorientat simplu cu n ≥ 3 noduri.
Dac˘a
d(x) ≥
n
2
, ∀ x ∈ V,
TEMA 6. CLASE PARTICULARE DE GRAFURI 69
atunci G este hamiltonian.
Demonstrat ¸ie. Se arat˘ a c˘ a graful G verific˘a ipoteza Teorema lui Ore (corolarul anterior), deci este
hamiltonian.
Observat ¸ia 6.2.10. Teorema lui Ore generalizeaz˘ a Teorema lui Dirac. Aceast˘ a generalizare este
strict˘ a. De exemplu, graful reprezentat ˆın Figura 6.2.7 verific˘ a ipoteza Teoremei lui Ore, dar nu
verific˘a ipoteza Teoremei lui Dirac.
1
2 3
4
5 6
Figura 6.2.6:
1
2 3
4
5 6
Figura 6.2.7:
6.3 Grafuri bipartite
Definit ¸ia 6.3.1. Un graf G = (V, E) se nume¸ste bipartit dac˘ a exist˘a o partit ¸ie V = A∪B (A = ∅,
B = ∅, A∩B = ∅) a.ˆı. fiecare muchie sau arc al grafului are o extremitate ˆın A ¸si cealalt˘a extremitate
ˆın B.
Exemplul 6.3.1. Graful reprezentat ˆın Figura 6.2.3 este bipartit, luˆ and partit ¸ia nodurilor V =
¦1, 3, 5¦ ∪ ¦2, 4, 6¦. O alt˘ a reprezentare a acestui graf bipartit, cu evident ¸ierea partit ¸iei nodurilor
prin a¸sezarea ˆın stˆanga a nodurilor din partea A = ¦1, 3, 5¦ ¸si ˆın dreapta a nodurilor din partea
B = ¦2, 4, 6¦, este dat˘ a ˆın Figura 6.3.1.
Figura 6.3.1:
Teorema 6.3.1 (de caracterizare a grafurilor bipartite). Un graf cu n ≥ 2 noduri este bipartit dac˘ a
¸si numai dac˘a nu cont ¸ine cicluri de lungime impar˘ a.
Demonstrat ¸ie. ”⇒” Fie G = (V, E) un graf bipartit avˆ and partit ¸ia nodurilor V = A ∪ B ca ˆın
definit ¸ia anterioar˘ a. Orice ciclu al grafului G are una din formele [a
1
, b
1
, a
2
, b
2
, . . . , a
k
, b
k
, a
1
] sau
[b
1
, a
1
, b
2
, a
2
, . . . , b
k
, a
k
, b
1
] cu a
1
, a
2
, . . . , a
k
∈ A ¸si b
1
, b
2
, . . . , b
k
∈ B, deci are lungimea 2k.
TEMA 6. CLASE PARTICULARE DE GRAFURI 70
”⇐” Fie G = (V, E) un graf cu n ≥ 2 noduri ce nu cont ¸ine cicluri de lungime impar˘ a. Demonstr˘ am
c˘a graful G este bipartit ˆın dou˘ a etape.
Etapa 1) Presupunem c˘ a graful G este conex. Fie v ∈ V un nod arbitrar fixat. Pentru orice nod
x ∈ V definim num˘arul d(v, x) ∈ N prin
d(v, x) = min¦l(μ)[μ este lant ¸ de la v la x ˆın G¦,
unde l(μ) reprezint˘ a lungimea lant ¸ului μ. Definit ¸ia este corect˘ a, deoarece graful este conex. Pentru
grafuri neorientate d(v, x) se nume¸ste distant ¸a de la v la x. Fie
A = ¦x ∈ V [d(v, x) = num˘ ar par¦ ¸si B = ¦x ∈ V [d(v, x) = num˘ ar impar¦.
Evident, V = A∪B ¸si A∩B = ∅. Deoarece d(v, v) = 0 rezult˘ a c˘ a v ∈ A, deci A = ∅. Fie v
1
un nod
vecin cu v (exist˘ a, deoarece graful este conex ¸si are cel put ¸in dou˘ a noduri). Atunci d(v, v
1
) = 1, deci
v
1
∈ B ¸si astfel B = ∅.
Demonstr˘ am prin reducere la absurd c˘a orice muchie (sau arc) a grafului are o extremitate ˆın A ¸si
cealalt˘ a extremitate ˆın B ¸si astfel va rezulta c˘ a graful este bipartit. Fie [x, y] ∈ E o muchie (sau arc)
arbitrar fixat˘ a. Fie μ
1
un lant ¸ de lungime minim˘ a de la v la x ¸si μ
2
un lant ¸ de lungime minim˘ a de la v
la y, deci l(μ
1
) = d(v, x) ¸si l(μ
2
) = d(v, y). Evident, lant ¸urile μ
1
¸si μ
2
sunt elementare. Presupunem
prin absurd c˘ a x, y ∈ A sau x, y ∈ B, adic˘ a numerele d(v, x) ¸si d(v, y) au aceea¸si paritate. Atunci
[x, y] nu apart ¸ine lant ¸ului μ
1
, deoarece ˆın caz contrar y ar fi penultimul nod al acestui lant ¸ ¸si cum orice
sublant ¸ (port ¸iune) al unui lant ¸ de lungime minim˘ a este un lant ¸ de lungime minim˘ a ˆıntre extremit˘ at ¸ile
sale am avea d(v, y) = d(v, x) −1, fals. Analog, [x, y] nu apart ¸ine nici lant ¸ului μ
2
. Fie
μ = [v, . . . , x, y, . . . , v]
lant ¸ul ˆınchis obt ¸inut parcurgˆ and ˆıntˆ ai lant ¸ul μ
1
de la v la x, apoi muchia [x, y] ¸si apoi lant ¸ul μ
2
de
la y la v. Avem
l(μ) = l(μ
1
) + 1 +l(μ
2
) = d(v, x) + 1 +d(v, y) = num˘ ar impar.
Deoarece muchia [x, y] nu apart ¸ine lant ¸urilor μ
1
¸si μ
2
, rezult˘ a c˘ a prin eliminarea din lant ¸ul ˆınchis
μ a eventualelor port ¸iuni comune L
1
, . . . , L
r
ale lant ¸urilor μ
1
¸si μ
2
r˘ amˆ ane o mult ¸ime nevid˘ a de
cicluri (elementare) muchie-disjuncte C
1
, . . . , C
s
(iar muchia [x, y] apart ¸ine unuia din aceste cicluri).
Folosind aceast˘ a descompunere, lungimea lant ¸ului ˆınchis μ poate fi scris˘ a sub forma
l(μ) = 2l(L
1
) + + 2l(L
r
) + l(C
1
) + + l(C
s
).
Cum l(μ) este un num˘ar impar, rezultˆ a cˆ a l(C
1
) + + l(C
s
) = num˘ ar impar, deci cel put ¸in unul
din ciclurile C
1
, . . . , C
s
are lungimea impar˘ a, contradict ¸ie cu ipoteza. Demonstrat ¸ia prin reducere la
absurd este ˆıncheiat˘ a.
Etapa 2) Fie acum G un graf oarecare ¸si G
1
= (V
1
, E
1
), . . . , G
k
= (V
k
, E
k
) componentele sale
conexe. Deoarece G nu cont ¸ine cicluri de lungime impar˘a, rezult˘a c˘ a ¸si componentele sale conexe
G
1
, . . . , G
k
au aceast˘ a proprietate. Conform etapei 1) rezult˘ a c˘ a toate componentele conexe G
i
cu cel
put ¸in dou˘ a noduri sunt grafuri bipartite. Pentru fiecare astfel de component˘ a conex˘ a, fie V
i
= A
i
∪B
i
partit ¸ia corespunz˘ atoare grafului bipartit G
i
. Dac˘ a exist˘ a ¸si componente conexe G
i
cu un singur nod
(adic˘ a card V
i
= 1 ¸si E
i
= ∅, deoarece G
i
nu cont ¸ine bucle, buclele fiind cicluri de lungime 1), atunci
pentru fiecare astfel de component˘ a conex˘ a definim A
i
= V
i
, B
i
= ∅ sau B
i
= V
i
, A
i
= ∅. Fie
A = A
1
∪ ∪ A
k
¸si B = B
1
∪ ∪ B
k
.
Atunci V = A ∪ B este o partit ¸ie ¸si fiecare muchie sau arc al grafului G are o extremitate ˆın A ¸si
cealalt˘ a extremitate ˆın B, deci graful G este bipartit.
TEMA 6. CLASE PARTICULARE DE GRAFURI 71
Exemplul 6.3.2. Graful reprezentatˆın Figura 6.2.2 nu este bipartit, deoarece cont ¸ine cicluri de lungime
impar˘ a (de exemplu ciclul [1, 2, 3, 1] de lungime 3).
Corolarul 6.3.1. Orice graf bipartit conex G = (V, E) are o unic˘ a partit ¸ie V = A ∪ B ce verific˘ a
Definit ¸ia 6.3.1.
Demonstrat ¸ie. Pentru un nod v arbitrar fixat, submult ¸imile A¸si B definiteˆın etapa 1) a demonstrat ¸iei
teoremei anterioare determin˘ a unica partit ¸ie cu proprietatea c˘ a v ∈ A.
ˆ
Intr-adev˘ ar, fie V = A

∪ B

o partit ¸ie arbitrar˘ a ce verific˘a Definit ¸ia 6.3.1 ¸si proprietatea v ∈ A

. Pentru orice nod x ∈ A exist˘ a
μ = [v = v
0
, v
1
, . . . , v
2k
= x] lant ¸ de lungime minim˘ a de la v la x, deci avem, succesiv:
v = v
0
∈ A

, v
1
∈ B

, v
2
∈ A

, . . . , v
2k
= x ∈ A

.
Analog, pentru orice nod y ∈ B exist˘ a μ = [v = w
0
, w
1
, . . . , w
2p+1
= y] lant ¸ de lungime minim˘ a de la
v la y, deci avem, succesiv:
v = w
0
∈ A

, w
1
∈ B

, w
2
∈ A

, . . . , w
2p+1
= y ∈ B

.
Rezult˘ a c˘ a A ⊆ A

¸si B ⊆ B

. Cum B = V ` A ¸si B

= V ` A

rezult˘a c˘ a A = A

¸si B = B

.
Observat ¸ia 6.3.1. Demonstrat ¸ia teoremei anterioare este constructiv˘ a, indicˆ and urm˘ atorul algoritm
de determinare dac˘a un graf G este bipartit ¸si, ˆın caz afirmativ, a unei partit ¸ii V = A ∪ B a
nodurilor sale.
• Se determin˘ a componentele conexe G
1
, . . . , G
k
.
• Pentru fiecare component˘ a G
i
= (V
i
, E
i
) cu cel put ¸in dou˘ a noduri, se parcurg urm˘ atoarele
etape:
– Se fixeaz˘ a un nod v
i
∈ V
i
.
– Se calculeaz˘a distant ¸ele d(v
i
, x) pentru toate nodurile x ∈ V
i
. De exemplu,
d(v
i
, x) = lungimea lant ¸ului elementar unic de la v
i
la x ˆın arborele BF(v
i
)
(corespunz˘ ator parcurgerii BF a grafului neorientat G pornind din nodul v
i
; dac˘ a graful
G este orientat se parcurge graful neorientat obt ¸inut prin eliminarea orient˘ arii arcelor!).
– Se calculeaz˘a mult ¸imile
A
i
= ¦x ∈ V
i
[d(v
i
, x) = num˘ ar par¦ ¸si B
i
= ¦x ∈ V
i
[d(v
i
, x) = num˘ ar impar¦.
– Dac˘ a exist˘ a o muchie (sau arc) de forma [x, y] ∈ E
i
a.ˆı. x, y ∈ A
i
sau x, y ∈ B
i
, atunci
componenta G
i
nu este graf bipartit, deci nici graful G nu este bipartit ¸si algoritmul se
ˆıncheie.

ˆ
In caz contrar componenta G
i
este graf bipartit ¸si V
i
= A
i
∪B
i
este partit ¸ia corespunz˘ atoare
acestui graf bipartit.
• Pentru fiecare component˘ a G
i
= (V
i
, E
i
) cu cˆate un singur nod, adic˘ a V
i
= ¦v
i
¦, se parcurg
urm˘ atoarele etape:
– Dac˘ a [v
i
, v
i
] ∈ E
i
(bucl˘a), atunci graful G nu este bipartit ¸si algoritmul se ˆıncheie.

ˆ
In caz contrar se calculeaz˘ a mult ¸imile A
i
= V
i
, B
i
= ∅ pentru prima component˘ a G
i
¸si
B
i
= V
i
, A
i
= ∅ pentru urm˘ atoarele componente G
i
(se asigur˘ a astfel c˘ a A = ∅ ¸si B = ∅).
TEMA 6. CLASE PARTICULARE DE GRAFURI 72
• Toate componentele conexe cu cel put ¸in dou˘ a noduri sunt grafuri bipartite, iar toate compo-
nentele conexe cu cˆate un singur nod nu cont ¸in bucle. Atunci graful G este bipartit ¸si o partit ¸ie
corespunz˘atoare este V = A ∪ B, cu A = A
1
∪ ∪ A
k
¸si B = B
1
∪ ∪ B
k
.
Exemplul 6.3.3. Fie graful reprezentat ˆın Figura 6.2.1. Aplic˘ am algoritmul din observat ¸ia anterioar˘ a.
Fixˆ and nodul v = 1 (pentru singura component˘ a conex˘ a), obt ¸inem distant ¸ele
d(1, 1) = 0, d(1, 2) = d(1, 5) = 1, d(1, 3) = d(1, 6) = 2, d(1, 4) = d(1, 7) = 3, d(1, 8) = 4,
deci A = ¦1, 3, 6, 8¦ ¸si B = ¦2, 4, 5, 7¦. Nu exist˘ a nicio muchie [x, y] a.ˆı. x, y ∈ A sau x, y ∈ B, deci
graful dat este bipartit ¸si unica partit ¸ie corespunz˘atoare este V = A ∪ B. O reprezentare a acestui
graf bipartit, cu evident ¸ierea partit ¸iei nodurilor, este dat˘ a ˆın Figura 6.3.2.
Figura 6.3.2:
Tema 7
Distant ¸e ¸si drumuri minime
Problema determin˘ arii distant ¸elor ¸si drumurilor minime ˆıntre nodurile unui graf ponderat apare ˆın
numeroase aplicat ¸ii practice.
ˆ
In continuare vom prezenta doi algoritmi clasici pentru rezolvarea
acestei probleme.
7.1 Expunerea problemei
Definit ¸ia 7.1.1. Fie (G, c) un graf ponderat, unde G = (V, E), V = ¦v
1
, . . . , v
n
¦ iar c : E →R
+
.
a) Dac˘a μ = (x
0
, e
1
, x
1
, . . . , x
k−1
, e
k
, x
k
) este un drum al grafului G, unde x
0
, x
1
, . . . , x
k
∈ V ,
e
1
, . . . , e
k
∈ E, k ∈ N, atunci costul (ponderea) lui μ este
c(μ) =



0, dac˘ a k = 0,
k
¸
i=1
c(e
i
), dac˘ a k ≥ 1
(adic˘ a suma costurilor arcelor sau muchiilor sale).
b) Fie x, y ∈ V . Un drum μ

= (x, . . . , y) ˆın graful G cu proprietatea c˘ a
c(μ

) = min¦c(μ)[μ este drum de la x la y ˆın G¦
se nume¸ste drum minim (drum de cost minim, drum de pondere minim˘ a) de la x la
y ˆın graful ponderat (G, c). Costul c(μ

) al acestui drum minim se nume¸ste distant ¸a minim˘a
de la x la y ˆın graful (G, c).
Observat ¸ia 7.1.1. Eliminˆ and eventualele circuite C
1
, . . . , C
p
dintr-un drum μ de la nodul x la nodul
y obt ¸inem un drum elementar μ

de la x la y cu proprietatea c˘ a c(μ

) = c(μ) −
p
¸
k=1
c(C
k
) ≤ c(μ).
Dac˘ a drumul μ este minim atunci ¸si drumul elementar μ

este minim ¸si c(e) = 0 pentru orice
muchie sau arc e al circuitelor C
1
, . . . , C
p
. Deci existent ¸a unui drum minim de la x la y implic˘a
existent ¸a unui drum minim elementar de la x la y. Astfel distant ¸a minim˘ a de la x la y poate fi
considerat˘ a ca fiind costul minim al unui drum elementar de la x la y. Mai mult, dac˘ a funct ¸ia cost
c este strict pozitiv˘ a, atunci orice drum minim este elementar.
Observat ¸ia 7.1.2. Mult ¸imea drumurilor elementare fiind evident finit˘ a, avem echivalent ¸a: exist˘ a dru-
muri minime de la x la y dac˘a ¸si numai dac˘ a exist˘ a drumuri de la x la y.
Observat ¸ia 7.1.3. Distant ¸a minim˘ a de la un nod x la el ˆınsu¸si este egal˘ a cu zero, drumul minim
elementar de la x la x fiind drumul de lungime zero, μ = (x).
73
TEMA 7. DISTANT¸ E S¸I DRUMURI MINIME 74
Observat ¸ia 7.1.4. Dac˘ a μ = (x
0
, x
1
, . . . , x
k
) este un drum minim de la x
0
la x
k
, atunci orice subdrum
μ

= (x
i
, x
i+1
, . . . , x
j
) (0 ≤ i ≤ j ≤ k) al s˘ au este un drum minim de la x
i
la x
j
(principiul
optimalit˘at ¸ii al lui Bellman). Afirmat ¸ia poate fi justificat˘ a u¸sor prin reducere la absurd.
Exemplul 7.1.1. Fie graful ponderat (G, c) reprezentat ˆın Figura 7.1.1.
4
10
10
5
5
5
5
5
5
15
5
3
1
2
Figura 7.1.1:
Drumurile elementare de la nodul 1 la nodul 5 sunt μ
1
= (1, 3, 5), avˆ and costul c(μ
1
) = 10+5 = 15,
μ
2
= (1, 4, 5), avˆ and costul c(μ
2
) = 5 + 5 = 10, deci μ
2
este un drum minim de la 1 la 5. Astfel
distant ¸a minim˘ a de la nodul 1 la nodul 5 este c(μ
2
) = 10.
Definit ¸ia 7.1.2. Fie (G, c) un graf ponderat, unde G = (V, E), V = ¦v
1
, . . . , v
n
¦, c : E →R
+
.
a) Matricea distant ¸elor (costurilor) directe asociat˘ a grafului (G, c) este matricea C = (c
ij
)
i,j=1,n
definit˘ a prin
c
ij
=



0, dac˘ a i = j,
min¦c(e)[e = (v
i
, v
j
) ∈ E¦, dac˘ a i = j ¸si ∃ (v
i
, v
j
) ∈ E,
∞, dac˘ a i = j ¸si ∃ (v
i
, v
j
) ∈ E
(pentru grafuri neorientate (v
i
, v
j
) desemnˆ and de fapt muchia [v
i
, v
j
]).
b) Matricea distant ¸elor (costurilor) minime asociat˘ a grafului (G, c) este matricea C

=
(c

ij
)
i,j=1,n
definit˘a prin
c

ij
=



c(μ

), μ

= drum minim de la v
i
la v
j
,
dac˘ a ∃ μ = (v
i
, . . . , v
j
) drum ˆın G,
∞, ˆın caz contrar.
Observat ¸ia 7.1.5. Evident, pentru orice graf neorientat atˆ at matricea distant ¸elor directe cˆat ¸si ma-
tricea distant ¸elor minime sunt matrice simetrice.
Observat ¸ia 7.1.6. Conform Observat ¸iei 7.1.1, putem s˘ a ˆınlocuim termenul de ”drum” cu cel de ”drum
elementar” ˆın definit ¸ia anterioar˘ a.
Conform Observat ¸iei 7.1.2, punctul b) din definit ¸ia anterioar˘ a este o extindere a definit ¸iei distant ¸ei
minime de la punctul b) al Definit ¸iei 7.1.1.
Conform Observat ¸iei 7.1.3, c

ii
= 0 ∀ i ∈ ¦1, . . . , n¦.
TEMA 7. DISTANT¸ E S¸I DRUMURI MINIME 75
Exemplul 7.1.2. Matricele distant ¸elor directe, respectiv minime asociate grafului din Exemplul 7.1.1
sunt
C =






0 15 10 5 ∞
∞ 0 ∞ ∞ ∞
∞ 5 0 ∞ 5
∞ 10 ∞ 0 5
5 5 ∞ ∞ 0






, C

=






0 15 10 5 10
∞ 0 ∞ ∞ ∞
10 5 0 15 5
10 10 20 0 5
5 5 15 10 0






.
7.2 Algoritmul Dijkstra
Vom expune un algoritm pentru determinarea distant ¸elor minime ¸si a drumurilor minime de la un
nod fixat, numit ¸si nod surs˘a, la toate nodurile grafului ponderat dat.
Algoritmul 7.2.1 (Dijkstra). Fie (G, c) un graf ponderat, G = (V, E), V = ¦v
1
, v
2
, . . . , v
n
¦, c : E →
R
+
. Fie C = (c
ij
)
i,j=1,n
matricea distant ¸elor directe asociat˘ a grafului (G, c) ¸si fie v
s
∈ V un nod
arbitrar fixat, numit nod surs˘a. Distant ¸ele minime de la nodul v
s
la nodurile grafului sunt calculate
¸si memorate ˆıntr-un vector t = (t
1
, . . . , t
n
) astfel:
• La pasul 1 se selecteaz˘ a nodul surs˘ a v
s
¸si se ia t
s
= 0;
• La pasul k, 2 ≤ k ≤ n, se cunosc nodurile v
i
1
, . . . , v
i
k−1
selectate la pa¸sii anteriori ¸si distant ¸ele
corespondente t
i
1
, . . . , t
i
k−1
.
a) Dac˘ a nu mai exist˘ a nici-o muchie sau arc de la un nod selectat v
j
∈ ¦v
i
1
, . . . , v
i
k−1
¦ la
un nod neselectat v
i
∈ V ` ¦v
i
1
, . . . , v
i
k−1
¦, atunci se ia t
i
= ∞ pentru orice nod neselectat
v
i
∈ V ` ¦v
i
1
, . . . , v
i
k−1
¦ ¸si algoritmul se ˆıncheie.
b)
ˆ
In caz contrar se selecteaz˘ a un nod v
i
k
∈ V ` ¦v
i
1
, . . . , v
i
k−1
¦ cu proprietatea c˘ a exist˘ a un
nod selectat v
j
k
∈ ¦v
i
1
, . . . , v
i
k−1
¦ astfel ˆıncˆat
t
j
k
+ c
j
k
i
k
= min¦t
j
+ c
ji
[v
j
∈ ¦v
i
1
, . . . , v
i
k−1
¦, v
i
∈ V ` ¦v
i
1
, . . . , v
i
k−1
¦¦. (7.2.1)
Se ia
t
i
k
= t
j
k
+ c
j
k
i
k
(7.2.2)
¸si se trece la pasul k + 1.
Observat ¸ia 7.2.1. Evident, algoritmul execut˘ a cel mult n pa¸si.
Teorema 7.2.1 (de corectitudine a Algoritmului Dijkstra).
ˆ
In contextul Algoritmului Dijkstra, avem
t
i
= c

si
, ∀ i ∈ ¦1, . . . , n¦
(adic˘ a distant ¸a t
i
calculat˘ a de algoritm este chiar distant ¸a minim˘ a de la v
s
la v
i
).
Demonstrat ¸ie. Vom demonstra prin induct ¸ie dup˘a k c˘a nodul v
i
k
selectat la pasul k ¸si distant ¸a
corespondent˘ a t
i
k
calculat˘ a la acel pas verific˘ a egalitatea din enunt ¸, adic˘ a
t
i
k
= c

si
k
,
¸si, ˆın plus, t
i
k
< ∞.
Pentru k = 1 afirmat ¸ia este evident˘a deoarece
v
i
1
= v
s
, t
i
1
= 0 = c

ss
.
TEMA 7. DISTANT¸ E S¸I DRUMURI MINIME 76
Presupunem adev˘arat˘ a afirmat ¸ia pentru orice pas mai mic decˆ at k ¸si o demonstr˘ am pentru pasul
k. Fie v
j
k
∈ ¦v
i
1
, . . . , v
i
k−1
¦ un nod ce verific˘ a egalitatea (7.2.1). Din descrierea algoritmului ¸si din
ipoteza de induct ¸ie (nodul v
j
k
fiind selectat la un pas anterior), rezult˘ a c˘ a t
j
k
= c

sj
k
< ∞¸si c
j
k
i
k
< ∞,
deci t
i
k
< ∞ (conform (7.2.2)).
Dac˘ a (v
s
, . . . , v
j
k
) este un drum minim de la v
s
la v
j
k
(exist˘ a, deoarece c

sj
k
< ∞), atunci μ =
(v
s
, . . . , v
j
k
, v
i
k
) este un drum de la v
s
la v
i
k
, avˆ and costul c(μ) = c

sj
k
+ c
j
k
i
k
= t
j
k
+ c
j
k
i
k
= t
i
k
(conform (7.2.2)), deci
c

si
k
≤ t
i
k
< ∞. (7.2.3)
Rezult˘ a c˘ a exist˘ a drumuri minime de la v
s
la v
i
k
. Fie
μ

= (v
s
= x
0
, x
1
, . . . , x
p−1
, x
p
= v
i
k
)
un drum elementar minim de la v
s
la v
i
k
. Fie l ∈ ¦0, 1, . . . , p − 1¦ indicele maxim astfel ˆıncˆat
x
l
∈ ¦v
i
1
, . . . , v
i
k−1
¦ (exist˘ a, deoarece x
0
= v
s
= v
i
1
).
Fie x
l
= v
i
r
, 1 ≤ r ≤ k −1, ¸si fie x
l+1
= v
i
q
, q ≥ k.
Din descrierea pasului q al algoritmului, conform relat ¸iilor (7.2.1) ¸si (7.2.2) rezult˘ a c˘ a
t
i
q
≤ t
i
r
+ c
i
r
i
q
,
iar conform ipotezei de induct ¸ie pentru r avem
t
i
r
= c

si
r
< ∞.
Deci
t
i
q
≤ c

si
r
+ c
i
r
i
q
= c

si
q
(7.2.4)
(conform principiului optimalit˘ at ¸ii al lui Bellman pentru subdrumurile dintre x
0
= v
s
¸si x
l
= v
i
r
,
respectiv dintre x
0
= v
s
¸si x
l+1
= v
i
q
ale drumului minim μ

).
Cazul 1) Dac˘ a l = p − 1. atunci x
l+1
= v
i
k
, deci q = k ¸si din (7.2.3) ¸si (7.2.4) rezult˘ a c˘ a
t
i
k
= c

si
k
< ∞.
Cazul 2) Dac˘ a l < p −1, deci q = k, demonstr˘ am c˘ a
t
i
k
= c

si
k
prin reducere la absurd.
ˆ
Intr-adev˘ ar, ˆın caz contrar conform (7.2.3) am avea c

si
k
< t
i
k
.
Cum q > k, din descrierea algoritmului avem t
i
q
≥ t
i
k
(deoarece valorile t
i
k
sunt monoton
cresc˘atoare de la un pas la altul, induct ¸ie!). Utilizˆand (7.2.4) am obt ¸ine
c

si
k
< t
i
k
≤ t
i
q
≤ c

si
q
,
ceea ce contrazice faptul c˘a are loc inegalitatea c

si
q
≤ c

si
k
(conform principiului optimalit˘ at ¸ii al lui
Bellman pentru subdrumul dintre v
s
¸si v
i
q
al drumului minim μ

).
Demonstrat ¸ia prin induct ¸ie este ˆıncheiat˘ a.
Evident, pentru orice nod v
i
r˘ amas neselectat ˆın urma execut˘ arii ultimului pas al algoritmului
avem t
i
= ∞ = c

si
.
ˆ
Intr-adev˘ ar, dac˘ a ar exista un drum elementar minim
μ = (v
s
= y
0
, y
1
, . . . , y
p
= v
i
),
luˆ and l ∈ ¦0, 1, . . . , p −1¦ indicele maxim pentru care y
l
este selectat (exist˘a, deoarece y
0
= v
s
este
selectat) atunci y
l+1
ar fi neselectat de¸si exist˘a o muchie sau un arc de la y
l
la y
l+1
, contradict ¸ie cu
descrierea modului de ˆıncheiere a algoritmului.
TEMA 7. DISTANT¸ E S¸I DRUMURI MINIME 77
Exemplul 7.2.1. Pentru graful ponderat din Exemplul 7.1.1, luˆ and ca nod surs˘ a nodul 1, aplicarea
Algoritmului Dijkstra este evident ¸iat˘ a ˆın urm˘atorul tabel:
Pas Nodul selectat Distant ¸a minim˘ a
1 1 0
2 4 5
3 3 10
4 5 10
5 2 15
De exemplu, la pasul 3 avem deja selectate nodurile i
1
= 1 ¸si i
2
= 4, cu distant ¸ele minime t
1
= c

11
= 0
¸si t
4
= c

14
= 5. Se selecteaz˘ a nodul i
3
= 3, cu distant ¸a minim˘ a t
3
= 10, deoarece
min¦t
1
+ c
12
, t
1
+ c
13
, t
1
+ c
15
, t
4
+ c
42
, t
4
+ c
43
, t
4
+ c
45
¦
= min¦0 + 15, 0 + 10, 0 +∞, 5 + 10, 5 +∞, 5 + 5¦ = 10 = t
1
+ c
13
.
Observat ¸ia 7.2.2. Algoritmul Dijkstra este specific metodei de programare Greedy, el selectˆand
nodurile ˆın ordinea cresc˘ atoare a distant ¸ei fat ¸˘a de nodul surs˘ a.
Observat ¸ia 7.2.3. Pentru implementarea Algoritmului Dijkstra, consider˘ am c˘ a V = ¦1, . . . , n¦ ¸si c˘a
nodul surs˘ a este s ∈ V . Utiliz˘ am un vector S avˆ and semnificat ¸ia
S[i] =

1, dac˘ a nodul i a fost selectat,
0, ˆın caz contrar,
∀ i ∈ ¦1, . . . , n¦
¸si un vector t avˆ and semnificat ¸ia
t[i] = distant ¸a minim˘ a de la nodul surs˘ a s la nodul i, ∀ i ∈ ¦1, . . . , n¦,
calculat conform (7.2.1) ¸si (7.2.2).
Pentru determinarea drumurilor minime de la nodul s la nodurile grafului vom utiliza ¸si un vector
TATA avˆ and semnificat ¸ia
TATA[i] = nodul j ce este predecesorul direct al nodului i pe drumul minim de la s la i,
∀ i ∈ ¦1, . . . , n¦.
Dac˘ a i = i
k
este nodul selectat la pasul k, atunci j = j
k
se determin˘ a conform egalit˘ at ¸ii (7.2.1).
Descrierea ˆın pseudocod a algoritmului are forma urm˘ atoare.
Dijkstra(s) :
¦ pentru i = 1, n// init ¸ializ˘ ari
¦ S[i] ← 0; t[i] ← ∞; TATA[i] ← ∞;
¦
t[s] ← 0; TATA[s] ← 0;//s este nodul surs˘ a
repet˘a
¦ min ← ∞;//select˘ am urm˘ atorul nod x, ˆın ordinea cresc˘ atoare a
//distant ¸elor minime de la s la x
pentru i = 1, n
¦ dac˘a (S[i] = 0) ¸si (t[i] < min)
¦ min ← t[i]; x ← i;
¦
¦
dac˘a (min < ∞)// exist˘ a x, ˆıl select˘am
¦ S[x] ← 1;
pentru i = 1, n// actualiz˘ am vectorii t ¸si TATA
¦ dac˘a (S[i] = 0) ¸si (c
xi
< ∞)
¦ dac˘a (t[i] > t[x] + c
xi
)
TEMA 7. DISTANT¸ E S¸I DRUMURI MINIME 78
¦ t[i] ← t[x] + c
xi
; TATA[i] ← x;
¦
¦
¦
¦
¦
cˆat timp (min < ∞);
¦.
Observat ¸ia 7.2.4. Implementarea anterioar˘ a necesit˘a O(n
2
) operat ¸ii (deoarece blocul ”repet˘a” se
execut˘a de cel mult n ori ¸si necesit˘a de fiecare dat˘ a cel mult n comparat ¸ii pentru determinarea
nodului selectat x ¸si cel mult n comparat ¸ii ¸si n adun˘ ari pentru actualizarea vectorilor t ¸si TATA).
Aceasta este de fapt ¸si complexitatea Algoritmului Dijkstra (ˆın implementarea optim˘ a).
7.3 Algoritmul Roy-Floyd
Vom expune un algoritm pentru determinarea distant ¸elor minime ¸si a drumurilor minime ˆıntre orice
dou˘ a noduri ale grafului ponderat dat. Acest algoritm este asem˘ an˘ ator cu Algoritmul Roy-Warshall
pentru determinarea matricei drumurilor.
Algoritmul 7.3.1 (Roy-Floyd). Fie (G, c) un graf ponderat, G = (V, E), V = ¦v
1
, v
2
, . . . , v
n
¦,
c : E → R
+
. Fie C = (c
ij
)
i,j=1,n
matricea distant ¸elor directe asociat˘ a grafului (G, c). Se calculeaz˘ a
matricele
C
(k)
= (c
(k)
ij
)
i,j=1,n
, k ∈ ¦0, 1, . . . , n¦
definite prin
C
(0)
= C, (7.3.1)
c
(k)
ij
= min¦c
(k−1)
ij
, c
(k−1)
ik
+ c
(k−1)
kj
¦, ∀k, i, j ∈ ¦1, . . . , n¦. (7.3.2)
Teorema 7.3.1 (de corectitudine a Algoritmului Roy-Floyd).
ˆ
In contextul Algoritmului Roy-Floyd,
ultima matrice calculat˘ a este chiar matricea distant ¸elor minime asociat˘ a grafului (G, c), adic˘ a
C
(n)
= C

.
Demonstrat ¸ie. Vom demonstra prin induct ¸ie dup˘a k ∈ ¦0, 1, . . . , n¦ c˘a pentru orice i, j ∈ ¦1, . . . , n¦
avem
c
(k)
ij
=



min¦c(μ)[μ = (v
i
, . . . , v
j
), I(μ) ⊆ ¦v
1
, . . . , v
k
¦¦, dac˘a
∃ μ = (v
i
, . . . , v
j
) drum cu I(μ) ⊆ ¦v
1
, . . . , v
k
¦,
∞, ˆın caz contrar,
(7.3.3)
unde I(μ) reprezint˘ a mult ¸imea nodurilor intermediare ale drumului μ ¸si ¦v
1
, . . . , v
k
¦ reprezint˘ a
mult ¸imea ¦v
i
[1 ≤ i ≤ k¦, deci pentru k = 0 aceast˘ a mult ¸ime este ∅.
Pentru k = 0 avem c
(0)
ij
= c
ij
(conform (7.3.1)) ¸si egalitatea (7.3.3) este evident˘ a din definit ¸ia
matricei C a costurilor directe ¸si faptul c˘a I(μ) = ∅ ˆınseamn˘ a c˘ a drumul μ este de fapt un arc sau o
muchie pentru i = j, respectiv c˘a μ este o bucl˘a sau drumul (v
i
) de lungime 0 pentru i = j.
Presupunem acum egalitatea (7.3.3) adev˘ arat˘ a pentru k −1 (1 ≤ k ≤ n) ¸si o demonstr˘ am pentru
k. Fie d ∈ [0, ∞). Folosind (7.3.2), ipoteza de induct ¸ie ¸si principiul optimalit˘ at ¸ii al lui Bellman avem
TEMA 7. DISTANT¸ E S¸I DRUMURI MINIME 79
echivalent ¸ele:
c
(k)
ij
= d ⇔ c
(k−1)
ij
= d ≤ c
(k−1)
ik
+ c
(k−1)
kj
sau c
(k−1)
ik
+ c
(k−1)
kj
= d < c
(k−1)
ij
⇔ ∃ μ = (v
i
, . . . , v
j
) drum minim cu proprietatea c˘ a I(μ) ⊆ ¦v
1
, . . . , v
k−1
¦
(adic˘ a de cost minim dintre toate drumurile de la v
i
la v
j
ce satisfac aceast˘ a
proprietate), c(μ) = d ≤ c(μ
1
) + c(μ
2
) ∀ μ
1
= (v
i
, . . . , v
k
), μ
2
= (v
k
, . . . , v
j
)
drumuri cu I(μ
1
), I(μ
2
) ⊆ ¦v
1
, . . . , v
k−1
)
sau
∃ μ

1
= (v
i
, . . . , v
k
), μ

2
= (v
k
, . . . , v
j
) drumuri minime cu proprietatea c˘ a
I(μ

1
), I(μ

2
) ⊆ ¦v
1
, . . . , v
k−1
¦, c(μ

1
) + c(μ

2
) = d < c(μ”), ∀ μ” = (v
i
, . . . , v
j
)
drum cu I(μ”) ⊆ ¦v
1
, . . . , v
k−1
¦
⇔ ∃ μ = (v
i
, . . . , v
j
) drum minim cu proprietatea c˘ a
I(μ) ⊆ ¦v
1
, . . . , v
k
¦, v
k
∈ I(μ), c(μ) = d
sau
∃ μ

= (v
i
, . . . , v
k
, . . . , v
j
) drum minim cu proprietatea c˘ a
I(μ

) ⊆ ¦v
1
, . . . , v
k
¦, v
k
∈ I(μ

), c(μ

) = d

se obt ¸ine parcurgˆ and ˆıntˆ ai μ

1
, apoi μ

2
¸si, reciproc,
μ

1
¸si μ

2
sunt port ¸iunile din μ

dintre v
i
¸si prima aparit ¸ie a lui v
k
ˆın I(μ

),
respectiv dintre ultima aparit ¸ie a lui v
k
ˆın I(μ

) ¸si v
j
; ˆıntre aceste aparit ¸ii
eventualele arce sau muchii ale lui μ

au costul 0 conform Observat ¸iei 7.1.1)
⇔ ∃ μ = (v
i
, . . . , v
j
) drum minim cu proprietatea c˘ a
I(μ) ⊆ ¦v
1
, . . . , v
k
¦, c(μ) = d.
Demonstrat ¸ia prin induct ¸ie a egalit˘ at ¸ii (7.3.3) este astfel ˆıncheiat˘ a.
Pentru k = n condit ¸ia I(μ) ⊆ ¦v
1
, . . . , v
n
¦ poate fi eliminat˘ a, fiind ˆıntotdeauna adev˘ arat˘ a, deci
din (7.3.3) ¸si Definit ¸ia 7.1.2 obt ¸inem c
(n)
ij
= c

ij
, ∀ i, j ∈ ¦1, . . . , n¦, adic˘ a egalitatea din enunt ¸.
Observat ¸ia 7.3.1. Algoritmul Roy-Floyd are complexitatea O(n
3
) (deoarece necesit˘ a cˆ ate o adunare
¸si o comparat ¸ie pentru fiecare triplet (k, i, j), cu k, i, j ∈ ¦1, . . . , n¦).
Exemplul 7.3.1. Pentru graful din Exemplul 7.1.1, prin aplicarea Algoritmului Roy-Floyd obt ¸inem
matricele:
C
(0)
= C =






0 15 10 5 ∞
∞ 0 ∞ ∞ ∞
∞ 5 0 ∞ 5
∞ 10 ∞ 0 5
5 5 ∞ ∞ 0






; C
(1)
=






0 15 10 5 ∞
∞ 0 ∞ ∞ ∞
∞ 5 0 ∞ 5
∞ 10 ∞ 0 5
5 5 15 10 0






TEMA 7. DISTANT¸ E S¸I DRUMURI MINIME 80
(deoarece, de exemplu, c
(1)
53
= min¦c
(0)
53
, c
(0)
51
+ c
(0)
13
¦ = min¦∞, 5 + 10¦ = 15);
C
(2)
=






0 15 10 5 ∞
∞ 0 ∞ ∞ ∞
∞ 5 0 ∞ 5
∞ 10 ∞ 0 5
5 5 15 10 0






; C
(3)
=






0 15 10 5 15
∞ 0 ∞ ∞ ∞
∞ 5 0 ∞ 5
∞ 10 ∞ 0 5
5 5 15 10 0






;
C
(4)
=






0 15 10 5 10
∞ 0 ∞ ∞ ∞
∞ 5 0 ∞ 5
∞ 10 ∞ 0 5
5 5 15 10 0






; C
(5)
=






0 15 10 5 10
∞ 0 ∞ ∞ ∞
10 5 0 15 5
10 10 20 0 5
5 5 15 10 0






= C

(matricea distant ¸elor minime).
Observat ¸ia 7.3.2. Conform ecuat ¸iilor (7.3.3), Algoritmul Roy-Floyd este un algoritm specific metodei
program˘arii dinamice.
Conform ecuat ¸iilor (7.3.2) avem c
(k)
ik
= c
(k−1)
ik
¸si c
(k)
kj
= c
(k−1)
kj
, ∀ k, i, j ∈ ¦1, . . . , n¦, deci pentru imple-
mentarea algoritmului putem utiliza o singur˘ a matrice C
(k)
. Astfel obt ¸inem urm˘ atoarea descriere ˆın
pseudocod a algoritmului.
Roy Floyd :
¦ pentru i = 1, n
pentru j = 1, n c

ij
← c
ij
;//init ¸ializare
pentru k = 1, n
pentru i = 1, n
pentru j = 1, n
dac˘a (c

ik
+ c

kj
< c

ij
) c

ij
← c

ik
+ c

kj
;
¦.
Considerˆ and c˘ a funct ¸ia cost c este strict pozitiv˘ a, pentru determinarea tuturor drumurilor minime
(elementare) dintre dou˘ a noduri distincte x, y putem utiliza echivalent ¸a:
(x, z, . . . , y) = drum minim ⇔

z = x,
c
xz
+ c

zy
= c

xy
,
unde mult ¸imea nodurilor este mult ¸imea standard V = ¦1, . . . , n¦.
Astfel putem determina toate nodurile z ce sunt succesori direct ¸i ai nodului x pe drumuri minime
de la x la y, ¸si continuˆ and acest procedeu pentru subdrumurile minime dintre z ¸si y se g˘asesc toate
drumurile minime elementare de la x la y.
Tema 8
Fluxuri ˆın ret ¸ele de transport
8.1 Problema fluxului maxim
8.2 Algoritmul Ford-Fulkerson
81

Tematica
1 Aranjamente, combin˘ri, permut˘ri a a 1.1 Preliminarii . . . . . . . . . . . . . 1.2 Produs cartezian . . . . . . . . . . 1.3 Submultimi . . . . . . . . . . . . . ¸ 1.4 Aranjamente cu repetitie . . . . . . ¸ 1.5 Aranjamente . . . . . . . . . . . . . 1.6 Permut˘ri . . . . . . . . . . . . . . a 1.7 Combin˘ri . . . . . . . . . . . . . . a 1.8 Combin˘ri cu repetitie . . . . . . . a ¸ 1.9 Permut˘ri cu repetitie . . . . . . . a ¸ 4 4 5 6 8 8 8 10 12 14

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

2 Partitii ¸ 17 2.1 Compuneri ale unui num˘r natural . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 a 2.2 Partitii ale unui num˘r natural . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 ¸ a 2.3 Partitii ale unei multimi finite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 ¸ ¸ 3 Grafuri 3.1 Definitii generale . . . . ¸ 3.2 Reprezentarea grafurilor 3.3 Grade . . . . . . . . . . 3.4 Conexitate . . . . . . . . 3.5 Parcurgerea grafurilor . 3.6 Algoritmul Roy-Warshall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 24 26 29 30 32 38 42 42 45 46 47

4 Arbori 4.1 Num˘rul ciclomatic . . . . . . . . . . a 4.2 Teorema de caracterizare a arborilor 4.3 Num˘rarea arborilor partiali . . . . . a ¸ 4.4 Arbori partiali de cost minim . . . . ¸

5 Arborescente ¸ 53 5.1 Teorema de caracterizare a arborescentelor . . . . . . . . . . . . . . . . . . . . . . . . 53 ¸ 5.2 Arborescente partiale de cost minim . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 ¸ ¸ 6 Clase particulare de grafuri 61 6.1 Grafuri euleriene . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 6.2 Grafuri hamiltoniene . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 6.3 Grafuri bipartite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

1

TEMATICA

2

7 Distante ¸i drumuri minime ¸ s 73 7.1 Expunerea problemei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 7.2 Algoritmul Dijkstra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 7.3 Algoritmul Roy-Floyd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 8 Fluxuri ˆ retele de transport ın ¸ 81 8.1 Problema fluxului maxim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 8.2 Algoritmul Ford-Fulkerson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

Bibliografie
[1] Gh. Barbu, I. V˘duva, M. Bolo¸teanu, Bazele informaticii, Editura Tehnic˘, Bucure¸ti, 1997. a s a s [2] Gh. Barbu, V. P˘un, Calculatoare personale ¸i programare ˆ C/C++, Editura Didactic˘ ¸i Pedagogic˘, Bua s ın a s a cure¸ti, 2005. s [3] C. B˘lc˘u, Combinatoric˘ ¸i teoria grafurilor, Editura Universit˘¸ii din Pite¸ti, Pite¸ti, 2007. a a as at s s [4] E. Ciurea, Algoritmi. Introducere ˆ algoritmica grafurilor, Editura Tehnic˘, Bucure¸ti, 2001. ın a s [5] E. Ciurea, L. Ciupal˘, Algoritmi. Introducere ˆ algoritmica fluxurilor ˆn retele, Editura Matrix Rom, Bucure¸ti, a ın ı ¸ s 2006. [6] C. Croitoru, Tehnici de baz˘ ˆ optimizarea combinatorie, Editura Universit˘¸ii ”Al. I. Cuza”, Ia¸i, 1992. a ın at s [7] L. Livovschi, H. Georgescu, Sinteza ¸i analiza algoritmilor, Editura Stiintific˘ ¸i Enciclopedic˘, Bucure¸ti, 1986. s ¸ ¸ as a s a s ¸ ¸ a s [8] D.R. Popescu, Combinatoric˘ ¸i teoria grafurilor, Societatea de Stiinte Matematice din Romˆnia, Bucure¸ti, 2005. [9] C.P. Popovici, H. Georgescu, L. State, Bazele informaticii. Vol. I ¸i II, Editura Universit˘¸ii din Bucure¸ti, s at s Bucure¸ti, 1990-1991. s [10] L. State, Elemente de logic˘ matematic˘ ¸i demonstrarea automat˘ a teoremelor, Tipografia Universit˘¸ii din a a s a at Bucure¸ti, Bucure¸ti, 1989. s s [11] T. Toadere, Grafe. Teorie, algoritmi ¸i aplicatii, Editura Albastr˘, Cluj-Napoca, 2002. s ¸ a [12] I. Tomescu, Combinatoric˘ ¸i teoria grafurilor, Tipografia Universit˘¸ii din Bucure¸ti, Bucure¸ti, 1978. as at s s [13] I. Tomescu, Probleme de combinatoric˘ ¸i teoria grafurilor, Editura Didactic˘ ¸i Pedagogic˘, Bucure¸ti, 1981. as as a s [14] I. Tomescu, Data structures, Editura Universit˘¸ii din Bucure¸ti, Bucure¸ti, 2004. at s s

3

yi−1 ) ¸i xi < yi . . Fie x ∈ R ¸i n ∈ N. . ¸ ¸ ın a ¸ Definitia 1.1. . ¸ a Definitia 1. n}. .3. . (x + n − 1).1. dac˘ n = 0. . a 4 . Not˘m ¸ s a ⎧ ⎧ a a ⎨ 1. . s ¸ Definitia 1. xn ).1 Preliminarii ˆ aceast˘ lectie vom prezenta formule de num˘rare ¸i algoritmi de generare (enumerare) pentru In a ¸ a s cele mai cunoscute familii de obiecte combinatoriale: produs cartezian. an poate fi identificat cu vectorul (a1 . notat cu card (A).1. combin˘ri (f˘r˘ repetitie sau cu repetitie). dac˘ n ≥ 1. astfel ˆ at a a ıncˆ s (x1 . . . . . . combin˘ri. cuvˆntul a1 a2 . submultimi. se nume¸te cuvˆnt de lungime n peste alfabetul A. . . s a a a Observatia 1. [x] = x(x + 1) . . Reamintim ˆ continuare cˆteva notiuni uzuale. . . cu a1 . . (x − n + 1). cu repetitie sau ordonate). . . . . ym ) ¸ ¸ a s doi vectori (cuvinte) cu elemente (litere) din A. Lungimea cuvˆntului a se noteaz˘ cu |a|. yn ) ¸i m > n sau dac˘ exist˘ un indice i. . y = (y1 . O secvent˘ de forma ¸ a ¸ a s ¸a a = a1 a2 . ⎨ 1.1. xi−1 ) = (y1 . . . Fie A o multime (alfabet) total ordonat˘ ¸i x = (x1 . xn ) = (y1 .1. aranjamente ¸ (f˘r˘ repetitie. i ≤ min{m. iar [x]n se nume¸te polinomul s a s factorial cresc˘tor de gradul n. an ∈ A. an ). permut˘ri (f˘r˘ aa ¸ ¸ a aa ¸ ¸ a aa repetitie sau cu repetitie). . Evident. n a a x(x − 1) . . [x]n = ⎩ ⎩ n factori n factori [x]n se nume¸te polinomul factorial descresc˘tor de gradul n. dac˘ n = 0. .4. Fie A o multime finit˘. Spunem c˘ x este mai mic decˆt y ˆ ordine a a ın lexicografic˘ ¸i not˘m x ≺ y dac˘ as a a s (x1 .2. permut˘ri a a 1. Num˘rul de elemente ale lui A. . a2 . .1. . .Tema 1 Aranjamente. . a2 . . Fie A un alfabet (adic˘ o multime finit˘) ¸i n ∈ N . se ¸ ¸ a a nume¸te cardinalul multimii A. .1. an . dac˘ n ≥ 1. . . Definitia 1. . . .

. . . . −. . (b. c). +. (a. a • Primul element al produsului cartezian A1 × A2 × . . s } } cˆt timp (k > 0).˘ ˘ TEMA 1. . este a (c1 . a }. c2 . mn }. . . A2 . . . .1. ARANJAMENTE. . an )|a1 ∈ A1 . a2 . Fie multimile standard ¸ A1 = {1. . . · card (An ). . . ¸ a ¸ a Algoritmul 1. . . 1. . . a2 ∈ A2 . ck−1 . × An ) = card (A1 ) · card (A2 ) · . . a as a a ıncˆ ˆ acest caz. 1. (b. pentru i = k + 1. . afi¸are(c. . An multimi ¸ a s ¸ finite. . Atunci card (A1 × A2 × . Fie n ∈ N ¸i A1 .2. . n afi¸eaz˘ ci . n). × An = {(a1 . . . . Produsul cartezian al multimilor A1 . an ∈ An }. . . .2. . s cˆt timp (ck = mk ) ¸i (k > 0) k ← k − 1. . c)}. ˆ ordine lexicografic˘. c). . . cn ) = (1. . elementul urm˘tor. s repet˘ a { k ← n. a dac˘ (k > 0) a { ck ← ck + 1.1 (de generare a produsului cartezian). unde functia de afi¸are este ¸ s afi¸are(c. . . 1). luˆnd cel mai mare indice k cu aceast˘ proprietate. ˆ ordine In a a a ın lexicografic˘. .2. .2. ck + 1. +. n ci ← 1. . Propozitia 1. 2. este ın a (c1 . A2 .1. 1). ck−1 . . . An (n ∈ N ) este multimea ¸ ¸ ¸ Exemplul 1. . {a. A2 = {1. COMBINARI. −} × {c} = {(a. n ci ← 1. Vom utiliza ”regula urm˘torului”. n) : s s a { pentru i = 1. afi¸are(c. . 2. 1} astfel ˆ at ck < mk . cn ) are un element urm˘tor dac˘ ¸i numai dac˘ exist˘ un indice k ∈ {n. . . ˆ pseudocod. algoritmul poate fi descris sub forma In produs cartezian(n. PERMUTARI 5 1. m2 }. c). 2. n).1 (de num˘rare a produsului cartezian). . Programul C++ corespunz˘tor este: a . × An . . . . . . . . Se utilizeaz˘ metoda inductiei matematice dup˘ n. Demonstratie. An = {1. . . ck+1 . .2 Produs cartezian A1 × A2 × . . . m1 }. . ck . • Un element arbitrar (curent) (c1 . . }. −. . . . . Definitia 1. . b} × {+. m) : { pentru i = 1.

ordine LEXICOGRAFICA #include<conio.i. numerotare void afisare(int x[50]. clrscr().int nx) { int i.3 Submultimi ¸ Propozitia 1. cin>>m[i]. . bazat pe generarea indicilor. a12 . . . a2m2 }. . an2 . . for(i=1.i++) cout<<x[i]<<’ ’. . } } while (k>0). continuare".h> // a PRODUSULUI CARTEZIAN int n.i<=n. An = {an1 . a1m1 }.cin>>n. produs_cartezian(n. ARANJAMENTE. Fie A o multime finit˘ ¸i P(A) multimea ¸ a ¸ ¸ a s ¸ card (A) . } void main(void) { int i. .3. while ((c[k]==m[k]) && (k>0)) k--. . if(wherey()==25) { cout<<" <enter> pt. .i++) { cout<<"Dati numarul de elemente ale multimii A"<<i<<": m["<<i<<"]=". Pentru generarea produsului cartezian A1 × A2 × . . anmn } se poate folosi algoritmul anterior.clrscr(). cout<<endl. ˆ ınlocuind afi¸area indicilor ci cu s ¸ a ınlocuind functia afi¸are(c. .h> // Generarea ITERATIVA . } 6 Observatia 1. a. if (k>0) { c[k]++.2. adic˘ ˆ s a functia ¸ afi¸are(c. Atunci card (P(A)) = 2 ¸ a¸ .m). .i++) c[i]=1. . cout<<++nr<<") ".i<=n.1 (de num˘rare a submultimilor). × An al unor multimi finite ¸ ¸ arbitrare A1 = {a11 . } cout<<"Elementele produsului cartezian sunt:\n". COMBINARI. for(i=1. PERMUTARI #include<iostream.n). afisare(c.˘ ˘ TEMA 1.i<=nx. cout<<"Dati numarul de multimi: n=".m[50]. .1.i++) c[i]=1. A2 = {a21 . for(i=k+1.nr=0.n). n) cu ¸ s afi¸area elementelor corespunz˘toare aici din multimile Ai . tuturor submultimilor (p˘rtilor) lui A. . for(i=1. 1. . . } } void produs_cartezian(int n. a22 . n afi¸eaz˘ aici .i<=n. getch(). do { k=n. }. getch(). afisare(c. // nr=variabila pt.int m[50]) { int c[50]. n) : s s a { pentru i = 1.k. .

˘ ˘ TEMA 1. ARANJAMENTE, COMBINARI, PERMUTARI Demonstratie. Fie A = {a1 , a2 , . . . , an }, n ∈ N . Not˘m {1, 2}n = {1, 2} × . . . × {1, 2}. ¸ a Definim functiile α : P(A) → {1, 2}n ¸i β : {1, 2}n → P(A) prin: ¸ s • ∀B ∈ P(A), α(B) = (c1 , c2 , . . . , cn ), unde ci = 1, dac˘ ai ∈ B, a 2, dac˘ ai ∈ B; a
de n ori

7

• ∀ (c1 , c2 , . . . , cn ) ∈ {1, 2}n , β(c1 , c2 , . . . , cn ) = {ai |ci = 1, i ∈ {1, . . . , n}}. Functiile α ¸i β sunt inverse una celeilalte, deci sunt bijective ¸i card (P(A)) = card ({1, 2}n ) = 2n . ¸ s s Exemplul 1.3.1. Pentru A = {a, b, c}, corespondenta submultimi ↔ produs cartezian din demonstratia ¸ ¸ ¸ anterioar˘ este redat˘ ˆ urm˘torul tabel: a a ın a (c1 , c2 , c3 ) ∈ {1, 2}3 (1,1,1) (1,1,2) (1,2,1) (1,2,2) (2,1,1) (2,1,2) (2,2,1) (2,2,2) Deci A are 23 = 8 submultimi. ¸ Algoritmul 1.3.1 (de generare a submultimilor). Fie multimea A = {a1 , a2 , . . . , an }. Conform ¸ ¸ ınlocuind demonstratiei anterioare, putem genera produsul cartezian {1, 2}n cu Algoritmul 1.2.1 ˆ ¸ s ¸ a afi¸area elementelor (c1 , . . . , cn ) cu afi¸area submultimilor corespunz˘toare s B = {ai |ci = 1, i ∈ {1, . . . , n}}. Obtinem urm˘torul algoritm descris ˆ pseudocod. ¸ a ın submultimi(a, n) : ¸ { pentru i = 1, n ci ← 1; afi¸are(c, a, n); s repet˘ a { k ← n; s cˆt timp (ck = 2) ¸i (k > 0) k ← k − 1; a dac˘ (k > 0) a { ck ← 2; pentru i = k + 1, n ci ← 1; afi¸are(c, a, n); s } } cˆt timp (k > 0); a }, unde functia de afi¸are este ¸ s afi¸are(c, a, n) : s a s a { pentru i = 1, n dac˘ (ci = 1) afi¸eaz˘ ai ; }. B ∈ P(A) {a, b, c} {a, b} {a, c} {a} {b, c} {b} {c} ∅

˘ ˘ TEMA 1. ARANJAMENTE, COMBINARI, PERMUTARI

8

1.4

Aranjamente cu repetitie ¸

Propozitia 1.4.1 (de num˘rare a aranjamentelor cu repetitie). Fie m, n ∈ N. Atunci num˘rul ¸ a ¸ a de cuvinte de lungime n peste un alfabet cu m litere este egal cu mn . Demonstratie. Fie B = {1, 2, . . . , m} ¸i C = {(c1 , c2 , . . . , cn )|ci ∈ B ∀ i}. Cum C = B n , conform ¸ s n Propozitiei 1.2.1 avem card (C) = m . ¸ Definitia 1.4.1. Cuvintele num˘rate ˆn propozitia anterioar˘ se numesc aranjamente cu repetitie ¸ a ı ¸ a ¸ n s de m luate cˆte n. Prin abuz de limbaj, ¸i num˘rul lor, adic˘ m , se nume¸te tot aranjamente cu a s a a repetitie de m luate cˆte n. ¸ a Exemplul 1.4.1. Pentru m = 2 ¸i n = 3, aranjamente cu repetitie sunt, ˆ ordine lexicografic˘: s ¸ ın a (1, 1, 1), (1, 1, 2), (1, 2, 1), (1, 2, 2), (2, 1, 1), (2, 1, 2), (2, 2, 1), (2, 2, 2). ¸ Deci avem 23 = 8 aranjamente cu repetitie. Algoritmul 1.4.1 (de generare a aranjamentelor cu repetitie, sub form˘ de cuvinte). Pentru ¸ a multimea standard B = {1, 2, . . . , m}, conform demonstratiei anterioare putem genera produsul ¸ ¸ n a cartezian B , cu Algoritmul 1.2.1, luˆnd m1 = m2 = · · · = mn = m. Observatia 1.4.1. Pentru o multime A = {a1 , a2 , . . . , an } oarecare putem genera indicii (c1 , . . . , cn ) ¸ ¸ cu algoritmul anterior ¸i afi¸a elementele corespunz˘toare acestor indici (ac1 , . . . , acn ). s s a

1.5

Aranjamente

Propozitia 1.5.1 (de num˘rare a aranjamentelor). Fie m, n ∈ N. Atunci num˘rul de cuvinte de ¸ a a lungime n cu litere distincte peste un alfabet cu m litere este egal cu [m]n . Demonstratie. Fie B = {1, 2, . . . , m} ¸i C1 = {(c1 , c2 , . . . , cn )|ci ∈ B ∀ i, ci = cj ∀ i = j}. Avem ¸ s 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 . Definitia 1.5.1. Cuvintele num˘rate ˆn propozitia anterioar˘ se numesc aranjamente (f˘r˘ repetitie) ¸ a ı ¸ a a a ¸ s a a de m luate cˆte n. De asemenea ¸i num˘rul lor, adic˘ [m]n , se nume¸te tot aranjamente (f˘r˘ a s a a repetitie) de m luate cˆte n ¸i se mai noteaz˘ cu An . ¸ a s a m Observatia 1.5.1. Pentru n > m avem [m]n = m . . . (m − m) . . . (m − n + 1) = 0. ¸ Exemplul 1.5.1. Pentru m = 4 ¸i n = 2, aranjamentele sunt, ˆ ordine lexicografic˘: s ın a (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 ˆ Sectiunea 1.7. ın ¸

1.6

Permut˘ri a

Propozitia 1.6.1 (de num˘rare a permut˘rilor). Fie n ∈ N. Atunci num˘rul de cuvinte ce ¸ a a a contin exact o dat˘ fiecare liter˘ a unui alfabet cu n litere este egal cu n!, unde ¸ a a n! = 1 · 2 · 3 · · · · · n (n factorial), 0! = 1.

˘ ˘ TEMA 1. ARANJAMENTE, COMBINARI, PERMUTARI Demonstratie. Lu˘m m = n ˆ Propozitia 1.5.1 ¸i folosim egalitatea [n]n = n(n − 1) . . . 1 = n!. ¸ a ın ¸ s

9

Definitia 1.6.1. Cuvintele num˘rate ˆn propozitia anterioar˘ se numesc permut˘ri (f˘r˘ repetitie) ¸ a ı ¸ a a a a ¸ de ordinul n. De asemenea ¸i num˘rul lor, adic˘ n!, se nume¸te tot permut˘ri (f˘r˘ repetitie) s a a s a a a ¸ de n. Exemplul 1.6.1. Pentru n = 3, permut˘rile multimii standard {1, 2, 3} sunt, ˆ ordine lexicografic˘: a ¸ ın a (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. a ¸ Algoritmul 1.6.1 (de generare a permut˘rilor). Fie multimea standard A = {1, 2, . . . , n}. Vom a utiliza din nou ”regula urm˘torului”. a • Prima permutare, ˆ ordine lexicografic˘, este ın a (p1 , p2 , . . . , pn ) = (1, 2, . . . , n). • O permutare arbitrar˘ (curent˘) a a (p1 , p2 , . . . , pk−1 , pk , pk+1 , . . . , pn ) are o permutare urm˘toare dac˘ ¸i numai dac˘ exist˘ un indice k ∈ {n − 1, . . . , 1} astfel ˆ at a as a a ıncˆ pk < pk+1 . ˆ acest caz, luˆnd cel mai mare indice k cu aceast˘ proprietate ¸i cel mai mare indice In a a s a a j din {n, . . . , k + 1} astfel ˆ at pj > pk (exist˘, deoarece pk+1 > pk ), permutarea urm˘toare, ıncˆ ˆ ordine lexicografic˘, este ın a (p1 , p2 , . . . , pk−1 , pj , pk+1 , . . . , pj , . . . , pn ), unde vectorul (pk+1 , . . . , pj , . . . , pn ) este obtinut prin ordonarea cresc˘toare a elementelor r˘mase ¸ a a (pk , pk+1 , . . . , pj−1 , pj+1 , . . . , pn ). Cum aceste elemente formeaz˘ vectorul ordonat descresc˘tor a a (pk+1 , . . . , pj−1 , pk , pj+1 , . . . , pn ), rezult˘ c˘ vectorul (pk+1 , . . . , pj , . . . , pn ) este r˘sturnatul acestuia ¸i deci poate fi obtinut din a a a s ¸ acesta, de exemplu, prin interschimb˘ri ˆ a ıntre termenii situati la egal˘ distant˘ fat˘ de mijloc. ¸ a ¸a ¸a De exemplu, pentru permutarea curent˘ a (2, 7, 4, 8, 6, 5, 3, 1) avem k = 3 (p3 = 4 < p4 = 8), j = 6 (pj = 5 > pk = 4), deci permutarea urm˘toare se obtine a ¸ a a interschimbˆnd ˆ ai pk = p3 = 4 cu pj = p6 = 5, apoi r˘sturnˆnd subvectorul (8, 6, 4, 3, 1) dintre a ıntˆ pozitiile k + 1 ¸i n (de exemplu prin interschimb˘rile 8 ↔ 1, 6 ↔ 3), adic˘ aceast˘ permutare ¸ s a a a urm˘toare este a (2, 7, 5, 1, 3, 4, 6, 8). ˆ pseudocod, algoritmul poate fi descris sub forma In permut˘ri(n) : a { pentru i = 1, n pi ← i; afi¸are(p, n); s repet˘ a { k ← n − 1; s cˆt timp (pk ≥ pk+1 ) ¸i (k > 0) k ← k − 1; a

˘ ˘ TEMA 1. ARANJAMENTE, COMBINARI, PERMUTARI dac˘ (k > 0) a { j ← n; cˆt timp (pj ≤ pk ) j ← j − 1; a pk ↔ pj ; pentru i = 1, n−k pk+i ↔ pn−i+1 ; 2 afi¸are(p, n); s }

10

} cˆt timp (k > 0); a

}, unde ↔ reprezint˘ instructiunea de interschimbare, iar x reprezint˘ partea ˆ a ¸ a ıntreag˘ (inferioar˘) a a a num˘rului x ∈ R. a ınlocuim Observatia 1.6.1. Pentru generarea permut˘rilor unei multimi arbitrare A = {a1 , a2 , . . . , an } ˆ ¸ a ¸ s a afi¸area indicilor (p1 , . . . , pn ) cu afi¸area elementelor corespunz˘toare (ap1 , . . . , apn ). s

1.7

Combin˘ri a

Propozitia 1.7.1 (de num˘rare a combin˘rilor). Fie m, n ∈ N. Atunci ¸ a a num˘rul de cuvinte strict cresc˘toare de lungime n peste un alfabet (ordonat) cu m litere a a = num˘rul de submultimi cu n elemente ale unei multimi cu m elemente a ¸ ¸ [m]n def m = . = n! n Demonstratie. Fie B = {1, 2, . . . , m}. Not˘m multimile din enunt astfel: ¸ a ¸ ¸ C3 = {(c1 , c2 , . . . , cn )|ci ∈ B ∀ i, ci < ci+1 ∀ i}, S3 = {S|S ⊆ B, card (S) = n}. ˆ Intre aceste multimi definim functiile μ : 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 functii sunt inverse una celeilalte, deci sunt bijective ¸i astfel card (C3 ) = card (S3 ). ¸ s ın ¸ aa Permutˆnd fiecare combinare (c1 , c2 , . . . , cn ) ∈ C3 ˆ toate cele n! moduri posibile, obtinem f˘r˘ a repetare toate aranjamentele din multimea C1 = {(a1 , a2 , . . . , an )|ai ∈ B ∀ i, ai = aj ∀i = j}. ¸ [m]n Deci card (C3 )·n! = card (C1 ). Conform Propozitiei 1.5.1, card (C1 ) = [m]n , deci card (C3 ) = ¸ . n! Definitia 1.7.1. Oricare obiecte din cele 2 tipuri num˘rate ˆn propozitia anterioar˘ se numesc com¸ a ı ¸ a m bin˘ri (f˘r˘ repetitie) de m luate cˆte n. De asemenea ¸i num˘rul lor, adic˘ a a a ¸ a s a a , se nume¸te s n n tot combin˘ri (f˘r˘ repetitie) de m luate cˆte n ¸i se mai noteaz˘ cu Cm . a a a ¸ a s a Observatia 1.7.1. Pentru n > m avem ¸ m n = 0, deoarece [m]n = 0.

Pentru n ≤ m, deoarece [m]n = m(m − 1) . . . (m − n + 1) =

m! m m! avem = . (m − n)! n n!(m − n)! Exemplul 1.7.1. Pentru m = 5 ¸i n = 3, corespondentele din demonstratia anterioar˘ sunt redate ˆ s ¸ ¸ a ın urm˘torul tabel: a

c3 ) ∈ C3 (1. . ARANJAMENTE. .3. 1} astfel ˆ at a a s a a ıncˆ ˆ acest caz. n = 6 ¸i combinarea curent˘ (1. 3. a ˆ pseudocod.5) (3. s repet˘ a { k ← n. . afi¸are(c. c2 . pentru m = 8. .˘ ˘ TEMA 1. ck+1 . 3. ck + 1 + n − k). 4} {2. PERMUTARI (c1 . 4} {1. ˆ ordine lexicografic˘. . 2. . s } } cˆt timp (k > 0). a 3! 1·2·3 S ∈ S3 {1. . c2 . 7. In urm˘toare.7. c2 . 3. cn ) are o combinare urm˘toare dac˘ ¸i numai dac˘ exist˘ un indice k ∈ {n. . COMBINARI. n). cn ) = (1. . . deci combinarea urm˘toare este (1. . 2. 2. . . 4} {1. . 5. 5} {3. 2. s cˆt timp (ck = m − n + k) ¸i (k > 0) k ← k − 1.3. este a ın a (c1 . 5} {2. a • Prima combinare (de m luate cˆte n). 6. • O combinare arbitrar˘ (curent˘) a a (c1 .4. .5) (1. 4. Vom utiliza din nou ”regula urm˘torului”.4) (1. 2.1 (de generare a combin˘rilor). c2 . 2. m} ¸i a ¸ s n ≤ m. 3. algoritmul poate fi descris sub forma In combin˘ri(m. ck + 1. . . n).5) (2. . 5} {2.4) (2. Fie multimea standard B = {1.5) (2. . ˆ ordine lexicografic˘. 5} {1. .2. combinarea a a ck < m − n + k.4. n) : a { pentru i = 1. .3. 5} {1. . n ci ← i. 3.3.5) (1. . ck−1 . 5}. 5. ck + 2.2. afi¸are(c.2.5) Deci avem 5 3 = 5·4·3 [5]3 = = 10 combin˘ri.3) (1. . 7). 8) avem k = 2 (c2 = 2 < s a m − n + k = 8 − 6 + 2). ck−1 . 4. luˆnd cel mai mare indice k cu aceast˘ proprietate. . ck . 4. pentru i = k + 1.4) (1. De exemplu. 3} {1. .4. n ci ← ci−1 + 1. . . 11 Algoritmul 1. . este a ın a (c1 . a dac˘ (k > 0) a { ck ← ck + 1. . . 4. 6. . . a }. n).

2.7.3) (3. Folosind Algoritmii 1.6.1.1) Combinare Permutare Aranjament (1. Atunci num˘rul de ¸ a a ¸ a [m]n def m cuvinte cresc˘toare de lungime n peste un alfabet (ordonat) cu m litere este egal cu a = .4) (1. m} ¸i ¸ s n ≤ m.3) (2.1 obtinem a s a a s ¸ urm˘toarea descriere ˆ pseudocod.3) (2.2) (3.1.2.8 Combin˘ri cu repetitie a ¸ Propozitia 1.2.1.3) (1. putem genera aranjamentele de m luate cˆte n prin ¸ a generarea combin˘rilor ¸i permutarea fiec˘rei combin˘ri.2.3.2.2) (2.4) (1.3.3.1) (2.2.4) (1.8. . n) : s a { pentru i = 1.2) (1. p.1) (4.1.2.4) (2.2) (2. permut˘ri(n). pentru i = k + 1.1.3.3) Permutare Aranjament (1.4. a } } cˆt timp (k > 0).1.4.2.3. .1.3) (2.2) (1.1.2. a }.4. algoritmii anteriori pot fi adaptati pentru generarea ¸ ¸ ¸ combin˘rilor ¸i aranjamentelor pentru multimi oarecare.3.2 (de generare a aranjamentelor). 2.3. n ∈ N.4) (2.6.1. 3 Observatia 1. Fie m.2) (4.4) (1.2) (1.3) (1.2) (3.7.7.1 ¸i 1. .3.1. n afi¸eaz˘ cpi .4) (2. n ci ← ci−1 + 1.6.3.4.4. ARANJAMENTE. n n! . COMBINARI.2.1) (4. Exemplul 1.1) (2.2) (3.˘ ˘ TEMA 1.3.1) (3.2) (4.7.3) (2.3.2.3.1) (4. a repet˘ a { k ← n. corespondenta aranjamente ↔ permut˘rile combin˘rilor din s ¸ a a demonstratia anterioar˘ ¸i din algoritmul anterior este redat˘ ˆ urm˘torul tabel: ¸ as a ın a Combinare (1. a dac˘ (k > 0) a { ck ← ck + 1.2) (4.3.3.2) (2.1.4) Deci avem 4 · 3! = [4]3 = 4 · 3 · 2 = 24 aranjamente.1) (3.1) (3. Analog Observatiei 1. .2.2. Pentru m = 4 ¸i n = 3.1 ˆ a ¸ ınlocuind functia de afi¸are cu ¸ s s afi¸are(c. a s ¸ 1.1.3) (2.1) (3.2.3) (1.1.4.2. s cˆt timp (ck = m − n + k) ¸i (k > 0) k ← k − 1.2) (3.4) (1. Conform demonstratiei anterioare. PERMUTARI 12 Algoritmul 1. a ın aranjamente(m.1) (2.3.2.3) (3.1) (1.3) (2. }.1) (3. permut˘ri(n). n) : { pentru i = 1.3) (3.2.1.1) (3.1.3) (1. Fie multimea standard B = {1.2) (1. unde permut˘ri(n) este functia din Algoritmul 1.1 (de num˘rare a combin˘rilor cu repetitie).3.2. n ci ← i.3) (3.

. deci utilizˆnd Propozitia 1. este ¸ a ın a (c1 . . d2 . 1. ck . 3. 2. combinarea cu ıncˆ In a a repetitie urm˘toare.8. 3. ci ≤ ci+1 ∀ i}. Fie B = {1. . dn ) = (d1 . σ : C3 → C4 astfel: ¸ • ρ(c1 . . 2. 2). d3 . . c2 . c3 . . (1. Acestea sunt functii inverse. cn ) are o combinare cu repetitie urm˘toare dac˘ ¸i numai dac˘ exist˘ un indice k ∈ {n. 2. . cn )|ci ∈ B ∀ i. Cuvintele num˘rate ˆn propozitia anterioar˘ se numesc combin˘ri cu repetitie ¸ a ı ¸ a a ¸ m de m luate cˆte n. 3). 2. ck + 1). d2 . 2. . este ¸ a ın a (c1 . ¸ a Exemplul 1. c2 . luˆnd cel mai mare indice k cu aceast˘ proprietate. . . Fie multimea standard B = {1. COMBINARI. s cˆt timp (ck = m) ¸i (k > 0) k ← k − 1.1. . . • O combinare cu repetitie arbitrar˘ (curent˘) ¸ a a (c1 . . n) : a { pentru i = 1. . . 4. . . 3.7. ˆ ordine lexicografic˘.˘ ˘ TEMA 1. (2. 1. PERMUTARI Demonstratie. . . 3. c2 . 1. 3). 3). . (1. 2). . . c2 .8. 2. (1. 8. 3). ˆ ordine lexicografic˘: s a ¸ ın a (1. . 6. 2. . 2. 3. . (3. 1). . . . 3. a dac˘ (k > 0) a . pentru m = 8. di < di+1 ∀ i}. ck+1 . De exemplu. . 3). 3).1. cn ) = (c1 . d3 − 2. 6. m + n − 1}. c2 . . . ˆ ordine lexicografic˘. 1. ¸ C4 = {(c1 . A = {1. 1. . 8) avem k = 3 s ¸ a ¸ a (c3 = 5 < m = 8) deci combinarea cu repetitie urm˘toare este (2. C3 = {(d1 . 2. • σ(d1 . . . . 3). a • Prima combinare cu repetitie (de m luate cˆte n). 1} astfel ¸ a as a a ˆ at ck < m. .8. m}. . . De asemenea ¸i num˘rul lor. 2. . . 3). . . (1. ck + 1. . . 6). . s repet˘ a { k ← n. c3 + 2. 2. 5. se nume¸te tot combin˘ri cu s a n repetitie de m luate cˆte n. n ci ← 1. 3). . . n = 6 ¸i combinarea cu repetitie curent˘ (2. 3. dn )|di ∈ A ∀ i. 1. 1. adic˘ a s a a . 3). cn ) = (1. cn + n − 1). 2). Definitia 1. . 3. 1. . Pentru m = 3 ¸i n = 4. Deci avem 3 4 = 3·4·5·6 [3]4 = = 15 combin˘ri cu repetitie. ck−1 . algoritmul poate fi descris sub forma In ¸ combin˘ri cu repetitie(m. . (2. .1 avem ¸ a [m + n − 1]n [m]n m+n−1 m = card (C4 ) = card (C3 ) = = = n n n! n! 13 . (1. a ¸ 4! 1·2·3·4 Algoritmul 1. (1. (1. 2. . ck−1 . (1. . . . dn − n + 1). ck + 1. 3. 1. d2 − 1. . afi¸are(c. . 6. 1). m}.1 (de generare a combin˘rilor cu repetitie). c2 + 1. . . . combin˘rile cu repetitie sunt. . 1. a ¸ ¸ Vom utiliza din nou ”regula urm˘torului”. . n). 2. . . 2. 2. 8. ARANJAMENTE. (1. (2. (2. ˆ acest caz. ˆ pseudocod. Definim corespondentele ρ : C4 → C3 . 2). 4.

. deci obtinem ¸ moduri posibile de alegere 2. . . nm . Atunci num˘rul de cuvinte de lungime n ce pot fi formate peste un alfabet cu m litere astfel ˆncˆt litera num˘rul i s˘ apar˘ de exact ni ori pentru ı a a a a n n! def . Analog Observatiei 1. s • . n2 . . . . nm !(n − n1 − . PERMUTARI { ck ← ck + 1. . Fie ¸ a a ¸ s a m. afi¸are(c. 2. . n ci ← ck . . . nm ! Demonstratie. c2 . nm ∈ N ¸i n = n1 + n2 + · · · + nm .˘ ˘ TEMA 1. . n2 . alegem cei nm indici (din restul de n − n1 − . .. . .1 (de num˘rare a permut˘rilor cu repetitie). a }. Cuvintele num˘rate ˆn propozitia anterioar˘ se numesc permut˘ri cu repetitie ¸ a ı ¸ a a ¸ n . .1. . .8. . . rezult˘ a n1 n2 n2 a indicilor literelor 1 ¸i 2. nm . • pentru fiecare alegere de mai sus. n2 .. Astfel card (C5 ) = n − n1 n − n1 − . . − nm−1 . .9. cn )|ci ∈ B ∀ i. m} ¸i ¸ s C5 = {(c1 . n2 . COMBINARI.1.. nm ! Definitia 1. . − nm )! n1 !n2 ! . . s a ¸ a . . .9. deci obtinem ¸ literelor egale cu m. . . De asemenea ¸i num˘rul lor. . . m. . .6. . (anagrame) de n luate cˆte n1 . pentru i = k + 1. s } 14 } cˆt timp (k > 0). n m n1 !n2 ! . . .. .. . 2. . . rezult˘ a nm n n1 n − n1 n − n1 − . Observatia 1. .1. • pentru fiecare alegere de mai sus.. .. . ARANJAMENTE. card ({i|ci = j}) = nj ∀ j}. adic˘ a s a a n 1 . − nm−1 moduri posibile. . = · · . Num˘r˘m cuvintele din C5 astfel: aa a • alegem cei n1 indici (din totalul de n) ai literelor egale cu 1. Fie B = {1. . . n2 .. − nm−1 )! n! · = (deoarece (n − n1 − . n2 nm moduri posibile de alegere a tuturor indicilor literelor 1. n1 . n m se nume¸te tot permut˘ri cu repetitie de n luate cˆte n1 . . . = orice i ∈ {1. . n). algoritmul anterior poate fi adaptat pentru generarea ¸ ¸ combin˘rilor cu repetitie pentru multimi oarecare. a ¸ ¸ 1. · n1 n2 nm n1 !(n − n1 )! n2 !(n − n1 − n2 )! (n − n1 − . rezult˘ n n1 moduri posibile. − nm−1 n! n (n − n1 )! . m} este egal cu n1 . . − nm−1 ) ai n − n1 − . . . . . . .9 Permut˘ri cu repetitie a ¸ Propozitia 1. alegem cei n2 indici (din restul de n − n1 ) ai literelor egale cu n n − n1 n − n1 moduri posibile. − nm )! = 0! = 1).

(1. 5. (1. 5. 2. 3. deci 1. . nm ). 1). . 2. . a ¸ 2!1!1! Algoritmul 1. 2. 1).9.9. . de n1 ori de n2 ori de nm ori • Existenta ¸i forma permut˘rii cu repetitie urm˘toare ˆ ordine lexicografic˘ pentru o permutare ¸ s a ¸ a ın a cu repetitie curent˘ arbitrar˘ se determin˘ exact ca la permut˘rile f˘r˘ repetitie (Algoritmul ¸ a a a a aa ¸ 1. s repet˘ a { k ← n − 1. 3. 1. 1. 1.1. 2.6. 2). n = n1 +n2 +· · ·+nm . n2 . 3). 4. . . . (1. . 2. nm ∈ N. 1. . 1 permut˘rile (f˘r˘ repetitie) sunt un caz particular al permut˘rilor cu repetitie. } afi¸are(p. 2. 2. 3). 1. (2. 3. 3. 2.9. deci permutarea cu repetitie urm˘toare se ¸ a a a obtine interschimbˆnd ˆ ai pk = p4 = 3 cu pj = p7 = 5. algoritmul poate fi descris sub forma In permut˘ri cu repetitie(m. . 3.˘ ˘ TEMA 1. 1 = 4! = 12 permut˘ri cu repetitie. 1). . m pentru k = 1. nj { i ← i + 1. Pe de alt˘ parte. Vom utiliza din nou ”regula urm˘torului”. permut˘rile cu repetitie sunt. 2. 1. 2. a dac˘ (k > 0) a { j ← n. . ˆ ordine lexicografic˘. 1). m.1. p2 . . . . 1) ¸ a ıntˆ dintre pozitiile k + 1 ¸i n (de exemplu prin interschimb˘rile 6 ↔ 1. Fie multimea standard B = a ¸ ¸ a {1. 2). 3). . 3. . 5. . m} ¸i n1 . 3. apoi r˘sturnˆnd subvectorul (6. m n ← n + ni . j = 7 (pj = 5 > pk = 3). 1. 1. pn ) = (1. 1. n2 = n3 = 1. (1. 5 ↔ 2. (3. . n) : a ¸ { n ← 0. . (2. . 1. 3. Luˆnd n1 = n2 = · · · = nm = 1 obtinem n = m ¸i ¸ a ¸ s 15 n = n!. . 6. De exemplu. (2.1 (de generare a permut˘rilor cu repetitie). deci n = 4. s cˆt timp (pk ≥ pk+1 ) ¸i (k > 0) k ← k − 1. 1. 1. 1). . . 1. . . 2. 3. 3. 1. n2 n1 !n2 ! al permut˘rilor cu repetitie. pentru j = 1. 5. ARANJAMENTE. 6). pentru i = 1. n2 . pentru permutarea cu repetitie curent˘ ¸ a (4. s • Prima permutare cu repetitie (de n luate cˆte n1 .1). 1. . 4. 1. 2). . 2. ˆ a ¸ ın ordine lexicografic˘: a (1. ˆ pseudocod. a ¸ s Exemplul 1. 1. Pentru m = 3 ¸i n1 = 2. adic˘ aceat˘ ¸ s a a a permutare cu repetitie urm˘toare este ¸ a (4. (3. . 2. . i ← 0. . (1. PERMUTARI Observatia 1. Deci avem 4 2. . COMBINARI. . . deci ¸i combin˘rile (f˘r˘ repetitie) sunt un caz particular s a aa ¸ n 1 . 1. 3. 1) avem k = 4 (p4 = 3 < p5 = 6). 3. . pi ← j. este ¸ a ın a (p1 . n). (3. m). 1. 3 ↔ 3). m. a aa ¸ a ¸ a n n! luˆnd m = 2 obtinem a ¸ = . 1). 5. . .

unde functia de afi¸are este cea din Algoritmul 1. COMBINARI. n).1.2. a ¸ ¸ .6. s } cˆt timp (k > 0). 2 afi¸are(p. a }.˘ ˘ TEMA 1. ARANJAMENTE. ¸ s } 16 Observatia 1. n−k pk+i ↔ pn−i+1 .6.9. PERMUTARI cˆt timp (pj ≤ pk ) j ← j − 1. Analog Observatiei 1. pentru i = 1. a pk ↔ pj .1. algoritmul anterior poate fi u¸or adaptat pentru generarea ¸ ¸ s permut˘rilor cu repetitie pentru multimi arbitrare.

. cn )|ci ∈ {1. nm . ¸ N2 = {(t1 . n1 + n2 + · · · + nm = n}. . a a • β(c1 . . . Definim corespondentele ϕ : N1 → N2 . . . . • ∀(t1 .1. nm ) = (n1 − 1. . ∀ i. tm ) ∈ N2 . . n2 . . . . . . O compunere a lui n este o scriere de forma ¸ . . cn ) = (n1 . s a unde n1 . Propozitia 2. . . . . . . . nm )|ni ∈ N ∀ i.Tema 2 Partitii ¸ 2.1 avem card (N ) = card (C4 ) = ¸ ¸ b) Fie multimile N1 = {(n1 . ψ : N2 → N1 prin: ¸ • ∀(n1 . . . . . nm ∈ N ¸i conteaz˘ ordinea dintre termenii n1 . Fie n. . nm )|ni ∈ N ∀ i. . . unde ⎪. . Atunci: ¸ a a m a) num˘rul de compuneri ale lui n cu m termeni este egal cu a . t1 + t2 + · · · + tm = n − m}. ⎪ ⎪ ⎨c n1 +1 = · · · = cn1 +n2 = 2 (n2 litere). • α(n1 . . . . m ∈ N. unde ni = num˘rul de litere i ale cuvˆntului (c1 . . . . . . . . tm )|ti ∈ N ∀ i. . . . cn ). n2 . . Acestea sunt functii inverse. . . cn ).1. . . . . . m} ∀ i. n1 + n2 + · · · + nm = n}. β : C4 → N prin: ¸ ⎧ ⎪c1 = · · · = cn1 = 1 (n1 litere). n2 . . m ∈ N. . 2. n n−1 b) num˘rul de compuneri ale lui n cu m termeni nenuli este egal cu a . .1. n2 . nm − 1). .8. . . . C4 = {(c1 . . . . t2 . ⎪ ⎪ ⎩ cn1 +···+nm−1 +1 = · · · = cn1 +···+nm−1 +nm = m (nm litere). . ψ(t1 .1 Compuneri ale unui num˘r natural a n = n1 + n2 + · · · + n m . nm ) = (c1 . tm ) = (t1 + 1. c2 . Definim corespondentele α : N → C4 . a) Fie multimile ¸ ¸ N = {(n1 . . m−1 Demonstratie. ϕ(n1 . Definitia 2. nm ). Fie n. . . tm + 1). . 17 m n . . . . deci conform Propozitiei 1. . . . . ci ≤ ci+1 ∀ i}.1 (de num˘rare a compunerilor unui num˘r natural). . nm ) ∈ N1 .

1 (de generare a compunerilor unui num˘r natural). . a dac˘ (k > 1) a { tk−1 ← tk−1 + 1. In ˆ ordine lexicografic˘.1. • O compunere curent˘ arbitrar˘ a a n = t1 + t2 + · · · + tk−1 + tk + tk+1 + · · · + tm are o compunere urm˘toare dac˘ ¸i numai dac˘ exist˘ un indice k ∈ {m. De exemplu. m) : s s a { pentru i = 1. compunerea urm˘toare. . }. este ın a n = t1 + t2 + · · · + tk−2 + (tk−1 + 1) + 0 + · · · + 0 + (tk − 1). deci conform punctului a) avem card (N1 ) = card (N2 ) = ¸ m(m + 1) . afi¸are(t. 4−1 3 3·4·5·6 3 Deci avem = 15 compuneri. Vom a utiliza din nou ”regula urm˘torului”. a }. urm˘toarea compunere dup˘ a a 10 = 2 + 0 + 5 + 3 + 0 + 0 este 10 = 2 + 0 + 6 + 0 + 0 + 2 (deoarece tk = t4 = 3).1.1. dac˘ (k < m) tk ← 0. m). (n − 1) (n − 1)! [m]n−m = = = (n − m)! (n − m)! (m − 1)!(n − m)! Exemplul 2. . Algoritmul 2. PARTITII ¸ Acestea sunt functii inverse. 2} astfel ˆ at a as a a ıncˆ ˆ acest caz. a • Prima compunere a lui n cu m termeni. unde functia de afi¸are este ¸ s afi¸are(t. m−1 m n−m 18 = 4 = 0+0+4=0+1+3=0+2+2=0+3+1=0+4+0 = 1+0+3=1+1+2=1+2+1=1+3+0=2+0+2 = 2 + 1 + 1 = 2 + 2 + 0 = 3 + 0 + 1 = 3 + 1 + 0 = 4 + 0 + 0. dintre care = = 3 compuneri cu = 4 1·2·3·4 3−1 2 termenii nenuli. s repet˘ a { k ← m. ˆ ordine lexicografic˘. Fie n. m ∈ N . . s } } cˆt timp (k > 1).TEMA 2. s cˆt timp (tk = 0) ¸i (k > 1) k ← k − 1. . . m afi¸eaz˘ ti . a a a tk > 0. m). m) : { pentru i = 1. . Pentru n = 4 ¸i m = 3 compunerile sunt s n−1 . m − 1 ti ← 0. este ın a n = 0 + 0 + · · · + 0 + n. tm ← tk − 1. algoritmul poate fi descris sub forma In compuneri(n. luˆnd cel mai mare indice k cu aceast˘ proprietate. a afi¸are(t. tm ← n. ˆ pseudocod.

k) → ¸ k i=1 P(n − k. P (6. Definim corespondentele α : P(n. s a Observatia 2. a ¸ Exemplul 2. 1) + P (n − k.2. k) = {(n1 . n1 ≤ · · · ≤ nk . k ∈ N . Avem P (n) = P (n. Analog algoritmului anterior se obtine urm˘torul algoritm pentru generarea compunerilor lui n cu m termeni nenuli. .2. . s Observatia 2. . . . n2 . .2. afi¸are(t.2. n − 1} avem P (n. PARTITII ¸ 19 Algoritmul 2. a afi¸are(t.1.2 (de generare a compunerilor cu termeni nenuli).1. tm ← n − m + 1. s cˆt timp (tk = 1) ¸i (k > 1) k ← k − 1. n2 . s repet˘ a { k ← m. nk )|ni ∈ N ∀ i. Num˘rul n = 6 are partitiile a ¸ 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. . . m). a dac˘ (k > 1) a { tk−1 ← tk−1 + 1. n1 + · · · + nk = n}. nk . Pentru orice n ∈ N ¸i orice k ∈ ¸ ¸ ¸a s {1. .2. k) prin: . 1) = 1.1. putem ¸ a presupune c˘ ace¸tia sunt scri¸i ˆ ordine cresc˘toare. . n). dac˘ (k < m) tk ← 1. . . k) num˘rul de partitii ale lui n cu k termeni. Fie n. k)).TEMA 2. . Demonstratie. deci P (6. P (6. O partitie (descompunere) a num˘rului n ∈ N este o scriere de forma ¸ ¸ a unde n1 . n − 1} not˘m ¸ s a P(n.2. i) ¸i β : s k i=1 P(n − k. . . P (6. P (6. Deoarece ˆ ¸ ıntr-o partitie ca mai sus nu conteaz˘ ordinea dintre termeni. nk ∈ N (k ∈ N ) ¸i nu conteaz˘ ordinea dintre termenii n1 . .2. s } } cˆt timp (k > 1). ∀ n ∈ N . m) : { pentru i = 1. Definitia 2. m ≤ n. Not˘m cu P (n. 5) = 1. 2) + · · · + P (n − k. . ¸ Propozitia 2.2 Partitii ale unui num˘r natural ¸ a n = n1 + n 2 + · · · + n k . a s s ın a Definitia 2. m − 1 ti ← 1. iar cu ¸ a a ¸ P (n) num˘rul tuturor partitiilor lui n. 2) + · · · + P (n. . k) = P (n − k.2.1 (relatia de recurent˘ a numerelor P (n. . 2) = 3. 3) = 3. P (6. 4) = 2. 6) = 1 ¸i P (6) = 11. ¸ a compuneri termeni nenuli(n. . 1) + P (n. Pentru orice n ∈ N ¸i orice k ∈ {1. m). a }.1. tm ← tk − 1. k). 2. i) → P(n.

¸ de k−1 ori • O partitie curent˘ arbitrar˘ ¸ a a (t1 . deoarece k ≤ n − 1). Reciproc. . . . Fie n. . . k) nenule. α(n1 . i ∈ {1. tj−1 . k). . . luˆnd cel mai mare indice j cu aceast˘ proprietate. . Cum multimile P(n − k. ˆ acest caz. . tj . .2. t2 . nk ) = (nj − 1. . tk ). . β(n1 . . . n − k + 1). a • Prima partitie este (1. aflate doar pe diagonala principal˘ ¸i sub aceast˘ diagonal˘ (adic˘ 1 ≤ k ≤ as a a a n) formeaz˘ triunghiul numerelor P (n. . unde r = t1 + t2 + · · · + tj−1 + (tj + 1) + (tj + 1) + · · · + (tj + 1). ni ) = (1. . . k ∈ N . . deci ¸i al s numerelor P (n). tabelul numerelor P (n. rezult˘ c˘ ¸ a a a a a P (n. t2 . ˆ ¸ ¸ ¸a ¸ ımpreun˘ cu conditiile initiale evidente a ¸ ¸ P (n. k). nk ) ∈ P(n.1. P (n. 1). . . unde j = min{i|ni ≥ 2. . t1 ≤ t2 ≤ · · · ≤ tk folosim din nou ”regula urm˘torului”. .2. aplicarea functiei β unei partitii a lui n − k cu cel mult k termeni const˘ ˆ m˘rirea cu 1 a fiec˘rui termen ¸i ad˘ugarea de termeni a ın a a s a egali cu 1 pentru a obtine k termeni. k}} (exist˘ j. . . . . . . k) = 0 ∀ k > n permit calculul tuturor numerelor P (n. PARTITII ¸ 20 • ∀ (n1 . . k) partitii ale lui n cu k termeni ın a ¸ (t1 . . . k) = i=1 P (n − k. . . k) ¸i P (n) pentru s n ≤ 7 (¸i k ≤ 7) este: s P (n. deci card (P(n. . i) . P(n − k. conform Corolarului 2. . de k−i ori Interpretarea acestor functii este urm˘toarea: aplicarea functiei α unei partitii a lui n cu k termeni ¸ a ¸ ¸ const˘ ˆ mic¸orarea cu 1 a fiec˘rui termen ¸i eliminarea termenilor care astfel devin egali cu zero. t2 . Observatia 2. urm˘toarea partitie este ¸ (t1 . tj−1 . a Algoritmul 2. . . ni + 1). n = t1 + t2 + · · · + tk . tj + 1. . tj + 1. n) = 1. a ın s a s ¸ a ¸ ¸ ¸ obtinˆndu-se o partitie a lui n − k cu cel mult k termeni. . . n − r). . k}. a • ∀ i ∈ {1. tj + 1. Pentru ¸ generarea ˆ ordine lexicografic˘ a celor P (n. . . ti ∈ N ∀i. 1. . . . . . . ¸ ¸ a ¸ k Functiile α ¸i β sunt bine definite ¸i inverse una celeilalte. n1 + 1. . tj+1 . ∀ (n1 . . . Relatia de recurent˘ din Propozitia 2. . .2. tk ) are o partitie urm˘toare dac˘ ¸i numai dac˘ exist˘ un indice j ∈ {k − 1. astfel obtinˆndu-se o partitie a lui n cu k termeni. . . . . De exemplu. k ≤ n.2. 1} astfel ˆ at ¸ a a s a a ıncˆ In a a a tj ≤ tk − 2. . . . . k) sunt evident disjuncte dou˘ cˆte dou˘. k)) = card ¸ s s i=1 k P(n − k. . . nk − 1).1 (de generare a partitiilor lui n cu k termeni).TEMA 2. . . .3. i). k) n=1 n=2 n=3 n=4 n=5 n=6 n=7 k = 1 k = 2 k = 3 k = 4 k = 5 k = 6 k = 7 P (n) 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 2 1 1 1 0 0 0 0 3 1 2 1 1 0 0 0 5 1 2 2 1 1 0 0 7 1 3 3 2 1 1 0 11 1 3 4 3 2 1 1 15 Numerele P (n. . 1) = P (n. i). 1 . ni ) ∈ P(n − k. k). .2.

A2 . S(3. ¸ ¸ Definitia 2. S(3. b. Descrierea ˆ pseudocod a algoritmului are forma ın generare P(n. c} are partitiile ¸ ¸ A = {a. ¸ a) Num˘rul lui Stirling de speta a doua.1. k − 1 ti ← tj . . k − 1 r ← r + ti . a dac˘ (j > 0) a { tj ← tj + 1. pentru i = 1.3.1. urm˘toarea partitie dup˘ a ¸ a 22 = 1 + 1 + 2 + 4 + 4 + 5 + 5 este 22 = 1 + 1 + 3 + 3 + 3 + 3 + 8 (deoarece tj = t3 = 2 ≤ tk − 2 = 5 − 2). c} = {a} ∪ {b} ∪ {c}. ¸ a¸ s a a a ¸i nu conteaz˘ ordinea dintre aceste submultimi. avem B0 = 1 ¸i Bn = S(n. k). clasele) A1 .3. reprezint˘ num˘rul de partitii ale a ¸ a a ¸ unei multimi cu n elemente ˆn k p˘rti. b} ∪ {c} = {a. 1) = 1. 2) = 3. 2) + · · · + S(n. c} ∪ {b} = {a} ∪ {b. afi¸are(t. Consider˘m c˘ singura partitie a multimii vide este s a ¸ a a ¸ ¸ partitia cu zero submultimi. s repet˘ a { j ← k − 1.1. Ak (k ∈ N ) sunt nevide ¸i disjuncte dou˘ cˆte dou˘.2. s } } cˆt timp (j > 0). k).1. PARTITII ¸ De exemplu. Fie n. s s Observatia 2. Exemplul 2. notat cu S(n. c} = {a. reprezint˘ num˘rul tuturor partitiilor unei multimi cu n elea mente. k − 1 ti ← 1. n). O partitie a unei multimi nevide A este o scriere de forma ¸ ¸ ¸ unde submultimile (p˘rtile. k ∈ N. afi¸are(t. pentru i = j + 1. .3 Partitii ale unei multimi finite ¸ ¸ A = A1 ∪ A2 ∪ · · · ∪ Ak . k) : { pentru i = 1. unde functia de afi¸are este aceea¸i ca ˆ Algoritmul 2. notat cu Bn . deci S(3. . ∀ n ∈ N . k). Definitia 2. r ← 0. 1) + S(n. 3) = 1 ¸i B3 = 5. ¸ ı a¸ a a ¸ ¸ b) Num˘rul lui Bell. s cˆt timp (tj > tk − 2) ¸i (j > 0) j ← j − 1. tk ← n − r.3. ¸ s s ın 21 2. .TEMA 2. Evident. a }.1.3. b. Multimea A = {a. tk ← n − k + 1. ¸ .

Demonstratie. k − 1) ∪ {1. tabelul numerelor S(n. k} × S(n − 1. • ∀ (i. a s 22 • ∀ {A1 . k} × S(n − 1. Ak }) ∈ {1. Ak } ∈ S(n. . k) = {{A1 . De exemplu. Ak }) = = {A1 . Not˘m ¸ a S(n. . . . . . . k) nenule. . Ak }|Ai = ∅ ∀ i. dup˘ cum n este sau nu singur ˆ ın ın a¸ a ıntr-o parte. a s dac˘ n ∈ Ai ¸i Ai = {n}. . . aflate doar pe diagonala principal˘ ¸i sub aceast˘ diagonal˘ (1 ≤ k ≤ n) as a a formeaz˘ triunghiul numerelor lui Stirling de speta a doua. a ¸ ¸ S(0. . . β : S(n − 1. . .1 (relatia de recurent˘ a numerelor S(n. . k) → S(n − 1. k). {A1 . Ak } \ {Ai }. . . . astfel obtinˆndu-se o partitie a multimii {1. . a ¸ . . k) ¸i Bn pentru n ≤ 6 (¸i k ≤ 6) este: S(n. A = A1 ∪ · · · ∪ Ak }. . k)). Ai ∪ {n}. Ak−1 . 0) = 1. . . . k) = 0 ∀ k ≥ 1. fie la oricare din cele k p˘rti. β({A1 . k). . k)) . deci ¸ s s card (S(n. . k)) = card (S(n − 1. β(i. . . Ak−1 } ∈ S(n − 1. Ai ∩ Aj = ∅ ∀ i = j. . . n − 1} ın a¸ a ın ¸ a ¸ ¸ ˆ k − 1 sau ˆ k p˘rti. .2. Ak }). . Ak−1 }) = {A1 . n} ¸ a ¸ ¸ ¸ ˆ k p˘rti const˘ ˆ eliminarea elementului n. aplicarea functiei β ¸ a ın a ıntr-o parte. . . k) = S(n − 1. a Observatia 2. . . ¸ ¸ ¸a S(n. . Reciproc. . . .3. ∀ n. k − 1) + kS(n − 1. . . k) → S(n. . k} × S(n − 1. .1. Definim corespondentele ¸ α : S(n. k − 1) + kS(n − 1. k). k). Relatia de recurent˘ de mai sus ˆ ¸ ¸ ¸a ımpreun˘ cu conditiile initiale evidente S(0. S(n.3. . fie singur ˆ Functiile α ¸i β sunt bine definite ¸i inverse una celeilalte. k ∈ N . . k) = S(n − 1.TEMA 2. . . . . k} × S(n − 1. . . . Ak }. k). . k) n=0 n=1 n=2 n=3 n=4 n=5 n=6 k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 k = 6 Bn 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 1 1 0 0 0 0 2 0 1 3 1 0 0 0 5 0 1 7 6 1 0 0 15 0 1 15 25 10 1 0 52 0 1 31 90 65 15 1 203 Numerele S(n. . Ak }) = {A1 . . . . {A1 . . Ai \ {n}. . . . k − 1). . . k). k − 1) ∪ {1. . . a¸ const˘ ˆ ad˘ugarea elementului n. pentru orice n.3. (i. {A1 . . . dac˘ n ∈ Ai ¸i Ai = {n}. . k ∈ N . . 0) = 0 ∀n ≥ 1 permit calculul tuturor numerelor S(n. k − 1) ∪ {1. conform Corolarului 2. {n}}. adic˘ S(n. . . deci ¸i al numerelor s s s Bn . Interpretarea acestor definitii este urm˘toarea: aplicarea functiei α unei partitii a multimii {1. PARTITII ¸ Propozitia 2. . . k). α({A1 . prin: • ∀ {A1 . . .

1} va fi scris˘ sub forma a {1. . 2. . . k) (Propozitia a ¸ ¸ ¸a ¸ ˆ pseu2. . k { vn ← i.TEMA 2. ∀ j ∈ {1. 2. 4} ∪ {2. . 2. ¸ Cu aceast˘ reprezentare. n vi ← i. a¸ a ¸ De exemplu. k}.3. este ¸ s a ın ¸ a afisare(v) : //afi¸˘m partea Aj sa { pentru j = 1. ∀ i ∈ {1. n dac˘ (vi = j) afi¸eaz˘ i. 5} = {1.3. 5} = {3. k). s a } }. .1) ¸ Pentru reprezentarea unei partitii A = A1 ∪ · · · ∪ Ak scrise conform conventiei de mai sus. 3} ∪ {5}. partitia ¸ {1. Pentru scrierea unei partitii s ¸ A = A1 ∪ · · · ∪ Ak vom folosi conventia c˘ ˆ fiecare parte Ai elementele sunt ordonate cresc˘tor. unde a vi = j dac˘ i ∈ Aj . s } altfel //relatia de recurent˘ ¸ ¸a ın { vn ← k. //n singur ˆ parte //n nesingur ˆ parte ın pentru i = 1. . 2. 4. n} ˆ k p˘rti. k { afi¸eaz˘ ”{”. afi¸are(v). generare S(n − 1.3. In ¸ ¸ ¸ ın a¸ docod.1 (de generare a partitiilor unei multimi ˆ ¸ ¸ ıntr-un num˘r fixat de p˘rti). 3. iar ordinea dintre ¸ a ın a p˘rtile A1 . } } } }. . . n}. vectorul caracteristic al partitiei (2. 2. . 1. . afi¸are(v). n} ¸i 1 ≤ k ≤ n. . . . . vom folosi ¸ vectorul caracteristic v = (v1 . . . 4. k) : { dac˘ (k = 1) a //conditie initial˘ ¸ ¸ a //partitia cu o parte ¸ { pentru i = 1. 2. 2. acest algoritm poate fi descris sub forma generare S(n. . (2. unde functia de afi¸are. . afi¸eaz˘ ”}”. . PARTITII ¸ 23 Algoritmul 2. Ak este dat˘ de ordinea dintre cele mai mici elemente ale acestor multimi. . conform demonstratiei relatiei de recurent˘ a numerelor S(n.3.1) obtinem un algoritm recursiv de generare a partitiilor multimii {1. k − 1). generare S(n − 1. . . s } altfel { dac˘ (k = n) a //conditie initial˘ ¸ ¸ a //partitia cu n p˘rti ¸ a¸ { pentru i = 1. Fie a a ¸ A = {1. ce transform˘ vectorul caracteristic v ˆ partitia corespunz˘toare. De exemplu. vn ). 2} ∪ {5} ∪ {4.1) este v = (1. . 2. 3. . s a a s a pentru i = 1. 3). n vi ← 1.

s 24 . pseudograf. iar num˘rul de muchii sau arce se nume¸te dimensiunea grafului.1. • E este o colectie (multime multipl˘. Un graf orientat (digraf. Un graf neorientat (graf. y) = (y. adic˘ a a a a (x. adic˘ a a a a [x. • E este o colectie (multime multipl˘.1. a Observatia 3.2. grafurile impunˆndu-se drept modele de baz˘ ˆ informatic˘. liniile) grafului G. x]. punctele) ¸ as a a grafului G. atunci nodul x se nume¸te extremitatea a s initial˘ iar nodul y se nume¸te extremitatea final˘ a arcului e ¸i spunem c˘ arcul e este ¸ a s a s a incident cu x spre exterior ¸i cu y spre interior.2. multiset) finit˘ de perechi ordonate de vˆrfuri. elementele sale numindu-se muchiile (leg˘turile directe. pseudodigraf) este o pereche G = (V. nu conteaz˘ ordinea dintre elemente.1. a Observatia 3. ˆ special ˆ teoria s a a ın a ın ın structurilor de date ¸i a analizei algoritmilor. atˆt din punct de vedere al rezultatelor teoretice cˆt a a a ¸i al algoritmicii. y).4. Aceast˘ aplicabilitate a condus a a ¸ a la dezvoltarea accelerat˘ a teoriei grafurilor. y]. ˆ ¸ Intr-o pereche ordonat˘.1. conteaz˘ ordinea dintre elemente. E) unde: ¸ • V este o multime finit˘ ¸i nevid˘.1 Definitii generale ¸ Definitia 3. a) Dac˘ e = [x. E) ¸ unde: • V este o multime finit˘ ¸i nevid˘.3. notat˘ (x. elementele ¸ ¸ a a a sale numindu-se arcele (leg˘turile directe ale) grafului G. Definitia 3. punctele) ¸ as a a grafului G. elementele sale numindu-se nodurile (vˆrfurile.Tema 3 Grafuri Grafurile sunt modele matematice cu o gam˘ larg˘ de aplicatii. graf general) este o pereche G = (V. posibil egale. y) este un arc al unui graf orientat.1. y] = [y. elementele sale numindu-se vˆrfurile (nodurile. s 3. notat˘ [x. Num˘rul de noduri ale unui graf (neorientat sau orientat) se nume¸te ordinul ¸ a s grafului. x) pentru x = y. a s Definitia 3. ˆ ¸ Intr-o pereche neordonat˘.1. b) Dac˘ e = (x.1. Definitia 3. de ¸ ¸ a a noduri. atunci nodurile x ¸i y ¸ a s se numesc extremit˘¸ile muchiei e ¸i spunem c˘ muchia e este incident˘ cu nodurile x ¸i at s a a s y. y] este o muchie a unui graf neorientat.1. multiset) finit˘ de perechi neordonate.

5} ¸i s E = {(1. respectiv un arc de forma (x. Un graf (neorientat sau orientat) se nume¸te simplu (sau strict) dac˘ nu contine ¸ s a ¸ nici bucle ¸i nici muchii sau arce multiple. (3. unde P2 (V ) = {{x.1. e3 . 2]. e7 . ¸ a a s respectiv orientat). x = y} (multimea tuturor submultimilor cu dou˘ elemente ale lui V ). x]. respectiv un arc de forma (x. Definitia 3. 3.1.7. E) un graf (orientat sau neorientat). e3 = [2. unde e1 = [1. a d) Dou˘ noduri x ¸i y ale unui graf (neorientat sau orientat) se numesc adiacente (vecine) dac˘ a s a a s a exist˘ o muchie sau un arc incident cu x ¸i cu y (adic˘ o muchie de forma [x. 4. E). y]. Definitia 3. GRAFURI 25 c) O bucl˘ a unui graf (neorientat sau orientat) este o muchie sau un arc avˆnd extremit˘¸ile a a at egale (adic˘ o muchie de forma [x. 2. 5). unde V este o multime ¸ ¸ ¸ a finit˘ ¸i nevid˘ (de elemente numite noduri) iar E ⊆ P2 (V ) este o multime finit˘ (de elemente numite as a muchii). e8 . e2 . 2).1. x)). Dac˘ ˆ colectia (multimea multipl˘) de muchii sau arce a unui graf (neorientat ¸ a ın ¸ ¸ a sau orientat) exist˘ dou˘ sau mai multe elemente egale (¸i aflate pe pozitii diferite).1.1. e9 }.1. 3. y] sau arcele (x. ¸ a a 1 e1 e7 e8 e9 e3 2 3 1 2 5 e2 4 e4 5 e5 6 e6 3 4 Figura 3. 4].1. Arcul (3. ¸ a ı a ¸a a iar muchiile [x. 3). 5] (E este o multime multipl˘!) are reprezentarea grafic˘ din Figura 3. 6].2.TEMA 3. ¸ ¸ a b) Un graf orientat simplu este o pereche G = (V. (5.2: s Acest graf are ordinul 6 ¸i dimensiunea 9. e9 .1. 6]. 2. 4)} este un graf simplu avˆnd reprezentarea grafic˘ din Figura 3. e8 = [4. s a . (2. cu V = {1.8. e5 = [3. muchiile multiple e5 . Definitia 3.1. 5]. atunci acestea a a s ¸ se numesc muchii sau arce multiple. y}|x. 5]. Nodurile 1 ¸i 2 sunt adiacente. e2 = [1.6. E). iar nodurile 1 ¸i 5 nu sunt adiacente. (2.1: Figura 3. s Exemplul 3.1.1. e6 ¸i muchiile s ¸ s multiple e7 . 2]. 5. e5 . de la punctul ce reprezint˘ nodul x pˆn˘ la punctul ce reprezint˘ nodul y. e6 = [3. unde V este o multime finit˘ ¸i nevid˘ (de ¸ as a elemente numite noduri) iar E ⊆ V × V \ {(x. x)). E). y ∈ V. Definitia 3. e6 . 1) are extremitatea initial˘ a a ¸ a 3 ¸i extremitatea final˘ 1. El contine bucla e3 . 6} ¸i E = {e1 . O reprezentare grafic˘ a lui ¸ a G se obtine reprezentˆnd nodurile sale prin puncte distincte (ˆn plan sau pe o alt˘ suprafat˘ dat˘). 2). e9 = [4. s Exemplul 3. e7 = [4. 4). Un graf (neorientat sau orientat) f˘r˘ bucle se nume¸te multigraf (neorientat. Fie G = (V. nici simplu.5. y) sau de forma (y. x)|x ∈ V } este o multime finit˘ (de elemente numite ¸ a arce). 5]. Graful orientat G = (V. y) prin segmente (de curb˘ continu˘) distincte neorientate.1. deci nu este nici multigraf. E).1. cu V = {1. e8 . (2.2. respectiv a a a a a a orientate. (3. e4 . e4 = [2. 1). s Observatia 3. Graful neorientat G = (V. a) Un graf neorientat simplu este o pereche G = (V.3. 4.

. . ¸ ın ¸ Exemplul 3.1. . cea mai utilizat˘ este matricea de adiacent˘. j ∈ {1. F ). vn } ¸i E = ¸ s ¸a a a {e1 . Fie G = (V. F ). .9.1. a) Subgraful indus (generat) de F ˆ G este subgraful G[F ] = (U.10. s a a s a) Spunem c˘ G1 este un subgraf al lui G2 ¸i not˘m G1 ⊆ G2 dac˘ V1 ⊆ V2 ¸i E1 ⊆ E2 .n definit˘ prin aij = num˘rul de muchii sau de arce ek ∈ E de la nodul vi la nodul vj (adic˘ muchii de forma a a ek = [vi . Subgraful indus (generat) de U ˆ G este subgraful G[U ] = (U. 4)} ¸ are reprezentarea din Figura 3.1.1. 1 3 4 5 Figura 3.3. . . Fie G = (V.TEMA 3.1. Fie G = (V.1. em }. . .4: Figura 3. 2 5 1 2 5 3 4 3 4 Figura 3.5: 3. E) un graf (orientat sau neorientat) ¸i F ⊆ E o colectie de muchii ¸ s ¸ sau de arce. respectiv arce de forma ek = (vi .4. unde U este multimea ın ¸ tuturor nodurilor din V ce sunt extremit˘¸i pentru cel putin o muchie sau un arc din F . subgraful generat de submultimea de ¸ noduri {1. iar graful partial generat de aceea¸i submultime de arce are ¸ s ¸ reprezentarea din Figura 3. Pentru graful neorientat din Exemplul 3.11. a ¸ a s Definitia 3. Dintre In a ın a aceste forme. . vj ].1. 5} are reprezentarea din Figura 3.2. E) un graf (neorientat sau orientat) unde V = {v1 . subgraful generat de submultimea de arce {(2. ∀i. 4. . E) un graf (neorientat sau orientat) ¸i U ⊆ V o submultime nevid˘ ¸ s ¸ a de noduri.1. Matricea de adiacent˘ asociat˘ grafului G este matricea A = (aij )i. ¸ at ın Definitia 3. . Fie G1 = (V1 . E2 ) dou˘ grafuri (ambele orientate sau ambele ¸ s a neorientate). . 3). F ). vj )).3: Pentru graful orientat din Exemplul 3. at ¸ b) Graful partial indus (generat) de F ˆ G este graful partial (V.1.2.1.j=1. a ¸a Definitia 3. (5.1. 3. unde F este ın colectia tuturor muchiilor sau arcelor din E ce au ambele extremit˘¸i ˆ U .1.1.2 Reprezentarea grafurilor ˆ continuare descriem cˆteva forme de reprezentare (memorare) a grafurilor ˆ informatic˘.3. GRAFURI 26 Definitia 3.5. n}.1. . a b) Spunem c˘ G1 este un graf partial al lui G2 dac˘ V1 = V2 ¸i E1 ⊆ E2 . E1 ) ¸i G2 = (V2 .

ın 27 b) Dac˘ graful orientat G = (V. . atunci matricea de incident˘ asociat˘ grafului G este a s a a ¸a a a matricea B = (bij ) i = 1. dac˘ (vi . n definit˘ prin j = 1. . . n definit˘ prin j = 1. vj ] ∈ E). . . . . . m ⎧ a a ⎨ 0. dac˘ ej este incident˘ cu vi spre exterior. GRAFURI Observatia 3. b) Dac˘ G este orientat ¸i f˘r˘ bucle. E) este simplu. . dac˘ ej nu este bucl˘ ¸i este incident˘ cu vi .1. ∀ j ∈ {1. vn } ¸i E = {e1 . a ∀ i ∈ {1. . ˆ caz contrar. atunci a aij = 1.1 este ¸a a ⎛ ⎞ 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 ⎟. m}. ⎜ ⎟ ⎝ 0 0 0 0 0 ⎠ 0 0 0 1 0 Observatia 3. j). m}. Matricea de adiacent˘ asociat˘ grafului neorientat din Exemplul 3. n}. . . a bij = ⎩ a −1. a bij = ⎩ a a 2. dac˘ ej este incident˘ cu vi spre interior.1. atunci ¸ a aij = 1. .TEMA 3. ¸ ¸a a Definitia 3. orice graf neorientat are matricea de adiacent˘ simetric˘ (aij = aji ∀ i.2. n}. em }. Fie G = (V. a 1.2. m ⎧ a a ⎨ 0. unde V = {v1 . ˆ caz contrar. E = ∅. . .2. ¸ s a) Dac˘ G este neorientat. . . a ∀ i ∈ {1. . a s a 0. . ∀ j ∈ {1. . . . dac˘ ej nu este incident˘ cu vi . atunci matricea de incident˘ asociat˘ grafului G este matricea a ¸a a a B = (bij ) i = 1.2.1.1. . ⎜ ⎟ ⎝ 0 1 0 3 0 0 ⎠ 0 0 2 0 0 0 iar matricea de adiacent˘ asociat˘ grafului orientat din Exemplul 3.2 este ¸a a ⎛ ⎞ 0 1 0 0 0 ⎜ 0 0 1 1 1 ⎟ ⎜ ⎟ A = ⎜ 1 1 0 0 0 ⎟. E) un graf.2. . a) Dac˘ graful neorientat G = (V. as a 1. a 0. ın Exemplul 3. dac˘ ej nu este incident˘ cu vi . E) este simplu. Evident. dac˘ ej este o bucl˘ incident˘ cu vi . . dac˘ vi ¸i vj sunt adiacente (adic˘ [vi .2. vj ) ∈ E.

E) un graf (neorientat sau orientat). 2}. 4. deseori se memoreaz˘ ¸i listele de predecesori directi.2.4. Pentru graful din Exemplul 3. L(2) = {1. unde at a ej = [x. a ¸a unde L(i) reprezint˘ lista de adiacent˘ a nodului i. a s Pentru graful din Exemplul 3.2. L(5) = {4}. Lista de predecesori directi a unui nod x este format˘ as ¸ ¸ a din toate nodurile y pentru care exist˘ arc de la y la x (y se nume¸te predecesor direct al lui x).5.TEMA 3. Pentru graful orientat din Exemplul 3.1. . y] (pentru muchii) sau ej = (x. O alt˘ form˘ frecvent utilizat˘ ˆ reprezentarea grafurilor simple este dat˘ de listele de adiacent˘ (memorate static sau dinamic). s . . O alt˘ reprezentare a grafului G este matricea T ce retine ˆ fiecare coloan˘ a extremit˘¸ile unei muchii sau arc.1. . Evident.2 este ¸a ⎛ ⎞ 1 0 0 0 −1 0 0 ⎜ −1 1 1 1 0 −1 0 ⎟ ⎜ ⎟ 0 1 1 0 ⎟. aceste liste sunt ¯ ¯ ¯ ¯ ¯ L(1) = {3}. fiind ¸i ¸ s s sinonime cu notiunile de vecin sau adiacent. j = 1.1 este ⎞ 1 0 0 0 0 0 0 0 0 2 1 0 0 0 0 0 ⎟ ⎟ 0 0 0 1 1 0 0 0 ⎟ ⎟. 1 0 0 0 0 1 1 1 ⎟ ⎟ 0 0 1 0 0 1 1 1 ⎠ 0 0 0 1 1 0 0 0 28 iar matricea de incident˘ a grafului orientat din Exemplul 3. 5}. .2. . L(2) = {3. . . L(4) = {2.1. listele de adiacent˘ sunt ¸a L(1) = {2}. Fie G = (V. L(4) = ∅.3. . vn } ¸i E = ¸ a ¸ ın a {e1 .2.2. ∀ j ∈ {1.1. . Matricea de incident˘ a ¸a ⎛ 1 ⎜ 1 ⎜ ⎜ 0 B=⎜ ⎜ 0 ⎜ ⎝ 0 0 grafului neorientat din Exemplul 3. 5}. Lista de adiacent˘ a unui nod x este format˘ ¸a ¸a a din toate nodurile y pentru care exist˘ muchie sau arc de la x la y (y se nume¸te succesor direct a s al lui x).2.2. m iar pentru graful din Exemplul 3.1. L(5) = {2}. Pentru grafurile orientate simple. Alegerea uneia sau alteia dintre formele de reprezentare a grafurilor descrise mai ¸ sus depinde de eficienta ¸i de u¸urinta implement˘rii operatiilor necesare de prelucrare a acestor ¸ s s ¸ a ¸ forme. adic˘ T = (tkj ) k = 1. E = ∅. pentru grafurile neorientate notiunile de succesor direct ¸i predecesor direct coincid. L(3) = {1. .2 matricea T este T = 1 2 2 2 3 3 5 2 3 4 5 1 2 4 . unde V = {v1 . . ¸ a a a ın a Observatia 3. B = ⎜ 0 −1 0 ⎜ ⎟ ⎝ 0 0 −1 0 0 0 −1 ⎠ 0 0 0 −1 0 0 1 s Observatia 3. em }. m}.1 matricea T este T = 1 1 2 2 3 3 4 4 4 2 4 2 5 6 6 5 5 5 . 3}. ¸ Observatia 3. deci de tipul problemei modelate prin grafuri ¸i de algoritmul de rezolvare utilizat. t2j = y. 2 definit˘ prin t1j = x. GRAFURI Exemplul 3. L(3) = {2}. .1. y) (pentru arce).

d(5) = 4. n}. n}. d− (4) = 2. atunci: a • gradul de ie¸ire (semigradul exterior) al lui x. d+ (4) = 0. Pentru graful neorientat din Exemplul 3. ∀ i ∈ {1. d(2) = 4. d(1) = 2. a • gradul (total al) lui x. GRAFURI 29 3. V = {v1 . .3. .n matricea de ¸ adiacenta a grafului G. a b) Dac˘ G este orientat. notat dG (x) = d(x). . Pentru graful orientat din Exemplul 3. atunci d+ (vi ) = a n j=1 aij .3. E) un graf ¸i x ∈ V un nod arbitrar fixat.1. .1. d(5) = 2. ¸˘ n a) Dac˘ G este neorientat. d(4) = 4. gradele nodurilor sunt: d+ (1) = 1. Dac˘ graful G este simplu. dac˘ G este orientat atunci a x∈V d+ (x) = x∈V d− (x) = m. Un nod x ∈ V cu dG (x) = 0 se nume¸te nod izolat. notat dG (x) = d(x). iar b(x) a a s este num˘rul de bucle e ∈ E ce sunt incidente cu x.2. atunci gradul lui x.1.j=1. E) un graf. . este d(x) = d+ (x) + d− (x). Atunci ¸ a ˆ In plus. d+ (2) = 3. Fie G = (V.1. vn }. Exemplul 3. gradele nodurilor sunt: d(1) = 2. d− (3) = 1. d− (2) = 2. notat d+ (x) = d+ (x). ∀ i ∈ {1. d− (vi ) = aji . atunci d(vi ) = aii + a j=1 aij . .3. este definit prin a d(x) = a(x) + 2 · b(x).3. d(3) = 3. . d(2) = 5. x∈V Propozitia 3.TEMA 3.2. Observatia 3. atunci aii = 0 ∀ i ¸i egalitatea de la punctul a) al ¸ a s n propozitiei anterioare devine d(vi ) = ¸ j=1 aij . reprezint˘ s a G num˘rul de arce e ∈ E incidente cu x spre exterior. reprezint˘ a G num˘rul de arce e ∈ E incidente cu x spre interior. n j=1 b) Dac˘ G este orientat. . . a • gradul de intrare (semigradul interior) al lui x. E) un graf. . d(3) = 2. d+ (5) = 1. s Definitia 3.3. d(4) = 2. d− (1) = 1.2. Fie G = (V. ¸ s a) Dac˘ G este neorientat. unde a(x) reprezint˘ num˘rul de muchii e ∈ E ce nu sunt bucle ¸i sunt incidente cu x.3. iar ¸ s un nod y ∈ V cu dG (y) = 1 se nume¸te nod terminal. d+ (3) = 2. . d(x) = 2m. notat d− (x) = d− (x). E) un graf avˆnd dimensiunea m. . d(6) = 2. Fie G = (V. Fie G = (V. ¸i fie A = (aij )i.3 Grade Definitia 3. d− (5) = 1. .1.1. s Propozitia 3.1.

. e2 . e2 . respectiv extremitatea final˘ a drumului. deci ¸i notiunile ¸ ¸ ¸s s ¸ s de ciclu ¸i de circuit coincid. e2 . e2 . . vk . vi+1 ] pentru un graf neorientat. . . unde v1 .4. v2 . [1. respectiv deschis ˆ caz contrar.3. ek ∈ E (muchii sau arce). . vk . . GRAFURI 30 3.1. v2 . Pentru grafurile neorientate sau orientate simple orice lant [v1 . . . . Nodurile v1 ¸i vk+1 se numesc extremit˘¸ile lantului. nodurile s a s ¸ at sale sunt diferite dou˘ cˆte dou˘. Pentru graful neorientat din Exemplul 3.1. e1 . .2. a at ın c) Un lant se nume¸te simplu dac˘ muchiile sau arcele sale sunt diferite dou˘ cˆte dou˘ (con¸ s a a a a siderˆnd diferite ¸i muchiile sau arcele multiple aflate pe pozitii diferite ˆn E). Pentru grafurile neorientate notiunile de lant ¸i de drum coincid.4. . . . v2 . . ek . e2 . vi ) pentru un s at ¸ graf orientat). Exemplul 3. e9 . ı s a a s Observatia 3. vk . . e1 . k} ¸ a ¸ a s a a muchia sau arcul ei are extremitatea initial˘ vi ¸i extremitatea final˘ vi+1 (adic˘ ei = (vi . . . cu proprietatea a at s a c˘ pentru orice i ∈ {1. ¸ ¸ s Observatia 3. . . v2 . e4 . ek . pe scurt.4.1. . respectiv ei = (vi . vk+1 ). ¸ s ¸ b) Un lant se nume¸te ˆ ¸ s ınchis dac˘ are extremit˘¸ile egale. .4. . 4] . k} ei este o muchie sau un arc avˆnd extremit˘¸ile vi ¸i vi+1 (adic˘ a ei = [vi . . . doar prin nodurile succesive [v1 . cu exceptia extremit˘¸ilor. vk+1 ) este bine determinat de nodurile sale (deoarece muchia sau a arcul ei nu poate fi decˆt singura muchie sau singurul arc de la vi la vi+1 . deci poate fi notat. Fie G = (V. . vi+1 ) sau ei = (vi+1 . a s ¸ ı ¸ s a a a a d) Un lant deschis se nume¸te elementar dac˘ nodurile sale sunt diferite dou˘ cˆte dou˘. vk+1 ] cu proprietatea c˘ pentru orice i ∈ {1. . . Un astfel de drum se noteaz˘ ¸i cu as (v1 . . vk+1 ].TEMA 3. 2. vk se numesc noduri intermediare. s ¸ a a nodurile v1 ¸i vk+1 numindu-se extremitatea initial˘.4. v2 . ek . g) Un circuit este un drum ˆnchis ¸i simplu de lungime nenul˘ (adic˘ un drum ce este ¸i ciclu). vi+1 ) pentru graf orientat). vk+1 ] ¸ ¸ sau drum (v1 . . v2 . e1 . e1 . vk . v2 . e1 . E) un graf. . vk . . . . .4 Conexitate Definitia 3. v2 . 4. k ∈ N. vk+1 ]. . .1. Orice lant elementar este ¸i simplu. . . 1. respectiv (v1 . Num˘rul k de muchii sau arce (nu neap˘rat distincte) ale a a lantului se nume¸te lungimea lantului. vk+1 ∈ V (noduri). Observatia 3.1. 5. vk+1 ). . . a a a e) Un ciclu este un lant ˆ ¸ ınchis ¸i simplu de lungime nenul˘ (adic˘ cu cel putin o muchie sau un s a a ¸ arc). ¸ a) Un lant ˆ graful G este o succesiune alternant˘ ¸ ın a [v1 . vk . ek . iar nodurile v2 . e2 . . . e1 . . Un lant ˆ ¸ ınchis se nume¸te elementar dac˘ este simplu ¸i. . ek . vk . . f ) Un drum este un lant [v1 . e2 . ∀ i). . e2 . . e1 . .

Orice nod izolat x genereaz˘ o component˘ conex˘ ¸i o component˘ tare-conex˘. [1. G[Vk ] componentele conexe (diferite) ale unui graf G = (V. . ¸ ¸ ¸ a Atunci {V1 . ¸ ¸ a ¸ a de lungime 5. e4 . neelementar (contine de dou˘ ori 1). . ˆ acela¸i graf.2. . (1. [3. Vk } este o partitie a multimii V (adic˘ Vi = ∅ ∀ i. 1. Deoarece pentru orice nod x exist˘ lantul [x] ¸i drumul (x) de lungimi zero. 4. y exist˘ cel s a a a putin un drum de la x la y (deci. 5. 2. . 5) nu este arc. . ¸ s ¸ Observatia 3.4. 2. . xp }] nu mai este tare-conex. 2.4.4. E).6. Un graf este conex dac˘ ¸i numai dac˘ are o singur˘ component˘ conex˘. In s s s este un ciclu elementar ce nu este circuit (deoarece (4. Graful orientat din Exemplul 3. . . 1) este un circuit (¸i ciclu) elementar. a Propozitia 3. a) Un graf (neorientat sau orientat) se nume¸te conex dac˘ pentru orice dou˘ ¸ s a a noduri distincte x. Vi ∩ Vj = ∅ ∀ i = j. deoarece prin eliminarea tuturor portiunilor dintre noduri egale dintr-un lant sau ¸ ¸ drum se obtine un lant sau un drum elementar avˆnd acelea¸i extremit˘¸i. ci (5. .3. 2. x2 . 2) nu este arc.4). respectiv ”drum elemen¸ s ¸ tar”. Observatia 3. 5] este un lant ce nu este drum ¸ (deoarece (4. e3 . 4. 5. Vr } este de asemenea o partitie a multimii V . e2 . Orice graf tare-conex este ¸i conex (deoarece orice drum este ¸i lant). rezult˘ c˘ ˆ definitia ¸ ¸ a s at a a ın ¸ anterioar˘ putem ˆ a ınlocui termenii de ”lant” ¸i ”drum” cu ”lant elementar”. deoarece nu s a s a exist˘ drum de la nodul 4 la nodul 1 (de¸i exist˘ drum de la nodul 1 la nodul 4!).TEMA 3. iar (3. schimbˆnd ordinea lui x ¸i y. b) O component˘ tare-conex˘ a unui graf orientat G = (V. . b) Fie G[V1 ]. ∅). . ¸ a a as a a ambele avˆnd forma G[{x}] = ({x}.1. 4) este un drum (¸i lant) deschis elementar s ¸ ˆ acela¸i graf. . . ci (2. x2 . . 2. .2 este conex. Observatia 3. deoarece orice component˘ tare-conex˘ este inclus˘ ˆ a a a ıntr-o component˘ conex˘ a a (conform definitiei anterioare ¸i Observatiei 3. 1. a ¸ ¸ b) Un graf orientat se nume¸te tare-conex dac˘ pentru orice dou˘ noduri distincte x. de lungime 7. a ¸ a s s Observatia 3. . E) ¸ a a este un subgraf G[U ] generat de o submultime U ⊆ V de noduri cu proprietatea c˘ G[U ] este ¸ a conex ¸i maximal cu aceast˘ proprietate (ˆn raport cu incluziunea). . .5. ¸ ¸ Atunci {V1 . V1 ∪ · · · ∪ Vk = V ).4. 5. 4)). . a) O component˘ conex˘ a unui graf (orientat sau neorientat) G = (V. adic˘ pentru orice noduri x1 . Exemplul 3. dar nu este tare-conex. Num˘rul de a s a a a a a componente tare-conexe ale unui graf orientat este mai mare sau egal decˆt num˘rul de componente a a conexe ale acelui graf. rezult˘ ¸ a ¸ s a c˘ ˆ definitia anterioar˘ putem renunta la conditiile ca nodurile x ¸i y s˘ fie distincte.4.2. y exist˘ cel putin un lant de la x la y. iar [2.1 nu este conex. GRAFURI 31 este un lant (drum) deschis.4. Orice graf ¸ s s ¸ cu un singur nod verific˘ definitia anterioar˘. Graful neorientat din Exemplul 3. Definitia 3. e9 . 5.4. G[Vr ] componentele tare-conexe (diferite) ale unui graf orientat G = (V. xp ∈ V \U subgraful ı a G[U ∪ {x1 . 4. exist˘ cel putin un drum ¸i de ¸ a s a ¸ s la y la x). ¸ a Pentru graful orientat simplu din Exemplul 3. . e8 . a) Fie G[V1 ]. adic˘ pentru orice nod s a ı a x ∈ V \ U subgraful G[U ∪ {x}] nu mai este conex. E). 4. e1 .1. deoarece nu exist˘ lanturi ˆ a ¸ ıntre nodurile 1 ¸i 3.1. . a ın ¸ a ¸ ¸ s a De asemenea. nesimplu (contine de dou˘ ori e2 ). . . Un graf ¸ as a a a a orientat este tare-conex dac˘ ¸i numai dac˘ are o singur˘ component˘ tare-conex˘. 1] este un ciclu (circuit) simplu ¸i neelementar In s s (contine de dou˘ ori 2).1. E) este un subgraf G[U ] generat a a de o multime U ⊆ V de noduri cu proprietatea c˘ G[U ] este tare-conex ¸i maximal cu aceast˘ ¸ a s a proprietate (ˆn raport cu incluziunea). 2] (¸i simplu) de lungime 4.4. 3. e7 . 4)).4. deci este ¸i conex ¸i tare-conex.4.2. Definitia 3.7. . .

2 nu este arbore (deoarece are cicluri).4. Graful s˘u partial reprezentat ˆ Figura 3. 3}. precum ¸i pentru determinarea at s at s componentelor conexe ¸i tare-conexe ale unui graf. a a ¸ a Observatia 3.2 arcul (5. 6}.1 nu este p˘dure (deoarece are cicluri).1: 1 5 2 5 3 4 3 4 Figura 3. Graful orientat din Exemplul 3.4.4. De exemplu.2.1. ¸ Observatia 3. 4.4.4. deci acel graf are 2 componente conexe. ¸ Algoritmi pentru testarea conexit˘¸ii ¸i tare-conexit˘¸ii unui graf.4. ¸ s ¸ a pentru graful din Exemplul 3.4. Componentele conexe ale unei p˘duri sunt arbori. Componentele conexe ale grafului neorientat din Exemplul 3.1. Submultimile de muchii sau arce ale componentelor conexe ale unui graf formeaz˘ de ¸ ¸ a asemenea o partitie a multimii de muchii sau arce a grafului (deoarece pentru orice muchie e = [x.10.2 sunt generate de submultimile de ¸ s noduri V1 = {1. E) este un graf partial al lui G ce este arbore (adic˘ ¸ ¸ a un arbore T = (V. Doi arbori partiali ¸ ai s˘i sunt reprezentati ˆ Figura 3. GRAFURI 32 Exemplul 3. s ¸ ın ¸ a Definitia 3.3. F ) cu F ⊆ E). at s a ¸ ın a 3.1.2: Propriet˘¸ile teoretice ¸i algoritmice de baz˘ ale arborilor vor fi evidentiate ˆ capitolul urm˘tor. ¸ a) Un arbore este un graf conex ¸i f˘r˘ cicluri. 4) nu apartine nici-unei componente tare-conexe.1 sunt generate de submultimile de noduri V1 = {1. deci nici a arbore. 2. a ¸ ın 1 e1 2 3 e2 4 e4 5 e5 6 1 2 Figura 3. Exemplul 3.8. ¸ s Componentele tare-conexe ale grafului orientat din Exemplul 3. deci acel graf are 3 componente tare-conexe.1.4.4.4. y] ¸ ¸ sau arc e = (x. y) nodurile x ¸i y se afl˘ ˆ s a ıntr-o aceea¸i component˘ conex˘ ¸i aceast˘ component˘ s a as a a va contine ¸i pe e). a ¸ s ın a . Arborii ¸i p˘durile sunt grafuri simple (deoarece orice bucl˘ este un ciclu ¸i orice s a a s dou˘ muchii sau arce multiple formeaz˘ un ciclu). s a a b) O p˘dure este un graf f˘r˘ cicluri.4.1 este o p˘dure (avˆnd dou˘ componente conexe a ¸ ın a a a arbori). Graful neorientat din Exemplul 3.1. 5} ¸i V2 = {3.9.TEMA 3.5 Parcurgerea grafurilor Prin parcurgerea unui graf se ˆ ¸elege o metod˘ sistematic˘ de vizitare succesiv˘ a nodurilor sale (ˆ ınt a a a ın vederea prelucr˘rii informatiilor ata¸ate ˆ structura de date modelat˘ prin graful dat). vor fi prezentati ˆ sectiunile urm˘toare. a a a c) Un arbore partial al unui graf G = (V. 2.4. V2 = {4} ¸i V3 = {5}. Observatia 3. Afirmatia nu mai este valabil˘ pentru componentele tare-conexe.

numit arbore DF. numit ¸i r˘d˘cin˘ a acestei parcurgeri.5. nodul vi redevine nod curent ¸i se continu˘ procedeul de parcurgere pornind din acest nod.TEMA 3. Parcurgerea ˆ adˆncime ¸ s ın a (DF. E) un graf ¸i x ∈ V un nod arbitrar fixat. a ı Observatia 3. atunci se revine la nodul predecesor a ¸ ¸ s a direct vi (cel din care a fost vizitat). Arborele a a ¸ a a DF corespunz˘tor acestei parcurgeri este reprezentat ˆ Figura 3. parcurgerea a ın s 3 2 1 3 4 5 2 1 4 5 Figura 3.5. iar arborele DF corespunz˘tor este reprezentat ˆ Figura 3.2.5.5. nici predecesor direct (deci este a ¸ ¸ chiar rad˘cina x). 1. nodul vj devine nod curent ¸i se continu˘ procedeul de parcurgere pornind din acest nod. a ın Figura 3. unul recursiv ¸i altul nerecursiv. 5. 4.1. 2. . Pentru acela¸i graf.1. 1. 3. acesta devine nod curent. 4. 5 (considerˆnd c˘ ordinea dintre succesorii directi ai fiec˘rui nod este ordinea cresc˘toare).5. const˘ s a a a a ˆ ın: • se vizitez˘ nodul x. atunci se viziteaz˘ primul astfel de nod vj . atunci parcurgerea se ˆncheie.1: DF pornind din nodul 3 este DF (3) : 3. pentru implementarea a ın s ın a parcurgerii ˆ adˆncime. Exemplul 3.2: Prezent˘m ˆ continuare doi algoritmi.2. GRAFURI 33 Definitia 3.1. parcurgerea ˆ adˆncime pornind din nodul 2 este ın a DF (2) : 2.5. • dac˘ nodul curent nu mai are nici succesori directi nevizitati.1.5. considerˆnd cˆte o muchie sau un arc de la fiecare nod ¸ a a a a ¸ curent vi la primul s˘u succesor direct nevizitat vj (care va deveni urm˘torul nod curent) se obtine un arbore. ”depth first”) a grafului G pornind din nodul x. a • dac˘ nodul curent vi are succesori directi (adic˘ noduri vj pentru care exist˘ muchie sau arc de a ¸ a a ¸ a s la vi la vj ) nevizitati. Pentru parcurgerea DF.1. a • dac˘ nodul curent vj nu mai are succesori directi nevizitati. Fie G = (V. Pentru graful din Exemplul 3.

ˆ caz contrar. n} ¸i matricea de adiacent˘ A = (aij )i. . ifstream f("graf2. dac˘ i = x (r˘d˘cina).TEMA 3. // doar pt.j++) A[i][j]=0.//se continu˘ parcurgerea DF din nodul y } } }.i++) for(j=1. recursiv #include<conio.h> //parcurgerea DF a unui graf. grafuri NEORIENTATE } f. Fie x ∈ V un nod arbitrar fixat.k++) { f>>i>>j. } void viziteaza(int x) // vizitarea nodului x { cout<<x<<" ".n . .j<=n. recursiv).h> #define nmax 50 // nr.m. . Fie graful G = (V. // if (j!=i) A[j][i]++. de exemplu se afi¸eaz˘ x a a s a V IZ[x] ← 1. dac˘ i = x.dat" { int i.close(). Programul C++ corespunz˘tor. for(k=1.dat"). //se viziteaz˘ x.k<=m. GRAFURI 34 Algoritmul 3. a DF recursiv(y). f>>n>>m. a pentru orice nod i din parcurgerea DF . a a a predecesorul direct al lui i. //x a fost vizitat pentru y = 1.1 (parcurgerea DF. ın Pentru memorarea arborelui DF (x) vom utiliza un vector T AT A avˆnd semnificatia a ¸ T AT A[i] = 0. . .A[nmax][nmax].VIZ[nmax].5.y++) .k.j. . dac˘ nodul i a fost vizitat. E) avˆnd multimea de noduri a ¸ V = {1. a ∀ i ∈ {1. 0. Descrierea ˆ pseudocod a algoritmului recursiv de parcurgere ın ˆ adˆncime pornind din nodul x are forma ın a DF recursiv(x) : { viziteaz˘(x).h> #include<fstream. .TATA[nmax]. A[i][j]++. for(y=1. } void DF_recursiv(int x) // parcurgerea DF pornind din nodul x { int y. void citire_graf() // citirea grafului din fisierul "graf2. cu citirea grafului dintr-un fi¸ier (avˆnd pe prima linie numerele a s a n de noduri ¸i m de muchii sau arce ale grafului ¸i pe liniile urm˘toare perechile de noduri ce formeaz˘ s s a a aceste muchii sau arce) ¸i afi¸area parcurgerii DF (x) ¸i a vectorului T AT A (ce memoreaz˘ arborele s s s a DF (x)) este: #include<iostream.i<=n. Pentru s ¸a implementarea parcurgerii DF (x) vom utiliza un vector V IZ avˆnd semnificatia a ¸ V IZ[i] = 1. viziteaza(x). n { dac˘ (axy ≥ 1) ¸i (V IZ[y] = 0) //y este primul succesor direct a s // nevizitat al lui x { T AT A[y] ← x.y<=n. maxim de noduri int n. . for(i=1.j=1. VIZ[x]=1. n}.

varf ← 1. de exemplu se afi¸eaz˘ x a a s a V IZ[x] ← 1. nerecursiv). Pentru graful din Exemplul 3.2.//i este nodul din vˆrful stivei a j ← U RM [i] + 1. ce contine nodurile vizitate ¸i ˆ curs de s a a a ¸ s ın a prelucrare. 2) 5 4 //arcul (5. dac˘ exist˘ a a s cˆt timp (aij = 0) ¸i (j ≤ n) j ← j + 1.2.i++) { VIZ[i]=0. E) un graf avˆnd multimea a ¸ de noduri V = {1.5. citire_graf().//se viziteaz˘ x. Algoritmul 3. a dac˘ (j > n) //nodul i nu mai are succesori directi nevizitati a ¸ ¸ { varf ← varf − 1.i<=n. a ¸i o structur˘ de tip stiv˘ S. un vector U RM cu semnificatia s ¸ ın ¸ U RM [i] = urm˘torul succesor direct al nodului i. n} ¸i matricea de adiacent˘ A = (aij )i.2 (parcurgerea DF.i++) cout<<TATA[i]<<" ". clrscr().i. DF_recursiv(y). for(i=1. 2) 2 3 //arcul (2. . } cout<<"Nodul de pornire: x=". for (i=1. TATA[i]=0. Pentru implementarea nerecursiv˘ a parcurgerii DF (x) vom utiliza vectorii V IZ ¸i T AT A cu a s acelea¸i semnificatii ca ˆ algoritmul anterior. . Fie din nou G = (V. S[varf ] ← x. } 35 Exemplul 3. 3) 2 4 //arcul (2. 5) 3 1 //arcul (3. adic˘ de vizitare a tuturor succesorilor. Fie x ∈ V un nod arbitrar s ¸a fixat.//j va fi urm˘torul succesor direct nevizitat a //al lui i.//x a fost vizitat T AT A[x] ← 0. } } void main() { int x. GRAFURI if ((A[x][y]>=1)&&(VIZ[y]==0)) { TATA[y]=x. cout<<"Parcurgerea DF: ".TEMA 3. . getch(). //s-a ˆ ıncheiat prelucrarea lui i ¸i s //ˆ elimin˘m din stiv˘ ıl a a } .//nodul x se introduce ˆ vˆrful stivei ın a cˆt timp (varf > 0)//stiva este nevid˘ a a { i ← S[varf ].5. fi¸ierul de intrare ”graf2. 1) 3 2 //arcul (3. DF_recursiv(x).dat” folosit la citirea s grafului ˆ programul anterior contine datele: ın ¸ 5 7 //5 noduri ¸i 7 arce s 1 2 //arcul (1. cout<<"\nArborele DF este dat de vectorul TATA: ". memorat˘ ca un vector. Descrierea ˆ pseudocod a algoritmului are forma ın DF(x) : { viziteaz˘(x). . 4) 2 5 //arcul (2. 4).n .i<=n.cin>>x.j=1.1.

. deci x ¸i y sunt ˆ aceea¸i component˘ tare-conex˘ a lui G . 36 Observatia 3. atunci pentru orice nod x ∈ V componenta ¸ a tare-conex˘ a nodului x este (indus˘ de) multimea nodurilor y vizitate prin parcurgerea DF (x) a a a ¸ grafului G cu proprietatea c˘ y este vizitat ¸i ˆ parcurgerea DF (x) a grafului a s ın G = (V. . n} ¸i fie A = (aij )i. . Fie din nou G = (V. t Observatia 3. . j) ∈ E}. .//se viziteaz˘ j a a V IZ[j] ← 1.//j a fost vizitat T AT A[j] ← i.5.2. graful G s a a a este conex dac˘ ¸i numai dac˘ valoarea final˘ a variabilei nrc este egal˘ cu 1. atunci pentru orice nod x ∈ V componenta ¸ a conex˘ a nodului x este (indus˘ de) chiar multimea nodurilor vizitate prin parcurgerea DF (x).1 sau cea din Algoritmul 3. GRAFURI altfel { U RM [i] ← j. E) un graf neori¸a s entat.3. . unde E = {(j. ¸ ¸ a Algoritmul 3. pentru i = 1. . .n matricea de adiacent˘ a grafului G. . as a a a Descrierea ˆ pseudocod a algoritmului are forma ın componente conexe : { nrc ← 0. Pentru determinarea componentelor conexe ale grafului G vom utiliza un vector CC cu semnificatia ¸ CC[i] = num˘rul componentei conexe ˆ care se afl˘ nodul i.3 (determinarea componentelor conexe).5. n CC[i] ← 0. vk . E).5. Dac˘ G = (V. . E) este un graf neorientat. E) este un graf orientat.TEMA 3. n { dac˘ (CC[i] = 0) //nodul i nu a fost vizitat a { nrc ← nrc + 1. v1 .4.5. ad˘ugˆnd instructiunea ¸ a a ¸ CC[i] ← nrc ˆ functia viziteaz˘(i). . ˆ ınlocuind conditia ”axy ≥ 1” din functia DF recursiv(x) cu ”axy ≥ 1 sau ¸ ¸ ¸ s ın ayx ≥ 1”. n} ¸i o variabil˘ nrc ce reprezint˘ num˘rul de componente conexe.5. ın numit transpusul (simetricul) lui G. nu mai exist˘ noduri neprelucrate. //se introduce j ˆ vˆrful stivei ın a } } }//stiva este vid˘. Evident. . S[varf ] ← j. respectiv conditia ”aij = 0” din functia DF(x) cu ”aij = 0 ¸i aji = 0” (deoarece ˆ determinarea componentelor conexe nu se ¸ine cont de orientarea arcelor).j=1. //nodurile din parcurgerea DF (i) // vor forma o nou˘ component˘ conex˘ a a a DF (i). . a ın a ∀ i ∈ {1. . v1 . Algoritmul anterior poate fi utilizat ¸i pentru determinarea componentelor conexe ¸ s ¸ ale unui graf orientat.5. unde functia DF(i) este cea din Algoritmul 3.2. ın ¸ a Observatia 3. varf ← varf + 1. a a //parcurgerea este ˆ ıncheiat˘.//j este urm˘torul succesor direct al lui i a dac˘ (V IZ[j] = 0) //j nu a fost vizitat a { viziteaz˘(j). i)|(i. } } }. a a ¸ Pe baza acestei observatii obtinem urm˘torul algoritm. vk . orice drum (y. Dac˘ G = (V. x) ˆ graful G corespunde ın s ın s a a drumului (x. pentru i = 1. y) ˆ graful G. . Evident. . V = {1. a }.

1 (considerˆnd din nou ordinea dintre succesorii directi ai fiec˘rui nod ca fiind ordinea cresc˘toare). numit arbore BF.5. Astfel. parcurgerea ˆ l˘¸ime pornind din nodul 2 este ın at BF (2) : 2.3. a • se viziteaz˘ apoi succesorii directi nevizitati ai acestuia (diferiti de x). iar arborele BF corespunz˘tor este reprezentat ˆ Figura 3.4: . iar conditia ”axy ≥ 1” cu ”ayx ≥ 1” ˆ functiile DF(x). a ın Figura 3.d. considerat nod de nivelul zero. deci pentru ¸a ¸a ınlocuind parcurgerea DF (x) a grafului G putem utiliza tot matricea de adiacent˘ A a grafului dat G..5. deci ¸i pentru verificarea tare-conexit˘¸ii grafului.5. ı a ¸ ¸ Observatia 3. Analog parcurgerii DF.5.5. Pentru acela¸i graf. • se viziteaz˘ apoi. considerˆnd cˆte o muchie sau un arc de la fiecare nod ¸ a a curent v al parcurgerii BF la fiecare din nodurile nevizitate (de pe urm˘torul nivel) pentru care v a este predecesorul direct.2. 4. respectiv ¸ s DF recursiv(x). s at Definitia 3. considerati noduri de nivelul a a ¸ ¸ ¸ 2.3: parcurgerea BF pornind din nodul 3 este BF (3) : 3.TEMA 3.4. ¸.5. succesorii directi nevizitati ai acestora. 2. const˘ ˆ a ın: • se vizitez˘ nodul x. 5. GRAFURI 37 dac˘ ¸i numai dac˘ exist˘ un drum de la x la y ˆ G ¸i un drum de la x la y ˆ G.2. 3. Parcurgerea ˆ l˘¸ime ¸ s ın at (BF. adic˘ y este vizitat as a a ın s ın a prin parcurgerea DF (x) atˆt ˆ G cˆt ¸i ˆ G. a ın s 2 3 3 4 5 1 2 1 4 5 Figura 3. pe rˆnd. Fie G = (V.5. ¸ Exemplul 3. s • parcurgerea se ˆncheie cˆnd nici-un nod de pe un nivel nu mai are succesori directi nevizitati. ˆ ¸ ın ¸ conditia ”aij = 0” cu ”aji = 0”. considerati noduri de a ¸ ¸ ¸ ¸ nivelul 1.a. a ın a s ın ¸a Matricea de adiacent˘ a grafului G este transpusa matricei de adiacent˘ a grafului G. numit ¸i r˘d˘cin˘ s a a a a acestei parcurgeri. 4.5. parcurgerea pe nivele) a grafului G pornind din nodul x. 1. 5.1.”breadth first”. a ¸ a a Arborele BF corespunz˘tor acestei parcurgeri este reprezentat ˆ Figura 3. E) un graf ¸i x ∈ V un nod arbitrar fixat.m. algoritmul DF poate fi utilizat ¸i pentru determinarea componentelor tare-conexe. se obtine un arbore.3. Pentru graful din Exemplul 3.

S[coada] ← j.5.5. . obtinem urm˘toarea descriere ˆ pseu¸a ¸ a ın docod a algoritmului de parcurgere ˆ l˘¸ime ın at BF(x) : { viziteaz˘(x).4 ¸i algoritmii corespunz˘tori r˘mˆn valabile dac˘ ¸ ¸ s s a a a a ˆ ınlocuim parcurgerea DF cu parcurgerea BF.2.5. dac˘ (V IZ[j] = 0) a { viziteaz˘ (j). cˆt timp (varf ≤ coada) a { i ← S[varf ]. s a a Aceasta fiind singura modificare fat˘ de Algoritmul 3. . U RM ¸i S avˆnd acelea¸i semnificatii s a s ¸ ca la parcurgerea DF (x) (Algoritmul 3. coada ← 1. . GRAFURI 38 Algoritmul 3. Matricea drumurilor asociat˘ a ⎛ 1 ⎜ 1 ⎜ ⎜ 0 D=⎜ ⎜ 1 ⎜ ⎝ 1 0 grafului neorientat din Exemplul 3. Fie x ∈ V un nod arbitrar fixat. . T AT A[x] ← 0. . dac˘ ∃ μ = (vi . s cˆt timp (aij = 0) ¸i (j ≤ n) j ← j + 1. E) un graf (neorientat sau orientat). Fie G = (V. .n . j ← U RM [i] + 1.6 Algoritmul Roy-Warshall Definitia 3. varf ← 1. a dac˘ (j > n) a { varf ← varf + 1. Pentru imples ¸a mentarea parcurgerii BF (x) vom utiliza vectorii V IZ. } } } }. ın unde l(μ) reprezint˘ lungimea drumului μ.6. ˆ caz contrar. Observatia 3. .4 (parcurgerea BF). coada ← coada + 1. a Exemplul 3. 3. vj ) drum cu l(μ) > 0. . . Fie graful G = (V. a V IZ[j] ← 1.1. E) avˆnd multimea de noduri V = a ¸ {1. cu deosebirea c˘ vectorul S al nodurilor vizitate ¸i ˆ a s ın curs de prelucrare este organizat ¸i utilizat acum ca o structur˘ de tip coad˘.3 ¸i 3. Observatiile 3.5. .2).TEMA 3. T AT A.5.j=1. T AT A[j] ← i. n} ¸i matricea de adiacent˘ A = (aij )i.6. 1 0 1 1 0 ⎟ ⎟ 1 0 1 1 0 ⎠ 0 1 0 0 1 .j=1. . unde V = {v1 .n definit˘ prin a dij = 1.1 este ⎞ 1 0 1 1 0 1 0 1 1 0 ⎟ ⎟ 0 1 0 0 1 ⎟ ⎟.1. Ma¸ a tricea drumurilor asociat˘ grafului G este matricea D = (dij )i. 3.6. vn }.2.5. a 0. } altfel { U RM [i] ← j. a V IZ[x] ← 1.1. .//nodurile se adaug˘ la S pe pozitia ”coada” a ¸ //¸i se elimin˘ de pe pozitia ”varf ” s a ¸ S[coada] ← x.5.

vk }. n}. . μ2 = (vk .6. .2 este ⎞ 1 1 1 1 1 1 ⎟ ⎟ 1 1 1 ⎟. vj ) drum cu l(μ) > 0. vk }. s ¸ Presupunem acum egalitatea (3. definitia operatiilor ∨ ¸i · ¸i ipoteza de inductie avem echivalentele: ¸ ¸ s s ¸ ¸ dij = 1 ⇔ dij (k) (k−1) = 1 sau dik (k−1) = dkj (k−1) = 1 ⇔ ∃ μ = (vi . a 0. vj ) ∈ E. . deci obtinem egalitatea (3. ˆ caz contrar ın (din definitia matricei de adiacent˘). j ∈ {1. I(μ) ⊆ {v1 . iar {v1 . vk ∈ I(μ ) . . . l(μ2 ) > 0. I(μ) ⊆ {v1 . . vk−1 } ⇔ ∃ μ = (vi . . .1)) ¸i aij = (0) 1. . . . a a ¸a s Algoritmul 3.n matricea sa de adiacent˘ (avˆnd toate elementele 0 sau 1). E) un graf simplu cu V = {v1 . vj ) drum cu ¸ ¸a as a l(μ) > 0 ¸i I(μ) = ∅. . ¸ a Observatia 3. Conform Observatiei 3. . . . Folosind (3.6.6. pentru i = j putem ˆ ¸ ¸ ınlocui termenul de ”drum” cu ”drum elementar” ˆ definitia matricei drumurilor. Vom demonstra prin inductie dup˘ k ∈ {0. .3). . . ⎟ 0 0 0 ⎠ 0 1 0 39 Observatia 3. I(μ) reprezint˘ multimea nodurilor intermediare ale drua a ¸ a ¸ a ¸ mului μ.1 (Roy-Warshall). .TEMA 3. .1. . . . . (3. . . I(μ ) ⊆ {v1 . . . . . . . . ın ¸ Urm˘torul algoritm determin˘ matricea drumurilor unui graf pornind de la matricea de adiacent˘. . .6. vk ∈ I(μ) sau ∃ μ = (vi . . I(μ1 ). vj ) drumuri cu l(μ1 ). GRAFURI iar matricea drumurilor asociat˘ grafului orientat a ⎛ 1 1 ⎜ 1 1 ⎜ D=⎜ 1 1 ⎜ ⎝ 0 0 0 0 din Exemplul 3. .1) ∨ (k−1) (k−1) dik dkj .j=1. .1. . . iar (vi . . . . . . k ∈ {0.6. dac˘ ∃ μ = (vi . . In contextul Algoritmului Roy-Warshall. Demonstratie. dac˘ (vi . deci pentru k = 0 aceast˘ multime este ∅. i. n} c˘ pentru orice i. vn } ¸i fie A = ¸a a a (aij )i. . . n} ¸ ¸ a a avem dij = (k) s 1.2). . Se calculeaz˘ matricele D(k) = (dij )i. vk }.6. vj ) ∈ E dac˘ ¸i numai dac˘ ∃ μ = (vi . ultima matrice calculat˘ este chiar matricea drumurilor asociat˘ grafului G. orice graf neorientat are matricea drumurilor simetric˘. . 1 ≤ i ≤ k}. vk−1 } sau ∃ μ1 = (vi . . vk . = (k−1) dij ∀k.3) unde l(μ) reprezint˘ lungimea drumului μ. ˆ caz contrar. . . .6. . . . .3) adev˘rat˘ pentru k − 1 (1 ≤ k ≤ n) ¸i o demonstr˘m pentru a a s a k.6. 1. . (k) dij (k) (3. . .j=1. .6.5. . ¸ ¸ ˆ Teorema 3.1 (de corectitudine a Algoritmului Roy-Warshall). .6. 1. 0 ∨ 1 = 1 ∨ 0 = 1 ∨ 1 = 1 (operatia de disjunctie. I(μ2 ) ⊆ {v1 . . Pentru k = 0 avem s dij = aij (conform (3.2.n . adic˘ a a a D(n) = D. ın (3. vj ) cu l(μ ) > 0. . Fie G = (V. . . n}.2) unde 0 ∨ 0 = 0. . .6. vk } reprezint˘ multimea {vi |. vj ) drum cu l(μ) > 0 ¸i I(μ) ⊆ {v1 . a 0.4. . definite prin D(0) = A. vk ). . . j ∈ {1. ”sau”). Evident. . . vj ) cu l(μ) > 0. .

ı. prin aplicarea Algoritmului Roy-Warshall obtinem ¸ matricele: ⎛ ⎞ 0 1 0 0 0 ⎜ 0 0 1 1 1 ⎟ ⎜ ⎟ (0) D = A = ⎜ 1 1 0 0 0 ⎟ (matricea de adiacent˘). .1 obtinem c˘ s ¸ ¸ a dij = dij . .6. ∃n0 ∈ N a. . . . fiind ˆ ¸ din (3. n}). . μ2 sunt portiunile din μ dintre vi ¸i prima ¸ a ıntˆ s ¸ s aparitie a lui vk ˆ I(μ ). D(2) = ⎜ ⎜ ⎟ ⎝ ⎠ 0 0 1 0 0 1 0 1 0 0 1 1 1 0 0 1 1 1 0 1 1 1 1 0 0 ⎞ ⎟ ⎟ ⎟ ⎟ ⎠ (deoarece. . adic˘ egalitatea din enunt.6. . . a ∀ i. μ1 . . 0. pentru orice functie f : N → N. . ∃r > 0. ⎟ ⎠ ⎜ ⎜ =⎜ ⎜ ⎝ 1 1 1 0 0 ⎟ ⎟ ⎟ = D (matricea drumurilor). vn } poate fi eliminat˘. ¸a ⎜ ⎟ ⎝ 0 0 0 0 0 ⎠ 0 0 0 1 0 ⎛ D(1) ⎜ ⎜ =⎜ ⎜ ⎝ 0 0 1 0 0 (1) 1 0 1 0 0 0 1 0 0 0 0 1 0 0 1 0 1 0 0 0 ⎞ ⎛ ⎜ ⎟ ⎜ ⎟ ⎟ . de exemplu. ∀ i. . ⎟ ⎠ . cu ¸ a a s modificarea dij = (0) (n) 1.3) ¸i Definitia 3.3) este astfel ˆ ¸ ¸ at ıncheiat˘.1. Reamintim notatia utilizat˘. . a Exemplul 3. i.6. .6. vj ) drum cu l(μ) > 0 ¸i I(μ) ⊆ {v1 . ⎛ ⎞ 1 1 1 1 1 1 1 ⎜ 1 1 1 1 1 1 1 ⎟ ⎜ ⎟ 1 1 1 1 ⎟ . Pentru n fixat. a ¸ Observatia 3. . dac˘ aij > 0. j ∈ {1. GRAFURI 40 (μ se obtine parcurgˆnd ˆ ai μ1 apoi μ2 ¸i. Pentru graful din Exemplul 3.6. . . j ∈ {1. deci a a Pentru k = n conditia I(μ) ⊆ {v1 .TEMA 3. . . . . . n}. d13 = d13 ⎛ 1 ⎜ 1 ⎜ D(3) = ⎜ 1 ⎜ ⎝ 0 0 ⎛ D (5) (2) ∨ d12 d23 = 0 ∨ 1 · 1 = 0 ∨ 1 = 1). . D(4) = ⎜ 1 1 1 ⎜ ⎟ ⎝ 0 0 0 0 0 0 0 ⎠ 0 0 1 0 0 0 0 1 1 1 0 0 1 1 1 0 0 1 1 1 0 1 1 1 1 0 0 ⎞ (1) (1) 1 1 1 0 1 1 1 1 0 0 ⎞ ⎟ ⎟ ⎟. . O(f ) = {g|g : N → N. reciproc. n}. .3. vk }. . Observatia 3. s Demonstratia prin inductie a egalit˘¸ii (3. .2. Algoritmul Roy-Warshall necesit˘ 2n3 operatii (cˆte o operatie · ¸i ¸ a ¸ a ¸ s ∨ pentru fiecare (k.4. . j) ∈ {1. Algoritmul Roy-Warshall r˘mˆne evident valabil ¸i pentru grafuri nesimple. dac˘ aij = 0. a a ıntotdeauna adev˘rat˘. respectiv dintre ultima aparitie a lui vk ˆ I(μ ) ¸i vj ) ¸ ın ¸ ın s ⇔ ∃ μ = (vi . . . deci acest algoritm are complexitatea ¸ a ¸ O(n3 ). .6. . n} × {1.ˆ g(n) ≤ rf (n) ∀n ≥ n0 }.2. n} × {1.

Observatia 3.3).TEMA 3.5.6. n}. n { dac˘ (CC[i] = 0) a { nrc ← nrc + 1. ∀ k. atunci pentru orice nod x ∈ V componenta tare-conex˘ a nodului x este s a (indus˘ de) multimea a ¸ {x} ∪ {y|y ∈ V \ {x}. atunci pentru orice nod ¸ a s x ∈ V componenta conex˘ a nodului x este (indus˘ de) multimea a a ¸ {x} ∪ {y|y ∈ V \ {x}.6. . j ∈ s {1. . } } }. n}.//initializare pentru k = 1.//vectorul componentelor tare-conexe Roy Warshall. deci Algoritmul Roy-Warshall poate fi utilizat pentru determinarea componentelor tare-conexe ¸i s pentru verificarea tare-conexit˘¸ii grafului. . i. Algoritmul Roy-Warshall este un algoritm specific ¸ ¸ metodei program˘rii dinamice. a a ın a . E) este un graf neorientat ¸i V = {1. . n s dac˘ (CC[j] = 0) ¸i (dij = 1) ¸i (dji = 1) a s CC[j] ← nrc. . iar pentru grafuri oarecare (simple sau nesimple) initializarea are forma ¸ pentru i = 1. . Astfel obtinem a ¸ urm˘toarea descriere ˆ pseudocod a algoritmului a ın Roy Warshall : { pentru i = 1. n pentru i = 1. a altfel dij ← 0. . n dij ← aij . at Descrierea ˆ pseudocod a algoritmului are forma ın componente tare conexe : { nrc ← 0. . deci pentru implementarea algoritmului putem utiliza o singur˘ matrice D.6.2) ¸i definitiei operatiei ∨ avem dik = dik ¸ s ¸ ¸ ¸i dkj = dkj . n pentru j = 1. . at Algoritmul 3. . Dac˘ G = (V. unde CC[i] reprezint˘ num˘rul componentei tare-conexe ˆ care se afl˘ nodul i. Dac˘ G = (V. . . n}. }. pentru i = 1.6. . ∀ i ∈ {1. Astfel Algoritmul Roy-Warshall poate fi utilizat pentru determinarea componentelor conexe ¸i s pentru verificarea conexit˘¸ii grafului. . Conform ecuatiilor (3. dxy = 1}. E) este un graf a orientat ¸i V = {1.6. n}. pentru j = i + 1.6. n dac˘ (aij > 0) dij ← 1. . dxy = dyx = 1}.2 (determinarea componentelor tare-conexe). n CC[i] ← 0. GRAFURI 41 Observatia 3. . n dij ← dij ∨ dik dkj . CC[i] ← nrc. n pentru j = 1.//num˘rul de componente tare-conexe a pentru i = 1. n ¸ pentru j = 1. a (k) (k−1) (k) (k−1) Conform ecuatiilor (3.

1.1. . a ¸ b) Dac˘ δ(G) ≥ 2. ·) este un spatiu vectorial peste corpul ¸ ¸ finit cu dou˘ elemente (Z2 . Δ.2 (Veblen). . F ) = graf par}. Spatiul vectorial (P(E). ∀ i ∈ {1.1.1.1. E) un graf ¸i ¸ s C(E) = {F ⊆ E|(V. E) un graf cu E = ∅. unde a P(E) = {F |F ⊆ E}.1.1) . .Tema 4 Arbori 4.1. a ¸ Propozitia 4.4. E) un graf. . a) G contine un lant deschis elementar μ astfel ˆncˆt ¸ ¸ ı a l(μ) ≥ δ(G). AΔB = (A \ B) ∪ (B \ A) (diferenta simetric˘). ¸ ¸ 42 (4. ∀ A ∈ P(E). Un graf se nume¸te par dac˘ toate nodurile sale au gradele pare.3. k}.2. Ck cicluri elementare muchie-disjuncte (dou˘ cˆte dou˘) astfel ˆncˆt a a a a a ı a E = E(C1 ) ∪ · · · ∪ E(Ck ) (k ∈ N ). Fie G = (V. ·). Fie G = (V. 1 · A = A. Propozitia 4.1. . Fie G = (V. Definitia 4. atunci G contine un ciclu elementar C astfel ˆ at a ¸ ıncˆ l(C) ≥ δ(G) + 1. ¸ a 0 · A = ∅.1 Num˘rul ciclomatic a δ(G) = min d(x) x∈V Propozitia 4. unde E(Ci ) reprezint˘ multimea muchiilor ciclului Ci . ¸ s a Propozitia 4. . Atunci C(E) este un subspatiu vectorial al spatiului muchiilor grafului G. ·) din propozitia anterioar˘ se nume¸te spatiul muchi¸ ¸ ¸ a s ¸ ilor grafului G. Atunci graful G este par dac˘ ¸i ¸ as numai dac˘ exist˘ C1 . Fie G = (V. . unde l(μ) reprezint˘ lungimea lantului μ. Δ. Atunci (P(E). +. Definitia 4. . E) un graf neorientat simplu ¸i ¸ s gradul minim al nodurilor din G.1 (Dirac).

. Δ1 · Fk . . cu k = 1. ¸ a ¸ ın Propozitia 4. . v1 . . E) un graf. . ¸ a ¸ ¸ a Pentru m = 0 rezult˘ c˘ toate nodurile sunt izolate. ı ı. demonstr˘m c˘ orice graf conex G = (V.1. F = ∅. Orice arbore cu n noduri are m = n − 1 muchii. Demonstratie. adic˘ k = n ¸i egalitatea m − n + k = 0 este verificat˘. unde E = E \ {e}. E) un graf ¸i ¸ s C0 (E) = {F ⊆ E|∃ C = ciclu elementar ˆn G a. y]. atunci pentru orice x. Dac˘ graful G = (V. .1. ¸ a ¸ a Propozitia 4.1. deci arbore partial ˆ G. ARBORI Propozitia 4. ¸ ¸ s Atunci graful partial ¸ T + e = (V. Un graf este conex dac˘ ¸i numai dac˘ are arbori partiali. T = (V. . Demonstratie. . iar componenta ¸ s a a s ın ¸ a conex˘ din G ce contine x ¸i y se partitioneaz˘ ˆ dou˘ componente conexe ˆ G . ¸ a ¸ exist˘ un lant [x. deci fiecare nod formeaz˘ o component˘ a a a a conex˘.7.1. ¸ as a ¸ Demonstratie. cu e ∈ E. . Fie G = (V. deci ¸i ˆ G. E) o p˘dure cu n noduri. y] o s a a a ıntre muchie a lui G aflat˘ pe un ciclu elementar C ¸i fie G = (V. ¸ ¸ ¸ s ¸ Dimensiunea acestui subspatiu se nume¸te num˘rul ciclomatic al grafului G ¸i se noteaz˘ cu ν(G). Aplicˆnd ipoteza de inductie pentru graful G avem s a a ¸ (m − 1) − n + (k + 1) = 0. deci ¸i ˆ G. ¸ ¸ a Demonstratie. Fie a a G = (V. . .ˆ F = E(C)}. Evident. . E) are arbori partiali prin inductie dup˘ a a ¸ ¸ a num˘rul p de cicluri elementare ale lui G. Subspatiul C(E) din Propozitia 4. ΔFk = a 1 · F1 Δ . y] ˆ T (fiind conex). F ∪ {e}) are un unic ciclu elementar ¸i acest ciclu contine muchia e. Definitia 4. . x] este ciclul C) ¸i are cel mult p − 1 cicluri s a ¸ s ın elementare.1. Graful G r˘mˆne conex (ˆ a s s x ¸i y exist˘ lantul [x. unde [x. Fie e = [x.1. deci F = F1 Δ . x = y. E ). Se aplic˘ propozitia anterioar˘. F ) un arbore partial al lui G ¸i e ∈ E \ F . vk . Fie G = (V. vk .1. ¸ s a s a Propozitia 4. s ¸ . Demonstr˘m egalitatea din enunt prin inductie dup˘ m. Conform Propozitiei 4. 43 unde E(C) este multimea muchiilor ciclului C. . a Pentru p = 0 rezult˘ c˘ ˆ si G este un arbore. E \ {e}).3. y. exist˘ un arbore partial T ˆ G . .1. m − 1 muchii ¸i k + 1 componente conexe (deoarece a s componentele conexe din G ce nu contin x ¸i y r˘mˆn componente conexe ¸i ˆ G . y ∈ V . E) cu p cicluri elementare. a a ınsu¸ ¸ ın Presupunem adev˘rat˘ afirmatia pentru orice graf conex cu cel mult p − 1 cicluri elementare a a ¸ (p ≥ 1) ¸i o demonstr˘m pentru graful conex G = (V. .1. deci m − n + k = 0.2. y]. a a s a s Presupunem adev˘rat˘ egalitatea din enunt pentru orice p˘dure cu m − 1 muchii (m ≥ 1) ¸i o a a ¸ a demonstr˘m pentru p˘durea G cu m muchii. . . . Conform ipotezei de inductie. Atunci m − n + k = 0.8. C0 (E) ⊆ C(E).6 (Listing). Evident G este o p˘dure cu n noduri. exist˘ F1 . Atunci subspatiul vectorial al spatiului muchiilor lui ¸ ¸ ¸ G generat de C0 (E) este subspatiul C(E) din propozitia anterioar˘. v1 . ¸i astfel G este conex. ¸ ¸ a a a ı. Fk ∈ C0 (E) disjuncte dou˘ cˆte dou˘ a.5.TEMA 4. m muchii ¸i k componente ¸ a s conexe. una continˆnd pe a ¸ s ¸ a ın a ın x ¸i cealalt˘ pe y). Fie G = (V. .4 se nume¸te spatiul ciclurilor grafului G. Corolarul 4. e = [x.ˆ F = F1 ∪ · · · ∪ Fk . a ¸ ın s ın s Reciproc. E) are un arbore partial T . pentru orice F ∈ C(E).

card (F ) = n − 1. y] ˆ T . . . . . . Dar. . indicˆnd urm˘torul algoritm ¸ ¸ a a a de determinare a unei baze de cicluri pentru graful G: • se determin˘ componentele conexe G1 . v1 . portiunile lor muchie-disjuncte ar produce un ciclu. . Gk . ın Num˘rul s˘u ciclomatic este ν(G) = m − n + k = 9 − 7 + 1 = 3. . . . 1]}. Atunci ¸ B = {C1 . Demonstratia teoremei anterioare este constructiv˘. a a Exemplul 4. fie Ci multimea muchiilor ciclului elementar unic din T + ei ¸ (conform Propozitiei 4. . Evident. conform etapei 1). Cm−n+1 } este o baz˘ a spatiului ciclurilor C(E) (numit˘ baz˘ de cicluri a grafului G). .1. 5]}.1. . Cmi −ni +1 din grafurile T + ei . . . a a Considerˆnd arborele partial T reprezentat ˆ Figura 4. . a • pentru fiecare component˘ Gi .1. s . . [4. . y] ¸i μ2 = [x. 4]} a ¸ ¸i C3 = {[5. s Etapa 2) Fie acum G un graf oarecare ¸i G1 . m − n + 1}. em−n+1 }. contradictie cu T = arbore). Fie E \ F = {e1 . respectiv muchii ale componentei Gi . Gk componentele sale conexe. exist˘ un lant elementar μ = [x. . Conform Corolarului 4. . y]. v1 . Deoarece subspatiile ciclurilor componentelor G1 . 4]. Demonstratie. Observatia 4. [2. [2. . .1. Fie ni ¸i mi s numerele de noduri. se determin˘ un arbore partial T (de exemplu arborele DF sau a a ¸ BF ) ¸i ciclurile elementare C1 .7). [2. ın Unicitatea acestui ciclu rezult˘ din unicitatea lantului elementar μ (dac˘ ar exista dou˘ lanturi a ¸ a a ¸ s ın ¸ elementare distincte μ1 = [x. 2]. avem ¸ ν(G) = ν(G1 ) + · · · + ν(Gk ). ¸i astfel prin adunare rezult˘ c˘ s a a ν(G) = m − n + k. .1.1. y. . T fiind arbore partial. vk .1 (Teorema num˘rului ciclomatic). . ¸ Teorema 4. [5. Fie T = (V. • ciclurile astfel determinate formeaz˘ ˆ a ımpreun˘ o baz˘ de cicluri pentru graful G. vk . . . Gk sunt liniar independente. deci μ + e = [x. . deci k = 1.1. .1. . . .1. C3 } unde C1 = {[1. n = n1 + · · · + nk ¸i m = s m1 + · · · + m k . 2]. E) cu n noduri. pentru fiecare muchie ei din s ¸ Gi ce nu apartine lui T .1.2 ¸i aplicˆnd algoritmul din observatia a ¸ ın s a ¸ anterioar˘ se obtine baza de cicluri {C1 . . 3]. Orice graf G = (V.TEMA 4. ARBORI 44 Demonstratie.1. conform Propozitiei 4. . 5]. Fie graful G reprezentat ˆ Figura 4. [3. . . . Demonstr˘m egalitatea din enunt ˆ dou˘ etape. m muchii a ¸i k componente conexe are num˘rul ciclomatic s a ν(G) = m − n + k. [6. F ) un arbore partial al lui a ¸ a ¸ G (exist˘. 2]. x] este un ciclu elementar ˆ T + e. 6]. . C2 = {[4. . . . C2 . . Pentru orice i ∈ {1. k}. ¸ a ¸ ın a Etapa 1) Presupunem c˘ graful G este conex. y] ˆ ¸ ¸ a ¸ ın T . . . . . Rezult˘ c˘ a ¸ a a a a ν(G) = card (B) = m − n + 1 = m − n + k. .1. Fie e = [x.8). . ν(Gi ) = mi − ni + 1 ∀ i ∈ {1.

x] ar fi un ciclu ˆ G. . Fie x. y]. . . . adic˘ dac˘ se adaug˘ o muchie ˆ a a s a a a a ıntre oricare dou˘ noduri graful obtinut contine cicluri. . adic˘ G este conex. Deci G este conex. w1 . wj .2: 4. e ∈ E. Fie G = (V. . v1 . a a ¸ Demonstratie. . . . vk . atunci ar exista un a ın s ın ¸ lant elementar [x. . . 5) ⇒ 6) Fie G conex minimal. . Deci G − e este neconex. wj . . e = [x. Deci 0 = ν(G) = m − n + 1 ¸i ¸ as s aa s astfel m = n − 1. vi . . .TEMA 4. Fie G + e = (V. a a ¸ s G este conex. v1 ]). y. Dac˘ G ar avea un ciclu elementar C = [x. E ∪ {e}).1: Figura 4. e ∈ E. . . y ∈ V . s Deci ˆ ıntre x ¸i y exist˘ un unic lant elementar. atunci ad˘ugˆnd o muchie ˆ aa a a a ıntre dou˘ a noduri x ¸i y din componente conexe diferite ale lui G s-ar obtine un graf f˘r˘ cicluri (deoarece nu s ¸ aa exist˘ lant ˆ a ¸ ıntre x ¸i y ˆ G). a a a 3) ⇒ 4) Fie G conex ¸i cu m = n − 1 muchii. unde k aa s reprezint˘ num˘rul de componente conexe ale lui G. contradictie cu ipoteza. 4) ⇒ 5) Fie G f˘r˘ cicluri maximal. a a a a ¸ Dac˘ x = y exist˘ de asemenea lantul elementar [x] de lungime zero. a a s 3) G este conex ¸i are m = n − 1 muchii. 1) ⇒ 2) Fie G un arbore. v1 ] ¸i [v1 . Urm˘toarele a afirmatii sunt echivalente: ¸ 1) G este un arbore (adic˘ este conex ¸i f˘r˘ cicluri). a a ¸ s Dac˘ ˆ a ıntre nodurile x ¸i y ar exista dou˘ lanturi elementare distincte μ1 = [x. . x] a ¸ ar fi dou˘ lanturi elementare ˆ a ¸ ıntre x ¸i v1 . v1 . .1 (de caracterizare a arborilor). E \ {e}). y] ¸i s a ¸ a ¸ μ2 = [x. Avem 0 = ν(G) = n − 1 − n + k. y]. x] atunci [x. v1 ] a lantului μ1 . v1 . atunci notˆnd cu e muchia [x.2. . adic˘ G + e contine un ciclu (elementar). vi . Graful G + e r˘mˆne conex ¸i are n noduri ¸i m + 1 = n a a s s a ¸ muchii. rezult˘ c˘ exist˘ un lant elementar [x. Deci G nu are cicluri elementare. . Evident. contradictie cu ipoteza.2 Teorema de caracterizare a arborilor Teorema 4.1. E \ {e}) ar ¸ ¸ r˘mˆne conex (deoarece ˆ a a ıntre x ¸i v1 avem lantul [x. . adic˘ ¸i conex ¸i f˘r˘ cicluri. contradictie cu ipoteza. y]. . Astfel ν(G + e) = n − n + 1 = 1. 6) ˆ ıntre oricare dou˘ noduri ale lui G exist˘ un unic lant elementar. . . Dac˘ graful G − e ar fi conex. deci k = 1. . v1 . deci G este f˘r˘ s aa cicluri. . Dac˘ x = y. . . Avem ν(G) = n − 1 − n + 1 = 0. s a ¸ 6) ⇒ 1) Fie G cu proprietatea c˘ ˆ a ıntre orice dou˘ noduri exist˘ un unic lant elementar. . adic˘ dac˘ se elimin˘ o muchie oarecare graful s a a a a ¸ obtinut devine neconex. . s ın ¸ Fie G − e = (V. . ARBORI 1 2 3 1 2 3 45 7 4 5 6 4 5 6 7 Figura 4. . y] ˆ G − e ¸i astfel [x. graful G − e = (V. a ¸ ¸ 5) G este conex ¸i minimal cu aceast˘ proprietate. Dac˘ G nu ar fi conex.1. vk . . w1 . E) un graf cu n noduri. . . s ¸i nici neelementare (deoarece orice ciclu neelementar s-ar descompune ˆ cicluri elementare muchies ın disjuncte). a s a a 2) G este f˘r˘ cicluri ¸i are m = n − 1 muchii. contradictie cu ¸ ipoteza. . s 4) G este f˘r˘ cicluri ¸i maximal cu aceast˘ proprietate. y. vk . 2) ⇒ 3) Fie G f˘r˘ cicluri ¸i cu m = n − 1 muchii. vk .

3. Definitia 4. Teorema 4. . ARBORI 46 4. Matricea de admitant˘ este o matrice simetric˘ (¸i pentru grafuri orientate!) ¸i are toate sumele pe linii ¸i pe coloane egale cu zero.2.3. ∀ i. . unde V = {v1 . E) un graf f˘r˘ bucle.3. . .1.j=1. .1 se poate extinde ¸i pentru grafuri cu bucle. E) un graf f˘r˘ bucle avˆnd matricea de admitant˘ a a a ¸a a ¸ a M = (mij )i. .1. n ≥ 2.TEMA 4. Aplicˆnd teorema anterioar˘ rezult˘ c˘ num˘rul arborilor partiali ai grafului G din a a a a a ¸ Exemplul 4. Teorema anterioar˘ este valabil˘ ¸i pentru grafuri cu bucle.n definit˘ prin: ¸a a mii = dG (vi ). Fie G = (V. . . s Observatia 4. . i = j.j=1. Fie G = (V. n}. ∀ i. ⎜ ⎟ ⎝ 0 −1 −1 2 0 ⎠ 0 −1 0 0 1 ¸ ¸a a s s Observatia 4. Atunci num˘rul t(G) de arbori partiali ai grafului G verific˘ egalitatea t(G) = (−1)i+j det[M ]ij . . −mij = num˘rul de muchii sau arce dintre vi ¸i vj . n}. .3. n}.3. considerˆnd drept matrice ¸ ¸ s a de admitant˘ a unui astfel de graf matricea de admitant˘ a grafului obtinut prin eliminarea tuturor ¸a ¸a ¸ buclelor. . a ¸ a s unde [M ]ij reprezint˘ matricea obtinut˘ din M prin eliminarea liniei i ¸i coloanei j.3 Num˘rarea arborilor partiali a ¸ Matricea de Definitia 4. folosind Observatia ¸ a a s ¸ 4. ın 1 2 5 3 4 Figura 4.3. j ∈ {1.2.3.3.1. . Fie G graful reprezentat ˆ Figura 4.1.3.3.n .3. ∀ i ∈ {1. .1 (Kirchoff-Trent). a s Exemplul 4. vn }. ¸ a a a admitant˘ asociat˘ grafului G este matricea M = (mij )i. . j ∈ {1.3.1 este 2 −1 0 0 −1 4 −1 0 0 −1 2 0 0 0 0 1 t(G) = det[M ]22 = = 12. .3. Observatia 4. Exemplul 4. .2.1: Matricea de admitant˘ a acestui graf este ¸a ⎛ ⎞ 2 −1 −1 0 0 ⎜ −1 5 −2 −1 −1 ⎟ ⎜ ⎟ M = ⎜ −1 −2 4 −1 0 ⎟ .

Matricea de admitant˘ a grafului Kn este ¸ ¸a ⎛ ⎞ n − 1 −1 .TEMA 4.. .. 1 0 .q are pq−1 q p−1 arbori partiali.q = (V. n−1 47 t(Kn ) = det[M ]11 = (determinant de ordinul n − 1).. s b) Graful neorientat simplu Kp. yj ]|i ∈ {1. .. i = j} se nume¸te graf complet de ordinul n. . ¸ a) Dac˘ H = (U..3. E) definit prin V = {x1 .. apoi adunˆnd linia obtinut˘ la a a ¸ a a ¸ cel˘lalte linii obtinem 1 1 −1 n − 1 ... .. . ¸ 4. . .... .. .2. . E = {[xi .3. Fie (G... Observatia 4. c(e) se nume¸te ponderea (costul) ¸ a s muchiei sau arcului e. c) un graf ponderat. ... M =⎜ ⎝ ... F ) este un subgraf al lui G. xp . atunci costul (ponderea) lui H este a c(H) = e∈F c(e) (adic˘ suma costurilor muchiilor sau arcelor sale). . Definitia 4.. j ∈ {1. 1 −1 . unde G = (V.. . a . −1 ⎟ ⎟ ( de tipul n × n).1.. vj ]|i. . unde n ∈ N .. . . j ∈ {1. E) definit prin ¸ V = {v1 .. . G = (V... n−1 1 0 . ARBORI Definitia 4. 0 .4 Arbori partiali de cost minim ¸ Definitia 4. .2. n − 1 deci conform teoremei anterioare avem n − 1 −1 −1 n − 1 .. Un graf ponderat este o pereche (G.. Adunˆnd toate liniile la prima linie.. . .. . ... . Demonstratie. .. −1 −1 .. . . −1 ⎜ −1 n − 1 . ... y1 ... . .. n}.1.. 0 1 n . .. Pentru orice e ∈ E. ..4. E = {[vi . vn }. E) este un graf iar c : E → ¸ R este o functie numit˘ pondere (cost).4.. . p}. .2.. unde p. .4.. .3.. . −1 −1 . . Graful complet Kn are nn−2 arbori partiali. . . Corolarul anterior poate fi reformulat astfel: num˘rul arborilor ce pot fi construiti ¸ a ¸ n−2 cu n noduri date (numiti ¸i arbori etichetati) este egal cu n ... q ∈ N . E). a) Graful neorientat simplu Kn = (V. s ¸ Corolarul 4. . ⎠ −1 −1 . c). −1 −1 . n t(Kn ) = = = nn−2 .3. . . yq }... . ¸ s ¸ Corolarul 4. Graful bipartit complet Kp. . q}} se nume¸te graf bipartit complet.

selectarea muchiei ei este posibil˘ la fiecare pas i. . unde e1 . F ) este un ¸ arbore partial de cost minim al grafului ponderat (G. Rezult˘ c˘ lantul elementar a μi = [xj .4.1 (de corectitudine a algoritmilor Kruskal ¸i Prim). a Cazul 2) ei ∈ F . xi . i = 1. . 2. . .TEMA 4. n − 1. n − 1} c˘ exist˘ un APM T = (V. a a a Graful G fiind conex. c) un graf ponderat conex cu G = (V. fie F = {e1 .4. . . i = 1. Algoritmul are n − 1 pa¸i.4. ˆ a In a cazul Algoritmului Prim. E). e2 .4. . a Fie ei = [xj . . n − 1. . iar pentru Algoritmul Prim este o ¸ a ¸ a consecint˘ a faptului c˘ nodurile neselectate la pasul i sunt izolate ˆ Ti ). . ∀ i ∈ {1. . .2 (Prim). . . . . s ¸ 48 Observatia 4. . ¸ Demonstratie. ARBORI b) Un arbore partial T = (V. ¸ a a s Presupunem (4. .1) a Pentru i = 0 afirmatia este evident˘. . ei−1 } selectate la pa¸ii anteriori. s Algoritmul 4. luˆnd T orice APM (exist˘. . y0 . . xi ] muchia selectat˘ de Algoritmul Kruskal sau de Algoritmul Prim la pasul i. xj este nodul selectat la un pas anterior (j ≤ i − 1). Algoritmul are n pa¸i. . . . xi ] . V = {v1 . . . . s a Problema determin˘rii arborilor partiali de cost minim are numeroase aplicatii practice. . c).1 (Kruskal). a (4. . {e1 . Fie (G.1) adev˘rat˘ pentru i − 1. Prezent˘m a ¸ ¸ a ˆ continuare doi algoritmi fundamentali pentru rezolvarea acestei probleme. ei }). . un graf ponderat are arbori partiali de cost minim dac˘ ¸ ¸ ¸ a ¸i numai dac˘ este conex. V = {v1 . . ei } ⊆ F ). c) un graf ponderat conex cu G = (V. ¸a a ın Demonstr˘m prin inductie dup˘ i ∈ {0.4. de Algoritmul Kruskal sau de Algoritmul Prim. a • La pasul i. . . F ) APM cu Ti−1 ⊆ T ¸i o a a a a demonstr˘m pentru i (i ∈ {1. . xi . . n − 1}). . . s • La pasul 0 se selecteaz˘ un nod arbitrar x0 ∈ V . dintre muchiile neselectate la pa¸ii anteriori se selecteaz˘ o muchie s a a a ei ∈ E de cost minim cu proprietatea c˘ nu formeaz˘ cicluri cu muchiile {e1 . Cazul 1) ei ∈ F . ˆ s aceast˘ ordine. . .1. Avem dou˘ cazuri. Vom prezenta o demonstratie comun˘ a corectitudinii celor doi algoritmi. en−1 } multimea muchiilor selectate. F ) al lui G cu proprietatea c˘ ¸ a ¸ c(T ) = min{c(T )|T = arbore partial al lui G} se nume¸te arbore partial de cost minim (APM) al grafului ponderat (G. vn }. . wk . en−1 sunt muchiile selectate. graful H = T + ei = (V. F ∪ {ei }) a ¸ obtinut din T prin ad˘ugarea muchiei ei contine un ciclu elementar unic ¸ Ci = [xj . . Conform Teoremei num˘rului ciclomatic. xi ] ∈ E de cost minim cu proprietatea a s a c˘ are ca extremit˘¸i un nod xj ∈ V selectat la un pas anterior ¸i cel˘lalt nod xi ∈ V neselectat a at la pa¸ii anteriori. yr . deoarece G este conex).7. w0 . Cum Ti = Ti−1 +ei este o p˘dure. 2. ∅) ¸i Ti = (V. . se selecteaz˘ o muchie ei = [xj .1. deci Ti ⊆ T . iar Ti este o p˘dure partial˘ a lui G (afirmatie evident˘ pentru Algoritmul Kruskal. . vn }. . . Atunci T = (V. c). . .4. ei } ⊆ F . rezult˘ c˘ xj ¸i xi sunt ˆ coma ın ¸ ponente conexe diferite ale lui Ti−1 (ˆ caz contrar Ti ar contine un ciclu de forma [xj . Conform Propozitiei 4. . . se selecteaz˘ ¸i nodul xi . F ) astfel ˆ at a ¸ a a a ıncˆ Ti ⊆ T (adic˘ {e1 . . xj ] a a a s ın avˆnd ultima muchie chiar muchia ei . . s as ˆ Teorema 4. adic˘ exist˘ T = (V. w0 . wk . . . Fie T0 = ¸ ¸ a ın (V. Atunci {e1 . In contextul Algoritmilor s Kruskal sau Prim. s • La pasul i. . xj ] a a ¸ avˆnd ultima muchie ei ). ın Algoritmul 4. Fie (G. 1. . E). . n − 1}.

y ] astfel ˆ at x este ¸ ¸ ıncˆ ˆ aceea¸i component˘ conex˘ cu xj ˆ p˘durea Ti−1 . De asemenea.4. T este conex (T este conex iar ˆ ıntre nodurile x ¸i y dup˘ eliminarea muchiei ei s a r˘mˆne lantul obtinut din ciclul Ci prin eliminarea acestei muchii) ¸i are n − 1 muchii (deoarece T a a ¸ ¸ s are n − 1 muchii).4. Fie graful ponderat (G. . ei−1 }. .1: Aplicarea Algoritmului Kruskal este evidentiat˘ ˆ urm˘torul tabel: ¸ a ın a .4. . F ).1) este complet˘. deci T = T ¸i astfel T este un APM al grafului dat. iar graful Ti = Ti−1 + ei a a nu contine cicluri. c) reprezentat ˆ Figura 4. Cum Ti ⊆ T . ¸ ¸ ¸ a Luˆnd i = n−1 ˆ aceast˘ relatie obtinem c˘ T ⊆ T . c(T ) = c(T )). . din descrierea Algoritmului Kruskal deducem c˘ a c(ei ) ≤ c(ei ) a a (deoarece muchia ei nu formeaz˘ cicluri cu {e1 . deci ei ∈ F ∗ . ¸ Deoarece c(ei ) ≤ c(ei ) obtinem c(T ) ≤ c(T ) a as s ın ¸i cum T este un APM rezult˘ c˘ ¸i T este un APM (¸i. unde T = Tn−1 = (V. unde F = F ∪ {ei } \ {ei }. ei−1 }.1.1. en−1 } a ın a ¸ ¸ a s a (multimea muchiilor selectate de algoritm) iar T este un APM. deci ei fiind muchia selectat˘ la pasul i verific˘ aceast˘ inegalitate). rezult˘ c˘ ei nu este muchie a lui Ti−1 . Conform Teoremei num˘rului ciclomatic rezult˘ c˘ T este un arbore partial al a a a ¸ grafului G. a a Pe de alt˘ parte. Dar T ¸i T au fiecare cˆte n − 1 ¸ s muchii. ARBORI 49 (obtinut din ciclul Ci prin eliminarea muchiei ei ) contine o muchie ei = [x . . Evident. F = {e1 .4. . ˆ plus. ¸ Pe de o parte. a a a Continu˘m demonstratia comun˘ pentru cei doi algoritmi.TEMA 4. s demonstratia prin inductie a relatiei (4. iar y nu este ˆ aceast˘ component˘ conex˘. adic˘ ¸ ¸ a s a T = (V. . adic˘ ei ∈ {e1 . din descrierea Algoritmului Prim deducem c˘ la pasul i nodul x era deja selectat a a ın la un pas anterior (fiind ˆ aceea¸i component˘ conex˘ cu xj ˆ Ti−1 ). a a a 1 30 60 70 110 2 50 3 20 100 4 5 10 70 40 6 80 90 150 120 7 100 8 30 9 130 10 Figura 4. . ei = ei . . Exemplul 4. ın s a a ın a ın a a a a Evident. . iar nodul y nu era selectat la ın s a a un pas anterior (nefiind ˆ acea component˘ conex˘). . F ). . unde costul fiec˘rei muchii ın a este scris lˆng˘ segmentul corespunz˘tor acesteia. deci din nou avem ın a a c(ei ) ≤ c(ei ) (ei fiind muchia selectat˘ la pasul i verific˘ aceast˘ inegalitate). Fie a ¸ a T = (T + ei ) − ei graful partial al lui G obtinut din T prin ad˘ugarea muchiei ei ¸i eliminarea muchiei ei .

4] 90 [8. 2] 30 [2. 5] 60 [4. se poate ar˘ta c˘ Algoritmul Kruskal are complexitatea O(m ln n) (fiind In a a a necesar˘ sortarea muchiilor dup˘ cost).2: Observatia 4. iar Algoritmul Prim are complexitatea O(n2 ) (o astfel de a a implementare va fi prezentat˘ ˆ continuare). 3] 50 [3. 6] 20 [2. 5] 60 [5. 9] 30 [6. 8] 10 [3.4. respectiv a ın s a de muchii ale grafului dat. iar subgrafurile induse pe parcurs de muchiile selectate ın a sunt conexe. Aplicarea Algoritmului Prim pentru acela¸i graf este evidentiat˘ ˆ urm˘torul tabel: s ¸ a ın a Pas 0 1 2 3 4 5 6 7 8 9 Muchia selectat˘ Costul ei a [1.2. unde n ¸i m reprezint˘ numerele de noduri.TEMA 4. 10] 120 50 Arborele partial de cost minim obtinut este reprezentat ˆ Figura 4. subgrafurile induse pe a ın a parcurs de acestea nefiind neap˘rat conexe. Graful fiind conex. . ˆ implement˘ri optime. 10] 120 Nodul selectat 1 2 3 6 5 8 9 4 7 10 Arborele partial de cost minim obtinut este deci acela¸i cu cel obtinut prin aplicarea Algoritmului ¸ ¸ s ¸ Kruskal. 8] 100 [4. nu neap˘rat a a s a ˆ ordinea cresc˘toare a costurilor muchiilor.4. m ≥ n − 1. Costul acestui APM este de ¸ ¸ ın 510. 6] 90 [7.2. 2] 30 [8. 1 30 60 2 50 3 20 90 4 6 5 10 120 7 100 8 30 9 10 Figura 4. 6] 20 [1. ¸ s Algoritmul Kruskal selecteaz˘ muchii. ˆ ordinea cresc˘toare a costurilor. 3] 50 [2. 8] 10 [8.4. Algoritmul Prim selecteaz˘ muchii ¸i noduri. 7] 100 [4. 9] 30 [2. Algoritmii Kruskal ¸i Prim sunt specifici metodei de programare Greedy. ARBORI Pas 1 2 3 4 5 6 7 8 9 Muchia selectat˘ Costul ei a [5.

c ← p3k . E = {e1 . repet˘ a { k ← k + 1. y] a cost ← cost + c. cu ajutorul unei matrice a ¸ C = (cij )i. . j]).j=1. cost ← 0. memor˘m graful ponderat conex ¸i ¸ a s simplu (G. iar Algoritmul Prim este mai eficient a ın pentru grafuri ”bogate” ˆ muchii. Astfel o muchie [x. . pentru i = 1. E). . ın . . p2k = yk ¸i p3k = c(ek ).3. yk ] ∈ E.//c˘utarea urm˘toarei muchii ek ce a a //va fi selectat˘ ˆ a ıncepe de pe pozitia poz + 1 ¸ pentru l = 1. .4. . x ← p1k . Pentru implementarea Algoritmului Prim. . Folosind ¸i inegalitatea ln n ≤ n − 1. V = {1. unde G = (V. . a (4. m} ¸i un vector CC cu semnificatia s ¸ CC[i] = num˘rul componentei conexe ˆ care se afl˘ nodul i ˆ graful indus de muchiile selectate. 0.//se sorteaz˘ coloanele matricei P a //cresc˘tor dup˘ costurile muchiilor a a pentru i = 1.2) cij = ⎩ ∞. poz ← k. n − 1 //pasul l { k ← poz. E). a ın a ın ∀ i ∈ {1. j] ∈ E.//select˘m ek = [x. 3 avˆnd semnificatia: k = 1. em }. ın Observatia 4. obtinem c˘ Algoritmul s ¸ a 2 Kruskal este mai eficient pentru grafuri ”s˘race” ˆ muchii. . ARBORI 51 Pentru grafuri simple. . n CC[i] ← i. . .//actualiz˘m vectorul CC prin a //unificarea componentelor conexe ale lui x ¸i y s pentru i = 1. . a s Utiliz˘m un vector S cu semnificatia a ¸ S[k] = 1. m dac˘ ek = [xk .4. Observatia 4.TEMA 4. ˆ caz contrar. . m ≤ n(n−1) . . ın ∀ k ∈ {1. m S[i] ← 0. . n}. memor˘m graful ponderat conex ¸ a ıntr-o matrice cu 3 linii ¸i m coloane s (G. Pentru implementarea Algoritmului Kruskal. n}. aux ← CC[y]. dac˘ i = j. y] nu formeaz˘ cicluri cu muchiile selectate dac˘ ¸i numai dac˘ a as a CC[x] = CC[y]. a a 0. . Descrierea ˆ pseudocod a algoritmului are forma ın Kruskal : { sortare(P ). . c). atunci p1k = xk . n dac˘ (CC[i] = aux) CC[i] ← CC[x].n a costurilor (directe) avˆnd semnificatia ⎧ a ⎨ c([i. E = {e1 . ˆ rest. dac˘ ek a fost selectat˘. y ← p2k . c).//costul APM poz ← 0. dac˘ [i.4. . n}. } cˆt timp (CC[x] = CC[y]). em }. V = {1. . . unde G = (V.4. . a S[k] ← 1. ˆ a ¸ P = (pik ) i = 1. . a } }. .

Pentru grafuri neorientate. . j ∈ {1. pentru i = 2. y] s cost ← cost + cxy .//costul APM pentru i = 2. . } } S[y] ← 1. ın Descrierea ˆ pseudocod a algoritmului are forma ın Prim : { S[1] ← 1. . n// actualiz˘m vectorii t ¸i T AT A { dac˘ (S[i] = 0) ¸i (t[i] > ciy ) a s { t[i] ← ciy .// ¸i muchia [x. n}. ˆ caz contrar ın ¸i doi vectori t ¸i T AT A avˆnd semnificatia s s a ¸ t[i] = costul minim al unei muchii [i.// select˘m nodul y a x ← T AT A[y]. matricea C este simetric˘. T AT A[i] = nodul j ce atinge minimul ˆ t[i]. n { dac˘ (S[i] = 0) ¸i (t[i] < min) a s { min ← t[i].//select˘m nodul 1 a cost ← 0. t[i] ← ci1 . . . a 0. n − 1 //c˘ut˘m nodul y ¸i muchia [x. . n}. } a a s pentru l = 1. y ← i. . ˆ cazul grafurilor nesimple a In putem lua cij = min{c(e)|e = [i. } } } }. ∀ i ∈ {1. y] //ce vor fi selectate la pasul l { min ← ∞. Utiliz˘m un vector S cu semnificatia a ¸ S[i] = 1. . . a s pentru i = 2. dac˘ nodul i a fost selectat. j] ∈ E}.TEMA 4. T AT A[i] ← 1. T AT A[i] ← y. j] de la nodul i la un nod selectat j. ARBORI 52 ∀i. n { S[i] ← 0.

1.Tema 5 Arborescente ¸ 5.1. . y luˆnd ¸ a z = x exist˘ drumuri (z. E) se nume¸te quasi-tare conex dac˘ pentru orice dou˘ ¸ s a a noduri x.1.1. graful din a s a a Exemplul 3. De exemplu. ˆ graful din Exemplul 3. Reciproca nu este adev˘rat˘. x) ¸i (z.1. Ca ¸i ˆ definitiile conexit˘¸ii ¸i tare-conexit˘¸ii.1.1.2. y ∈ V exist˘ un nod z ∈ V ¸i drumuri de la z la x ¸i de la z la y. Graful din Exemplul 3.2 nodurile 1.3.1 ¸i 5. orice graf quasi-tare conex este conex. a a Definitia 5.1. Orice graf tare-conex este quasi-tare conex (deoarece pentru orice noduri x.3 putem ¸ s ın ¸ at s at s ın ¸ s ˆ ınlocui termenul de ”drum” cu ”drum elementar” (conform Observatiei 3. s a a s Observatia 5. a a ¸ Exemplul 5.1.1 Teorema de caracterizare a arborescentelor ¸ Definitia 5. deci nu este arbore).1.1. a ¸ ¸ ın s 1 2 1 2 1 2 5 3 4 3 4 5 3 4 Figura 5. iar nodurile 4 ¸i 5 nu In s a a s sunt r˘d˘cini.1. Un nod x ∈ V se nume¸te r˘d˘cin˘ a grafului ¸ s a a a G dac˘ pentru orice nod y ∈ V \ {x} exist˘ cel putin un drum de la x la y. ¸a a ¸a Exemplul 5. . Evident.3.1. Reciproca nu este adev˘rat˘. F ) cu F ⊆ E). dar nu este tare-conex.3 este conex.2. graful reprezentat ˆ Figura 5.2 este quasi-tare conex. De ¸ a a exemplu. Un graf orientat G = (V.2: Figura 5.2. Un graf orientat este quasi-tare conex dac˘ ¸i numai dac˘ are (cel putin) o ¸ a s a ¸ r˘d˘cin˘. Fie G = (V. a s s Observatia 5.1.1. 2 ¸i 3 sunt r˘d˘cini.1. . ¸i ˆ Definitiile 5. E) un graf orientat. . . ¸a a a a b) O arborescent˘ partial˘ a unui graf orientat G = (V.1. ¸ Observatia 5.3: Definitia 5.1 ¸i 5.1.4.5). .2 nu este arborescent˘ (are cicluri. . ¸a Dou˘ arborescente partiale ale sale sunt reprezentate ˆ Figurile 5. a a a 53 .1. Propozitia 5.1.1: Figura 5. dar nu este quasi-tare conex (pentru nodurile ın x = 1 ¸i y = 4 nu exist˘ noduri z din care s˘ avem drumuri la x ¸i la y). ¸ a) O arborescent˘ este un arbore care are o r˘d˘cin˘. E) este un graf partial al lui G ce este ¸a ¸ a ¸ arborescent˘ (adic˘ o arborescent˘ T = (V.2.1.1.1. y)). .1.

. y. Deci pentru orice nod v ∈ V exist˘ un drum ¸a s a a a a de la x la v. xk−1 . adic˘ dac˘ se elimin˘ un arc oarecare s a a a a graful obtinut nu mai este quasi-tare conex. . (xk−1 . deci exist˘ drumuri ¸ a (xk . G este conex ¸i are s s a a a ¸ r˘d˘cin˘ (conform propozitiei anterioare). . x fiind r˘d˘cin˘. . y) ˆ G. . vk−1 ). G are o r˘d˘cin˘ x. . . . v1 ). . . . . z) de la x la z ˆ G. x) ∈ E. ARBORESCENTE ¸ 54 Demonstratie. s a ı a s 7) G este f˘r˘ cicluri ¸i exist˘ un nod x ∈ V astfel ˆncˆt d− (x) = 0 ¸i d− (v) = 1 ∀ v ∈ V \ {x}. . . v1 ). . . ın ¸ a s ın contradictie cu ipoteza. v) de a a a a − a a lungime nenul˘ (v = x). . . (xk . E) un graf quasi-tare conex. Fie e = (y. G este conex. rezult˘ c˘ exist˘ un nod xk ∈ V cu drumuri (xk . Dac˘ G − e ar fi quasi-tare a conex. .TEMA 5. z) ∈ E un arc arbitrar fixat. ¸ ¸ Fie acum v ∈ V \ {x} un nod arbitrar fixat. . . Fiind conex cu m = n − 1 arce. deci ¸i ˆ G − e) ¸i astfel G − e ar r˘mˆne a a a ın s ın s a a quasi-tare conex (conform propozitiei anterioare). E) ¸i z ∈ V o r˘d˘cin˘ a lui G. vk−1 ). . . Conform propozitiei anterioare. a a s a ı a s Demonstratie. . s 2) ⇒ 3) Fie G quasi-tare conex ¸i cu m = n − 1 arce. Urm˘toarele afirmatii sunt echivalente: a ¸ 1) G este quasi-tare conex ¸i f˘r˘ cicluri. s ¸ 4) ⇒ 5) Fie G cu proprietatea 4). vk ). . Fiind quasi-tare conex. E) un graf orientat cu n ¸ noduri. Pentru orice noduri x. s 3) G este o arborescent˘ (adic˘ arbore cu r˘d˘cin˘). . v. . x) ¸i (z. Demonstr˘m c˘ d− (v) = 1 prin reducere la a a absurd. . . atunci ar exista dou˘ arce diferite e1 = (y1 . . . . ¸ 5) ⇒ 6) Fie G quasi-tare conex minimal. .1 (de caracterizare a arborescentelor). . vn }. . . . Deci x este o r˘d˘cin˘ a lui G ¸i astfel G este quasi-tare a a a s conex (conform propozitiei anterioare). a ı a a 5) G este quasi-tare conex ¸i minimal cu aceast˘ proprietate. . Demonstr˘m c˘ d− (x) = 0 prin reducere la absurd. (xk . Graful G fiind un arbore. . . Fiind quasi-tare conex. z) ¸i (x. y). a Presupunem adev˘rat˘ afirmatia pentru k − 1 ¸i o demonstr˘m pentru k. y ∈ V exist˘ drumuri s a a a a (z. . . s-ar obtine dou˘ drumuri distincte (x. . . . ¸ 6) G este conex ¸i exist˘ un nod x ∈ V astfel ˆncˆt d− (x) = 0 ¸i d− (v) = 1 ∀ v ∈ V \ {x}. . . . ¸ a a a a a ın Dac˘ am avea d− (x) > 0. . v. exist˘ drumuri (xk−1 . . Demonstratia prin inductie este ˆ ¸ ¸ ıncheiat˘. . . . s Teorema 5. v). contradictie cu ipoteza. . . iar G − e ar avea ˆ continuare a r˘d˘cina x (deoarece exist˘ drum elementar (x. . . Fie G = (V. exist˘ un drum (x. . ¸ a a a Pentru k = 1 lu˘m x1 = v1 . . atunci ar exista un nod v ∈ V ¸i drumuri (v. . Demonstr˘m c˘ ¸ a a G − e = (V. . Conform a a a a ipotezei de inductie. . . ¸a a a a a 4) exist˘ un nod x ∈ V astfel ˆncˆt pentru orice nod v ∈ V exist˘ un unic drum de la x la v. . (xk . . . y) ¸i (v. v1 ). xk−1 . . s a a 2) G este quasi-tare conex ¸i are m = n − 1 arce. v) ∈ E). (xk . . . . x fiind r˘d˘cin˘ s s ın a a a ˆ G. . . . este unic. Deoarece graful este a a ¸ s a s quasi-tare conex. nodul xn este o r˘d˘cin˘ a grafului G.1. . . Fiind quasi-tare conex. . n} c˘ exist˘ un nod xk ∈ V cu drumuri (xk . a a a a Luˆnd k = n. fiind ¸i lant. . v) ∈ E. v2 ). . . G este arbore (conform teoremei amintite mai sus). . . . . xk−1 ) ¸i (xk . . . . ¸ s aa Deci G este un arbore ¸i astfel are m = n − 1 arce (conform Teoremei de caracterizare a arborilor). . . . . vk ). ”⇒” Fie G = (V. . y. . 3) ⇒ 4) Fie G arborescent˘ ¸i x o r˘d˘cin˘ a lui G. . . iar a . . . atunci ar exista un arc e = (y. .e2 = (y2 . vk ). Dac˘ am avea d− (v) > 1. . . 1) ⇒ 2) Fie G quasi-tare conex ¸i f˘r˘ cicluri. . deci d (v) ≥ 1 (∃(y. . Demonstr˘m prin ¸ a inductie dup˘ k ∈ {1. V = {v1 . deci G este quasi-tare conex. . . G este conex. E \ {e}) nu este quasi-tare conex prin reducere la absurd. z) ˆ G − e. . . a ”⇐” Fie G = (V. acest drum. . . .

x) ∈ E. (4. G este quasi-tare a a a a a ın s ¸ conex. c) = (V. a ¸ s a Lema 5. vk . (5. a a Exemplul 5. fie es ∈ E un arc de cost minim avˆnd forma es = (y. x). Fie (G. c) nu depinde de alegerea r˘d˘cinii x.1. E). ın (7. . 3).1. 8) iar cel mai mare cost dintre aceste arce avˆnd arcul (5. m = este conex. F ) a lui G cu proprietatea c˘ a ¸a ¸ a c(T ) = min{c(T )|T = arborescent˘ partial˘ a lui G} se nume¸te arborescent˘ partial˘ de cost minim a grafului ponderat (G. 1).2.1. v2 ) ∈ E. deci G este un arbore ¸i astfel s 7) ⇒ 1) Fie G cu proprietatea 7). Din nou. . vn }. ¸ s a a a ın Fie x = vs o r˘d˘cin˘ ˆ G. fie ei ∈ E un arc de cost minim avˆnd forma ei = (y.1 ¸i Lemei a at s 5.1). Avem a ın nevoie de cˆteva notiuni ¸i rezultate preg˘titoare. a • dac˘ d− (x) > 0. y ∈ V (exist˘ un astfel de arc. . . deci lantul [x. atunci F = {ei |i ∈ {1. Fie (G. . at s a Demonstratie. . m = ¸ d (t) = n − 1. s − d (t) = n − 1. v1 ) ∈ E. 6). v3 ) ∈ E. Fie ei un a a arc de cost maxim din multimea {ei |i ∈ {1. y ∈ V . . deci ˆ ambele cazuri graful a ¸ ın α(G. 2).1. Conform Propozitiei 3. E) are o unic˘ r˘d˘cin˘ x ¸i aceasta verific˘ pro¸a a a a a s a priet˘¸ile 4).2. Definitia 5. vk .3. vi ). contradictie cu ipoteza. 1). . y] a ın ¸ ¸ ¸ este un drum de la x la y. ˆ contextul definitiei anterioare. ARBORESCENTE ¸ 55 G − e1 ar avea ˆ continuare r˘d˘cina x (deoarece exist˘ un drum (x. a a ¸ ¸ − 6) ⇒ 7) Fie G cu proprietatea 6). . . .1. c) un graf orientat ponderat ¸i quasi-tare conex.2. ın .2 Arborescente partiale de cost minim ¸ ¸ Definitia 5. a a a ¸ − s Deoarece d (x) = 0 nu putem avea (v1 .2. (1. V = {v1 . Atunci F = {ei |i ∈ {1. v1 . Definim graful partial α(G. . . dac˘ d− (x) = 0 atunci x este unica r˘d˘cin˘ a lui ¸ In ¸ a a a a − G. c) graful ponderat reprezentat ˆ Figura 5. ¸ a ¸ t∈V 5. deci (v1 . . y]. (4. F ) astfel: ¸ a • pentru fiecare nod vi ∈ V \ {x}. . .2. E).2. nu putem avea (v2 . y) ∈ E. Continuˆnd ˆ acest mod (inductie!) obtinem (v2 . (3.1. . Corolarul 5. Rezult˘ c˘ pentru orice nod y ∈ V exist˘ un lant elementar unic [x.2. ¸ ¸ a s a a as a ¸ a a a adic˘ dac˘ ¸i numai dac˘ are (cel putin) o r˘d˘cin˘. conform propriet˘¸ii 6) din Teorema 5. iar dac˘ d (x) > 0 atunci multimea F nu depinde de alegerea lui x. . (vk . y2 . deci (x.2. c) este cel a ¸ a reprezentat ˆ Figura 5. n}}. Concluzia rezult˘ imediat din demonstratia teoremei anterioare. v1 ) ∈ E. . . ¸ Observatia 5.2. v) ˆ G − e1 ) ¸i astfel ın a a a ın s G − e1 ar r˘mˆne quasi-tare conex (conform propozitiei anterioare). Un graf orientat are arborescente partiale dac˘ ¸i numai dac˘ este quasi-tare conex. obtinem c˘ graful α(G. . 7). c). . 6) ¸i 7) din teorema anterioar˘. v1 . ın Arcele de cost minim la intrarea ˆ noduri fiind (5. G = (V. n} \ {i }}. Corolarului 5. . c) un graf orientat ponderat. • dac˘ d− (x) = 0. s ¸a ¸ a Pezent˘m ˆ continuare un algoritm fundamental pentru rezolvarea acestei probleme. Rezult˘ c˘ x este o r˘d˘cin˘ ˆ G ¸i astfel.1. 5). . . .2. v1 ) ∈ E ¸i d− (v1 ) = 1. Orice arborescent˘ G = (V.1. Cum (x. . .TEMA 5.1.2. deci G este t∈V un arbore (conform Teoremei de caracterizare a arborilor) ¸i astfel nu are cicluri. . . (2. .1. 4). G = (V. n} \ {s}}. O arborescent˘ partial˘ T ∗ = ¸ ¸a ¸ a (V. Fie (G. . conform propozitiei anterioare.

¸i fie C un circuit elementar al ¸ s lui G.2. c|C (e) = min{c(x. a • pentru orice e = (y. (z. E2 = {(xC . y)|x ∈ V (C). x) ∈ E. unde V (C) este multimea nodurilor circuitului C. • pentru orice e = (xC . Dac˘ α(G. G|C = (V .2.TEMA 5. y) ∈ E ce atinge acest minim. E ) astfel: • V = V \ V (C) ∪ {xC }. y) ∈ E1 . xC )|y ∈ V (C). x) − c(z. atunci α(G. E). spunem c˘ arcul e provine din arcul (x. spunem din nou c˘ arcul e provine a ¸ a din arcul (y. x. c|C (e) = c(e). ¸i fie α(G. ∃x ∈ V (C) astfel ˆ at (y. Definim graful ponderat (G|C .2. y) ∈ E}. x) ∈ E(C)} (unde E(C) reprezint˘ multimea arcelor circuitului C). spunem c˘ nodul xC este obtinut prin contractia circuitului C. x) ∈ E ce atinge acest minim. y ∈ V (C)}. c) un graf orientat ponderat ¸i quasi-tare conex.1: Lema 5. a .2. c|C (e) = min{c(y. y) ∈ E2 . ıncˆ E3 = {(y. c). y) ∈ E}. xC ) ∈ E3 . y)|y ∈ V (C). G = (V. y).3. c|C ) se obtine din graful (G. (x. ¸ ¸ Spunem c˘ graful ponderat (G|C . unde E1 = {e ∈ E|e = (x. c) prin contractia circuitului C. ARBORESCENTE ¸ 1 56 20 8 20 2 3 23 30 5 40 7 10 10 10 15 15 5 4 5 20 25 6 Figura 5. x)|x ∈ V (C). (y. ¸ a Definitia 5. c) un graf orientat ponderat. ∃x ∈ V (C) astfel ˆ at (x. x) ∈ E}. Fie (G. c|C ). a • E = E1 ∪ E2 ∪ E3 . ıncˆ • pentru orice e = (x. c) nu are circuite. Fie (G. iar xC ∈ V este un ¸ ¸ ¸ nod nou. c) graful partial al s s ¸ lui G dat de definitia anterioar˘. c) este o arborescent˘ ¸ a a ¸a partial˘ de cost minim a grafului (G.

2.2. y) ∈ E este arcul din care provine un arc (xC . 4. E). c) un graf orientat ponderat. adic˘ din (4. Fie T = (V partial ϕ(T ) = (V. G = (V. 2).2. G|C = ¸ ¸ . Pentru graful ponderat (G. .4. s graful (G|C . xC ) provine din acel arc dintre (1. 2) − c(3. ¸i s ¸ a are costul 20.TEMA 5. c|C ) graful ponderat obtinut din G prin contractia circuitului C. 3) ce are diferenta de cost minim˘ dintre c(1.3. 3) ¸i are costul 8. c) din Exemplul 5. 6). . 3) − c(5. 2) = 20 − 10 = 10 ¸i c(1. adic˘ din (1. unde F1 = {e ∈ F |e = (x. F ) o arborescent˘ partial˘ ˆ graful G|C ¸i xT r˘d˘cina sa.3: 20 8 15 5 7 Exemplul 5.1 ¸i circuitul elementar C = (2. y). arcul (1. c|C ) este reprezentat ˆ Figura 5. 2) ¸i (1. ın s a s De exemplu. 6). 5.2. F ) ¸ (G. 6) provine din arcul de cost minim dintre (4.2. Definim graful ¸a ¸ a ın s a a al lui G prin: • dac˘ xT = xC (xC fiind nodul obtinut prin contractia circuitului C ˆ graful G). F2 = {(x. x. y) ∈ F } . 3) = 23 − 15 = 8. C un circuit (G|C . s a s Definitia 5. vn }. y ∈ V \ {xC }}. Fie ¸ elementar al lui G ¸i s (V . arcul (xC . 6) ¸i (5. V = {v1 .2: 1 8 30 9 = xC 40 20 6 Figura 5. 3. ARBORESCENTE ¸ 1 8 2 3 57 10 15 10 5 7 15 5 4 5 20 6 Figura 5. E ). atunci F = a ¸ ¸ ın F1 ∪ F2 ∪ [E(C) \ {e }]. y)|(x. .2. .2.

spunem c˘ arborescenta partial˘ ϕ(T ) se obtine ¸ ¸ a ¸ ¸ a ¸ din arborescenta partial˘ T prin decontractia circuitului C.4: Deci T este o arborescent˘ partial˘ (de cost minim. c1 ) ¸i ϕ(T ) arborescenta partial˘ ˆ graful (G.2. c1 ) = s ¸ ¸ ¸ (G|C . c1 ) = (G|C . C un circuit elementar al s ¸ ¸ lui G ¸i (G1 .5. c|C ) graful ponderat obtinut din G prin contractia circuitului C. avem ¸ ¸ ¸ c(ϕ(T )) = c1 (T ) + c(C). c1 ) calculat ¸i reprezentat ˆ Exemplul 5. 3) (arcul unic de pe circuitul C incident cu 3 spre interior). c) din Exemplul 5. ¸ 1 8 9 = xC 5 7 20 15 8 6 Figura 5.2. c) un graf orientat ponderat. ¸ 58 • dac˘ xT = xC .2. ¸ ¸ a ¸ Exemplul 5. x)}]. atunci F = F1 ∪ F2 ∪ {(y. xC ) ∈ F . x)} ∪ [E(C) \ {(z. 3.2 este reprezentat ˆ Figura 5. iar (z. ˆ Lema 5. Arcul (xC . Fie (G. 1 = xC . Atunci G are arborescente ¸ ¸ partiale dac˘ ¸i numai dac˘ G1 are arborescente partiale.2.2. conform Lemei 5.2. cu notatiile din acea definitie.3. 2) ¸i graful s (G1 .5.2. ARBORESCENTE ¸ (luˆnd un singur arc (x. iar e este un arc de cost maxim din E(C).2. y) ∈ F ). s ın ¸ ın Graful partial T = α(G1 . dac˘ xC = xT . c|C ) graful ponderat obtinut din G prin contractia circuitului C. xC ) din T s-a ˆ condus ¸i la eliminarea arcului (5.2. a a c1 (T ) + c(C) − c(e ). (y. .2. In contextul definitiei anterioare. 4. x) ∈ E este arcul din care provine unicul arc (y.1. c) construit˘ ¸a ¸ a ın conform Definitiei 5. C un circuit elementar al lui G ¸i (G1 . ϕ(T ) este o arborescent˘ partial˘ ˆ graful G. 6) ın circuitului C este reprezentat˘ ˆ Figura 5. In contextul definitiei anterioare.2) ˆ graful (G1 .TEMA 5.2. ¸ as a Lema 5.2. Fie (G. s Lema 5.4. dac˘ xC = xT . circuitul elementar C = (2.2. Atunci.4. Fie graful (G.2.3. Arborescenta partial˘ ϕ(T ) a grafului initial G obtinut˘ din T prin decontractia a a ınlocuit ˆ ϕ(T ) cu arcul (4.4. a E(C) este multimea arcelor circuitului C. 3) din care a provenit ¸i a ın s din care a provenit. c1 ) construit conform Definitiei 5. c1 ). 5.5. arcul (1. c) un graf orientat ponderat ¸i quasi-tare conex. unde F1 ¸i F2 sunt definite a s mai sus. avˆnd ¸a ¸ a ın a ¸ ¸ a ¸ ¸ a ¸ r˘d˘cina 1. x) ∈ E(C) (arcul unic de pe circuitul C incident cu x spre interior). Fie T s s ¸ ¸ a ın a o arborescent˘ partial˘ ˆ graful (G1 . ¸ ¸a ¸ a ın ˆ Definitia 5. 6) din T s-a ˆ a ın ınlocuit ˆ ϕ(T ) cu arcul (1. y) ∈ E pentru fiecare arc e = (xC .

nv = num˘rul de noduri la pasul curent a greedy.// se efectueaz˘ contractia circuitului C ¸ a ¸ k ← k + 1. structura α(G. c) graful partial al s s ¸ lui G dat de Definitia 5.2.//nv reprezint˘ nodul xC a contractie.4.2.2.5: Lema 5. cum T = α(G1 . c1 ) (conform Lemei 5. .2).//k = pasul. at a ¸ Algoritmul descris ˆ pseudocod are forma ın Edmonds : { repet˘ a { k ← 1. Revenind la exemplul anterior. rezult˘ c˘ ϕ(T ) este o arborescent˘ partial˘ de ın cost minim ˆ graful initial (G.6. c) un graf orientat ponderat ¸i quasi-tare conex ¸i fie α(G.//decontractia arborescentei partiale din graful curent ¸ ¸ ¸ ¸ .//se reia algoritmul pentru noul graf } } cˆt timp (exist˘ circuit). ın ¸ Conform Lemelor 5. c).2.2 ¸i 5.1. V = {1. .1 (Edmonds). deci ¸i ˆ graful G. ın ¸ ¸ ¸ //ˆ ordinea invers˘ a pa¸ilor ın a s k ← k − 1. cˆt timp (k > 0) a { decontractie. ¸˘ ¸ a ı Exemplul 5.1).TEMA 5. c|C ) graful ponderat obtinut din G prin contractia circuitului C ¸i fie T o arborescent˘ ¸ ¸ s ¸a partial˘ de cost minim ˆn acest graf.2. Fie (G. Fie (G. c) un graf orientat ponderat ¸i quasi-tare conex (verificarea s quasi-tare conexit˘¸ii poate fi efectuat˘ pe baza Propozitiei 5. Fie G = (V. n}. c). c) pentru graful curent a ¸ dac˘ (exist˘ circuit) //acesta contine circuite a a ¸ { determin˘ circuit. c1 ) este o arborescent˘ partial˘ de ¸a ¸ a a a ¸a ¸ a cost minim ˆ graful (G1 .//se determin˘ graful partial α(G.2. nv ← n.2. ARBORESCENTE ¸ 1 59 23 2 3 8 10 5 7 15 5 10 4 5 20 6 Figura 5. E).2. ¸ Algoritmul 5. .// se determin˘ un circuit elementar C a a nv ← nv + 1. Fie C un circuit elementar ˆn graful α(G.6 obtinem urm˘torul algoritm pentru determinarea unei arborescente s ¸ a ¸ partiale de cost minim. Fie ¸ ı s ın (G1 .4 este o ¸ a ı ¸ arborescenta partial˘ de cost minim ˆn graful (G.2. Atunci graful ϕ(T ) construit conform Definitiei 5.2. c). . c1 ) = (G|C . trecem la decontractiile succesive ale arborescentelor partiale de cost minim. c) din graful curent este arborescent˘ partial˘ de cost minim a ¸a ¸ a //ˆ acest graf. a a //nu mai exist˘ circuite.

c). dac˘ (j. unde n ¸i m reprezint˘ a a a s a numerele de noduri. Algoritmul Edmonds este specific metodei de programare Greedy.2. ARBORESCENTE ¸ nv ← nv − 1. Graful partial (structura de tip greedy) α(G. ˆ caz contrar.//se afi¸eaz˘ arborescenta partial˘ de cost minim s s a ¸ ¸ a }. a 0. respectiv de arce ale grafului dat. ın iar circuitul elementar C din acest graf poate fi determinat ¸i memorat folosind un vector P AS avˆnd s a semnificatia ¸ P AS[i] = k.TEMA 5. a 0. ˆ caz contrar. i) este un arc al grafului α(G. c) poate fi u¸or memorat ˆ ¸ s ıntr-un vector T AT A avˆnd a semnificatia ¸ T AT A[i] = j. dac˘ nodul i face parte din circuitul C de la un pas k.2. . se poate ar˘ta c˘ acest algoritm are complexitatea O(mn). ˆ imple¸ In mentarea optim˘. k ← k − 1.//se reia algoritmul pentru noul graf 60 } afi¸are. ın Observatia 5.

4.2. 9.1. 8.Tema 6 Clase particulare de grafuri 6. Un drum eulerian ˆ acest graf este ın ın (1.1: Exemplul 6. ¸ s b) Un graf neorientat se nume¸te eulerian dac˘ are (cel putin) un ciclu eulerian. Fie graful orientat reprezentat ˆ Figura 6.1. 3. 3. E) un graf. 2. 4).1 Grafuri euleriene Definitia 6. ciclu. 6. 5. 6.2: 61 . 2 3 1 4 5 6 Figura 6. 5. 1].1. drum simplu sau circuit ˆn ¸ ¸ ı graful G ce contine toate muchiile sau arcele lui G se nume¸te eulerian.1. s a ¸ c) Un graf orientat se nume¸te eulerian dac˘ are (cel putin) un circuit eulerian.1. Graful neorientat reprezentat ˆ Figura 6. 3.1.1. 4. 2. 5.1. 10. 2. 1 2 3 4 5 6 7 8 9 10 Figura 6. a) Fie G = (V. Un lant simplu. 5. 3.1. un ciclu eulerian al s˘u ın a fiind C = [1.2. s a ¸ Exemplul 6.1 este eulerian. 7. 6. 1.

. ın ın Dac˘ k = 1. Neexistˆnd noduri izolate. CLASE PARTICULARE DE GRAFURI 62 Observatia 6. dac˘ exist˘.1 (Euler.3. graful G fiind conex. a ın a Exemplul 6. drumurilor sau circuitelor euleriene nu este influentat˘ ¸ ¸ ¸ ¸ a de prezenta unor eventuale noduri izolate. considerˆnd ca r˘d˘cin˘ a parcurgerii ¸ a a a a ın ¸ DF un nod x1 ∈ V arbitrar fixat.3. 4. 2. y]. y ∈ V existˆnd un lant elementar a a ¸ continut ˆ ciclul C. . Conform Propozitiei s aa ¸ 4. .2. Graful din Exemplul 6. f˘r˘ noduri izolate. Fie T = (V. . 8. . s aa Observatia 6. E) un graf neorientat conex. Ck . Algoritmul 6. . ”⇐” Fie G = (V. Ck }. 6. s a a a • se parcurg cu prioritate muchiile (neparcurse anterior) ce nu apartin arborelui DF (adic˘ dac˘ ¸ a a exist˘ o astfel de muchie [x. ¸ ın Cum C contine toate muchiile lui G rezult˘ c˘ ¸ a a dG (x) = dC (x) = par.3). Ck }. se parcurge aceast˘ muchie ¸i nodul a a a s curent devine y. deci este eulerian. ın Aplicˆnd algoritmul anterior obtinem ciclul eulerian a ¸ [1.1. Rezult˘ c˘ G este conex.3. 2. incident˘ cu nodul curent x. iar dac˘ nu exist˘ o astfel de muchie se parcurge. E) un graf neorientat conex. Teorema 6. par ¸i f˘r˘ noduri izolate. ciclul C1 are un nod comun cu un alt ciclu din {C2 . k ≥ 1. . par ¸i f˘r˘ noduri izolate. a ın Dac˘ k = 2. s aa a ın Prezent˘m ˆ continuare un algoritm pentru determinarea unui ciclu eulerian bazat pe arborele DF al grafului dat. Continuˆnd acest procedeu de concatenare a ciclurilor.1. ∀ x ∈ V (orice ciclu este evident un subgraf par). 5. . ea indicˆnd un algoritm de ¸ ¸ a a determinare a unui ciclu eulerian ˆ ıntr-un graf neorientat conex. .1. 3. F ) arborele DF al lui G. poate fi s aa at efectuat˘ cu ajutorul parcurgerii DF (Algoritmul 3. . par ¸i f˘r˘ noduri izolate. par ¸i f˘r˘ noduri izolate. incident˘ cu nodul curent x.1. rezult˘ (prin inductie dup˘ k) c˘ obtinem un ciclu Ck ce a ¸ a a ¸ este eulerian ˆ G. ¸i cum aceast˘ a a s a muchie apartine lui C rezult˘ c˘ ¸i nodul x apartine lui C.1. 1].1. Existenta lanturilor. cˆt timp este posibil. ciclurilor. ın Exemplul 6.1. iar verificarea parit˘¸ii poate fi efectuat˘ cu a at a ajutorul Propozitiei 3. as a s Demonstratie. .1 este conex. . cu neglijarea nodurilor izolate. ¸i nodul curent devine z). fie acesta C3 . Un ciclu eulerian ˆ G poate fi obtinut astfel: • se porne¸te din nodul r˘d˘cin˘ x1 . Demonstratia teoremei anterioare este constructiv˘.4.1. ¸i fie C3 ciclul obtinut prin concatenarea ciclurilor C2 ¸i C3 . a Dac˘ k ≥ 2. Fie C un ciclu ¸ aa eulerian al lui G. deci putem analiza ˆ continuare doar grafurile f˘r˘ noduri ¸ ın aa izolate. 7.1. . 3. z] a a a a a arborelui DF . Arborele DF (1) al grafului din Exemplul 6. o muchie [x. atunci C2 este un ciclu eulerian ˆ G. ”⇒” Fie G = (V. a Dac˘ k ≥ 3.5. din conexitatea lui G obtinem c˘ C2 are un nod comun cu un alt ciclu din a ¸ a s ¸ s a {C3 . a s • se continu˘ parcurgerea ˆ modul descris mai sus.1. 5. Fie a s ¸ s a ıntˆ C2 acest ciclu ¸i C2 ciclul obtinut pornind din nodul comun ¸i parcurgˆnd ˆ ai C1 apoi C2 . Spunem ¸ s c˘ C2 se obtine prin concatenarea (alipirea) ciclurilor C1 ¸i C2 . graful G are o descompunere ˆ cicluri elementare muchie-disjuncte C1 . Fie G = (V. 9. Deci C contine ¸i toate nodurile lui ¸ a a s ¸ ¸ s G.1 (de determinare a unui ciclu eulerian). Un graf neorientat f˘r˘ a a noduri izolate este eulerian dac˘ ¸i numai dac˘ este conex ¸i par. Verificarea conexit˘¸ii. E) un graf neorientat eulerian.1.1 este reprezentat ˆ Figura 6.2. atunci C1 este un ciclu eulerian ˆ G.1. orice nod x ∈ V are o muchie incident˘. de caracterizare a grafurilor euleriene neorientate).TEMA 6. 10. ˆ a a ıntre orice dou˘ noduri distincte x.

iar arborele DF poate fi memorat cu ajutorul ¸a vectorului T AT A. CLASE PARTICULARE DE GRAFURI 1 2 3 4 63 5 6 7 8 9 10 Figura 6. Observatia 6.1.1.1.3.//elimin˘m [i. com¸ a at s plexitatea Algoritmului 6. Evident.1 este O(m). at a Demonstratie.1. pentru implementarea Algoritmului 6. a a Observatia 6. Verificarea dac˘ [i. j] ∈ DF revine la ”T AT A[i] = j sau T AT A[j] = i”.4.5. a }.1. aji ← 0.//elimin˘m [i. j] din graf i ← j. j] apartine arborelui DF . j] din graf a i ← j. ˆ cazul grafurilor simple putem memora ¸ ın arborele DF tot ˆ matricea de adiacent˘ A considerˆnd ın ¸a a a ¸ aij = 2 dac˘ muchia [i. deci [i. Corolarul 6. s a j ← 1. ”⇒” Fie G = (V. } } } cˆt timp (j ≤ n). dar ¸i a tuturor muchiilor grafului dat. v1 .1. . j] ∈ ciclu eulerian a a { aij ← 0. j] ∈ ciclu eulerian a a a { aij ← 0. unde m reprezint˘ num˘rul de muchii ale grafului dat. s a a cˆt timp (aij = 2) ¸i (j ≤ n) j ← j + 1. ˆ cazul grafurilor nesimple. . E) un graf neorientat f˘r˘ noduri izolate. vk . deci [i.1 graful dat ¸ In poate fi memorat cu ajutorul matricei de adiacent˘.//i este nodul curent al ciclului eulerian repet˘ a { afi¸eaz˘ i. j] ∈ DF a s a a dac˘ (j ≤ n) //exist˘. Un graf neorientat f˘r˘ noduri izolate are un lant eulerian deschis dac˘ ¸i nua a ¸ a s ˆ mai dac˘ este conex ¸i are exact dou˘ noduri de grade impare. y]. j] din graf revine la ”aij ← aij − 1 ¸i aji ← aji − 1”. aji ← 0. Pentru implementarea Algoritmului 6. Algoritmul descris ˆ pseudocod are forma ın ciclu eulerian(x) : { i ← x.// c˘ut˘m [i.1.1.//c˘ut˘m [i. orice lant eulerian are ca a s a ¸ extremit˘¸i cele dou˘ noduri de grade impare. Datorit˘ necesit˘¸ii parcurgerii DF .1. j] ∈ DF a dac˘ (j ≤ n) //exist˘. iar a s eliminarea unei muchii [i.3: Observatia 6. } altfel { j ← 1.1. avˆnd un lant eulerian ¸ aa a ¸ deschis μ = [x. G este conex. In plus. . .TEMA 6. . cˆt timp (aij = 1) ¸i (j ≤ n) j ← j + 1.

Rezult˘ c˘ s a a dG (x) = dG (x) − 1 = impar.2 este conex.2.1.1 el contine un ciclu eulerian C = [x.2.1. vk . Fie G graful definit ca mai sus.2.1.1. Ad˘ugˆnd muchia e la lantul μ a a a ¸ obtinem un ciclu eulerian C = [x. .1.2.1. s a ¸ Exemplul 6. ı ¸ s b) Un graf neorientat se nume¸te hamiltonian dac˘ are (cel putin) un ciclu hamiltonian. deci graful are drumuri euleriene de forma (1. .7. Folosind trecerea ˆ ¸ ıntre grafurile G ¸i G ¸i ˆ s s ıntre lantul eulerian deschis μ ¸i ciclul ¸ s eulerian C din demonstratia corolarului anterior.1. d (y) = d− (y) − 1. Un lant elementar. ”⇐” Fie G = (V.1.1.1. Observatia 6. Graful eulerian din Exemplul 6. Demonstratia este analog˘ cu cea a Corolarului 6. Conform Teoremei 6. pentru orice nod x. s a ¸ c) Un graf orientat se nume¸te hamiltonian dac˘ are (cel putin) un circuit hamiltonian. Rezult˘ c˘ G este conex ¸i par. CLASE PARTICULARE DE GRAFURI 64 Fie G = (V. deci conform a a s a Teoremei 6. dG (z) = dG (z) = par ∀ z ∈ V \ {x.6. a 6. . . . f˘r˘ noduri izolate.1.1. y. . acest algoritm poate fi utilizat ¸i pentru determinarea unui drum eulerian ¸ s deschis ˆ ıntr-un graf orientat ce verific˘ ipotezele Corolarului 6. ¸ a s a Demonstratie. . dG (y) = dG (y) − 1 = impar. x]. E) un graf.2. . cu exact dou˘ noduri x ¸i y aa a s de grade impare.2 Grafuri hamiltoniene Definitia 6. 4).1.1. d (z) = d (z) ∀ z ∈ V \ {1. a) Fie G = (V. Un graf orientat f˘r˘ noduri a a + − izolate este eulerian dac˘ ¸i numai dac˘ este conex ¸i d (x) = d (x). v1 .1. f˘r˘ noduri izolate ¸i aa s + − + − + − d (1) = d (1) + 1.1.1. a analog Observatiei 6. . Existenta unui circuit se obtine pornind dintr-un nod arbitrar ¸i parcurgˆnd succesiv arce cˆt ¸ ¸ s a a timp este posibil (revenirea ˆ nodul initial este asigurat˘ de conditia d+ (x) = d− (x) ∀x). . unde e = [y. y. drum elementar ¸ ¸ sau circuit elementar ˆn graful G ce contine toate nodurile lui G se nume¸te hamiltonian. ¸ ¸ Observatia 6. . deoarece pentru ca un circuit s˘ treac˘ de la nodul 1 la nodul 3 ¸i s˘ revin˘ ˆ nodul 1 ar trebui s˘ treac˘ de cel putin dou˘ ori a a s a a ın a a ¸ a prin nodul 2.1. precum ¸i Algoritmul 6. ea indicˆnd un algoritm de de¸ ¸ a a terminare a unui circuit eulerian ˆ ıntr-un graf orientat ce verific˘ ipotezele teoremei. y] ˆ graful G. a s a s ıncˆ ˆ s d+ (z) = d− (z) pentru orice nod z diferit de x ¸i y. . E) un graf neorientat conex. E ∪ {e}). d (4) = d (4) − 1. . utilizˆnd acum Teorema 6. se obtine un algoritm ¸ s ¸ pentru determinarea lanturilor euleriene deschise ˆ ¸ ıntr-un graf dat.1 nu este hamiltonian. x] ˆ graful G . vk . v1 .TEMA 6. 4}. Teorema 6. Eliminˆnd muchia e = [y.2 (de caracterizare a grafurilor euleriene orientate). orice drum eulerian are ca extremitate initial˘ nodul x ¸i ca extremitate final˘ nodul y.1. Demonstratia Teoremei 6.1. Graful din Exemplul 6.1. x]. . ˆ ¸ ¸ a ınlocuind ”ciclu” cu ”circuit” ¸i s + − ”d(x) = par” cu ”d (x) = d (x)”. v1 . as a s Demonstratie.2 este constructiv˘. y}. Un graf orientat f˘r˘ noduri izolate are un drum eulerian deschis dac˘ ¸i numai a a as + − + dac˘ este conex ¸i are dou˘ noduri x ¸i y astfel ˆ at d (x) = d (x) + 1. x] de ¸ ın pe ciclul C obtinem un lant eulerian deschis μ = [x. e ∈ E (muchie nou˘). .6. In plus. De asemenea. vk . ¸ ¸ a a Exemplul 6.5. Demonstratia este analog˘ cu cea a Teoremei 6. . ın ¸ a ¸ Corolarul 6.1. . ciclu elementar. G este conex ¸ ın ¸i par.

n − 1}|[vi . y] ∈ E}.2. Dispunem totu¸i de numeroase conditii fie necesare. ciclu. 5.TEMA 6. 6.1 (Bondy. y ∈ V astfel ˆncˆt ı a x = y. Graful reprezentat ˆ Figura 6. E) un graf neorientat simplu cu n ≥ 3 noduri. .2. y]. 3. deci. . . Chv´tal). s card (A) + card (B) ≥ n. Cˆteva astfel de conditii vor fi a a ¸ prezentate ˆ continuare. CLASE PARTICULARE DE GRAFURI 65 Exemplul 6. [x. Lema 6. y]. s ın Cazul 1) Dac˘ C nu contine muchia [x. y] = (V. . fie suficiente. Fie G = (V. ın Observatia 6. Acest graf nu este eulerian. deci este suficient s˘ studiem hamila s a toneitatea pentru grafurile simple. y] este hamiltonian. 1]. Evident. 2. . y] ∈ E ¸i d(x) + d(y) ≥ n. y]}) este hamiltonian. problemele ¸ ın ¸ a de testare a hamiltoneit˘¸ii unui graf ¸i de determinare a unui ciclu sau circuit hamiltonian optim at s ˆ ıntr-un graf ponderat sunt probleme pentru care nu se cunosc (pˆn˘ ˆ prezent) algoritmi de rezolvare a a ın a s s ¸ cu complexitate polinomial˘ (numite ¸i probleme NP).2.2. Avem card (A) = d(x) ¸i card (B) = d(y). s Atunci graful G este hamiltonian dac˘ ¸i numai dac˘ graful as a G + [x. v2 . vi+1 ] ∈ E}. . . y] din ciclul C obtinem a ¸ ¸ un lant hamiltonian ¸ μ = [x = v1 . y]. y] hamiltonian ¸i C un ciclu hamiltonian ˆ acest graf. pentru ca un graf dat s˘ fie hamiltonian.1 este hamiltonian. . drum sau circuit ¸ hamiltonian nu utilizeaz˘ bucle ¸i nici muchii sau arce multiple. 7. deci G + [x. a 1 2 3 4 5 6 7 8 Figura 6. avˆnd 4 noduri de grade impare. 8. . Demonstratie. atunci C este un ciclu hamiltonian ˆ graful G. atunci prin eliminarea muchiei [x.2. . Spre deosebire de problemele euleriene studiate ˆ sectiunea anterioar˘.2. s ın Reciproc. Fie a x. .2. fie G + [x.1. . un ciclu hamiltonian al s˘u fiind ın a C = [1.1: Observatia 6. . E ∪ {[x. a ¸ ın Cazul 2) Dac˘ C contine muchia [x. vn = y] ˆ graful G.2. dac˘ G este hamiltonian atunci orice ciclu hamiltonian ˆ G este ciclu hamil¸ a ın tonian ¸i ˆ G + [x. Este evident c˘ ˆ ¸ a ıntr-un graf cu n ≥ 3 noduri orice lant. B = {i ∈ {1. n − 1}|[x. conform ipotezei. Fie ın A = {i ∈ {1. 4.

v2 . vn−1 . 5] (deoarece d(1) + d(5) = 4 + 2 ≥ n = 6).2. 4] (deoarece a a d(2) + d(4) = 2 + 4 ≥ n.3. v1 ] cu nodurile v1 . 5] ¸i [3. y = vn . vn distincte este un ciclu hamiltonian ˆ Kn ). Demonstratie. Dac˘ avem cl(G) = Kn . ˆ graful curent).2. Concluzia este evident˘ conform Lemei 6. y] ¸ a a ˆ ıntre noduri distincte ¸i neadiacente x. .3 este hamiltonian.2. [2. . x] este un ciclu hamiltonian ˆ graful G.2. atunci G a este hamiltonian. .2. . 5] (deoarece d(2) + d(5) = 3 + 3 ≥ n. Concluzia rezult˘ folosind lema anterioar˘ ¸i faptul c˘ graful complet Kn . s ın Observatia 6. Dac˘ H = cl(G). este ¸ a as a evident hamiltonian (orice succesiune de forma [v1 . . y] ∈ E(H) avem ¸ a ¸ dH (x) + dH (y) < n. . Lema 6. 6]. y cu [x. . Chv´tal). Graful cl(G) este bine definit. atunci pentru orice noduri distincte x. Fie G graful reprezentat ˆ Figura 6. ¸ a s ¸ Lema 6. vn . Inchiderea lui G. ˆ graful curent!).3. obtinem ˆ s ¸ ınchiderea cl(G) = K6 . Fie k ∈ A ∩ B. ın 2 3 1 4 6 5 Figura 6. .2. notat˘ cu ¸ a cl(G). avem card (A ∪ B) ≤ n − 1. 6]. CLASE PARTICULARE DE GRAFURI Cum A ∪ B ⊆ {1.TEMA 6. Atunci a [x = v1 .2.2: Ad˘ugˆnd succesiv muchiile [1. ¸ a a a Exemplul 6. ın 66 ˆ Definitia 6. . vk . Reciproca lemei anterioare nu este adev˘rat˘. v2 . [3. [2. Fie G un graf neorientat simplu cu n ≥ 3 noduri. . este graful neorientat simplu obtinut din G prin ad˘ugarea repetat˘ a tuturor muchiilor [x. Fie G un graf neorientat simplu cu n ≥ 3 noduri. a Atunci G este hamiltonian dac˘ ¸i numai dac˘ graful cl(G) este hamiltonian. dar cl(G) = G = K6 . . .2 (Lema ˆ ınchiderii.5.2. n − 1}. . . unde E(H) este multimea muchiilor grafului H. . De exemplu graful G reprezentat ˆ ¸ a a ın Figura 6. n ≥ 3. Bondy.2. Fie G un graf neorientat simplu cu n ≥ 3 noduri.1 ¸i definitiei anterioare.3.2. vk+1 . Observatia 6. as a Demonstratie. ¸ a a Acest fapt poate fi demonstrat prin inductie dup˘ num˘rul muchiilor ad˘ugate. . . . . ın Observatia 6.2. y cu d(x) + d(y) ≥ n ˆ graful curent. unde K6 este graful complet cu 6 noduri. ın ın [2. .2. adic˘ A ∩ B = ∅. nedepinzˆnd de ordinea de ad˘ugare a muchiilor.2. . deci card (A ∩ B) = card (A) + card (B) − card (A ∪ B) ≥ n − (n − 1) = 1.4.

graful reprezentat ˆ Figura 6. ˆ ordine cresc˘toare.2. 5. a Dac˘ pentru orice p. Dac˘ a dk > k. Fie G = (V.2. dar d3 + d4 = 7 < n = 8).2 (Teorema lui P´sa). De exemplu. ∀ k < n−1 . 3. pentru k = atunci G este hamiltonian. 3. 5. p = q ⇒ dp + dq ≥ n. Fie G un graf neorientat simplu cu n ≥ 3 noduri avˆnd a gradele d1 ≤ d2 ≤ · · · ≤ dn . Demonstratie. a ın a 2 Astfel nici reciproca Teoremei lui Chv´tal nu este adev˘rat˘. De exemplu. dq ≤ q. Teorema lui Chv´tal generalizeaz˘ Teorema lui Bondy.2. Aceast˘ generalizare este ¸ a a a strict˘.2. graful G din Exemplul 6. ¸ a a a a s Observatia 6. 2.3 are cl(G) = Kn .2. ˆ ordine cresc˘toare. a ın ın a deci verific˘ ipoteza Teoremei lui Chv´tal dar nu verific˘ ipoteza Teoremei lui Bondy (d3 = 3 ≤ 3. Dac˘ pentru orice k ∈ N este verificat˘ proprietatea a a n dk ≤ k < ⇒ dn−k ≥ n − k. 4. dar nu verific˘ ipoteza a a Teoremei lui Chv´tal (are gradele.1 (Teorema lui Bondy).1 (Chv´tal). CLASE PARTICULARE DE GRAFURI 2 3 67 1 4 6 5 Figura 6.2.TEMA 6.4 are gradele. 3. 2 dk+1 > k. n−1 2 ¸i n = impar. atunci G este hamiltonian. 3. 5. E) un graf neorientat simplu cu n ≥ 3 noduri avˆnd gradele a a d1 ≤ d2 ≤ · · · ≤ dn . 6. Fie G un graf neorientat simplu cu n ≥ 3 noduri avˆnd gradele o a d1 ≤ d2 ≤ · · · ≤ dn . Se arat˘ c˘ graful G verific˘ ipoteza Teoremei lui Chv´tal ¸i astfel este hamiltonian. Corolarul 6. 2. 4. Reciproca ¸ a a a a nu este adev˘rat˘. Se arat˘ c˘ are loc egalitatea cl(G) = Kn ¸i conform lemei anterioare rezult˘ astfel c˘ ¸ a a s a a G este hamiltonian. deci d2 ≤ 2 < n dar d4 < 4).6. a a a Corolarul 6. Demonstratie.2. a a a d4 = 4 ≤ 4. 2 atunci G este hamiltonian. q ∈ N este verificat˘ proprietatea a dp ≤ p. s .7. Dac˘ graful G verific˘ ipoteza Teoremei lui Chv´tal atunci cl(G) = Kn . Observatia 6. 3.2. 4.3: Teorema 6.

Demonstratie.2.2. y distincte ¸i neadiacente avem a a s d(x) + d(y) ≥ n. E) un graf neorientat simplu cu n ≥ 3 noduri. a o a Corolarul 6. Teorema lui P´sa generalizeaz˘ Teorema lui Ore. a o 2 3 1 4 6 5 Figura 6.4: Demonstratie. 4. ¸ o a a a De exemplu. Aceast˘ generalizare este strict˘. deci ın a verific˘ ipoteza Teoremei lui P´sa.2.3 (Teorema lui Ore). 2. 4.2. 4. graful reprezentat ˆ Figura 6. Dac˘ pentru orice dou˘ noduri x. 3. Dac˘ a n d(x) ≥ . Generalizarea este strict˘. Fie G = (V. Fie G = (V.9. dar nu verific˘ ipoteza Teoremei lui Ore. 4. Observatia 6. atunci G este hamiltonian.2. deci verific˘ ın a a ipoteza Teoremei lui Bondy. Teorema lui Bondy generalizeaz˘ Teorema lui P´sa. 4.6 are gradele. ∀ x ∈ V.4 (Teorema lui Dirac).2. De ¸ a o a exemplu. ordonate cresc˘tor. graful reprezentat ˆ Figura 6. dar nu verific˘ ipoteza Teoremei lui P´sa. Se arat˘ c˘ graful G verific˘ ipoteza Teoremei lui P´sa (corolarul anterior) ¸i astfel ¸ a a a o s este hamiltonian. 2 . 2. ordonate cresc˘tor. CLASE PARTICULARE DE GRAFURI 2 3 68 1 4 8 5 7 6 Figura 6.5 are gradele.5: Corolarul 6. Se arat˘ c˘ graful G verific˘ ipoteza Teoremei lui Bondy (corolarul anterior) ¸i astfel ¸ a a a s este hamiltonian. 4.2.2. E) un graf neorientat simplu cu n ≥ 3 noduri. 3. 2.TEMA 6.8. 4. Observatia 6.

3. . Un graf G = (V. ak ∈ A ¸i b1 . 6}. a2 .7 verific˘ ipoteza Teoremei lui Ore. . a2 . De exemplu. deci are lungimea 2k. .2.3. . bk ∈ B. . b1 .2. ın Exemplul 6. 3.3. graful reprezentat ˆ Figura 6.10.1. .1. a1 .3.6: Figura 6. . b2 . ı s a ˆ B.2. Observatia 6. . Graful reprezentat ˆ Figura 6. 3. 6}.2. 5} ∪ {2. 69 Demonstratie. .TEMA 6. b1 ] cu a1 . Teorema lui Ore generalizeaz˘ Teorema lui Dirac.ˆ fiecare muchie sau arc al grafului are o extremitate ˆn A ¸i cealalt˘ extremitate ı. luˆnd partitia nodurilor V = ın a ¸ {1. Un graf cu n ≥ 2 noduri este bipartit dac˘ a ¸i numai dac˘ nu contine cicluri de lungime impar˘. . ak .3. . E) un graf bipartit avˆnd partitia nodurilor V = A ∪ B ca ˆ ¸ a ¸ ın definitia anterioar˘. cu evidentierea partitiei nodurilor a ¸ ¸ prin a¸ezarea ˆ stˆnga a nodurilor din partea A = {1. Orice ciclu al grafului G are una din formele [a1 . ¸ s a a ¸ B = ∅. a ın Figura 6. . A∩B = ∅) a.1: Teorema 6. Se arat˘ c˘ graful G verific˘ ipoteza Teorema lui Ore (corolarul anterior). 5} ¸i ˆ dreapta a nodurilor din partea s ın a s ın B = {2. Aceast˘ generalizare este ¸ a a strict˘. CLASE PARTICULARE DE GRAFURI atunci G este hamiltonian. b2 . O alt˘ reprezentare a acestui graf bipartit. ak . . E) se nume¸te bipartit dac˘ exist˘ o partitie V = A ∪ B (A = ∅. este dat˘ ˆ Figura 6. ”⇒” Fie G = (V.2.3 Grafuri bipartite Definitia 6. a1 ] sau ¸ a s [b1 . 4. bk . s a ¸ a Demonstratie. .1. . bk .1 (de caracterizare a grafurilor bipartite). . 4. deci este ¸ a a a hamiltonian. b2 . . a2 . dar nu a ın a verific˘ ipoteza Teoremei lui Dirac.3 este bipartit.7: 6. a 2 3 2 3 1 4 1 4 6 5 6 5 Figura 6.

E) un graf cu n ≥ 2 noduri ce nu contine cicluri de lungime impar˘. Ai = ∅. . Conform etapei 1) rezult˘ c˘ toate componentele conexe Gi cu cel putin dou˘ noduri sunt grafuri bipartite. v1 ) = 1. x) ¸i d(v. . Deoarece muchia [x. Fie a a s A = A1 ∪ · · · ∪ Ak ¸i B = B1 ∪ · · · ∪ Bk . . y] apartine unuia din aceste cicluri). Folosind aceast˘ descompunere. E1 ). . y ∈ A sau x. . Fie s ¸ a a s A = {x ∈ V |d(v. Fie v ∈ V un nod arbitrar fixat. y) = num˘r impar. v] lantul ˆ ¸ ınchis obtinut parcurgˆnd ˆ ai lantul μ1 de la v la x. . Deoarece d(v. Cs (iar muchia [x. Evident. . deoarece graful este conex. Fie v1 un nod s a a vecin cu v (exist˘. Atunci a a s s ın ¸s [x. deci a s ¸ a s v1 ∈ B ¸i astfel B = ∅. x. x) ∈ N prin a d(v. Evident. . Avem a l(μ) = l(μ1 ) + 1 + l(μ2 ) = d(v. . . . Fie μ1 un lant de lungime minim˘ de la v la x ¸i μ2 un lant de lungime minim˘ de la v a s ¸ s la y. . fals. deci graful G este bipartit. x) − 1. lanturile μ1 ¸i μ2 sunt elementare. Deoarece G nu contine cicluri de lungime impar˘. y) = d(v. Pentru fiecare astfel de component˘ conex˘. Fie ¸ ¸ μ = [v. Atunci d(v. Definitia este corect˘. y] ∈ E o muchie (sau arc) a ın s a ¸ a s ¸ a arbitrar fixat˘. .TEMA 6. y). Demonstr˘m prin reducere la absurd c˘ orice muchie (sau arc) a grafului are o extremitate ˆ A ¸i a a ın s cealalt˘ extremitate ˆ B ¸i astfel va rezulta c˘ graful este bipartit. . x) = num˘r impar}. . CLASE PARTICULARE DE GRAFURI 70 ”⇐” Fie G = (V. y ∈ B. deoarece Gi nu contine bucle. . . . Fie [x. [x. contradictie cu ipoteza. fie Vi = Ai ∪Bi ¸ a a a partitia corespunz˘toare grafului bipartit Gi . deci A = ∅. . Gk au aceast˘ proprietate. Gk = (Vk . Dac˘ exist˘ ¸i componente conexe Gi cu un singur nod ¸ a a as s ¸ (adic˘ card Vi = 1 ¸i Ei = ∅. x) = min{l(μ)|μ este lant de la v la x ˆ G}. deci l(μ1 ) = d(v. adic˘ numerele d(v. x) ¸i l(μ2 ) = d(v. . . y) au aceea¸i paritate. Cs are lungimea impar˘. . Presupunem prin absurd c˘ x. a ın . . Bi = ∅ sau Bi = Vi . atunci a pentru fiecare astfel de component˘ conex˘ definim Ai = Vi . Pentru a ¸ ¸ a grafuri neorientate d(v. lungimea lantului ˆ a ¸ ınchis μ poate fi scris˘ sub forma a l(μ) = 2l(L1 ) + · · · + 2l(Lr ) + l(C1 ) + · · · + l(Cs ). Ek ) componentele sale s conexe. apoi muchia [x. y] nu apartine lantului μ1 . Atunci V = A ∪ B este o partitie ¸i fiecare muchie sau arc al grafului G are o extremitate ˆ A ¸i ¸ s ın s cealalt˘ extremitate ˆ B. deoarece graful este conex ¸i are cel putin dou˘ noduri). Demonstr˘m ¸ a a c˘ graful G este bipartit ˆ dou˘ etape. y. deci cel putin unul a a a a ¸ a ¸ ¸ din ciclurile C1 . a ın a Etapa 1) Presupunem c˘ graful G este conex. buclele fiind cicluri de lungime 1). ¸ ın unde l(μ) reprezint˘ lungimea lantului μ. . . y] nu apartine nici lantului μ2 . rezult˘ c˘ ¸i componentele sale conexe ¸ a a as a a a G1 . y] ¸i apoi lantul μ2 de ¸ a ıntˆ ¸ s ¸ la y la v. x) = num˘r par} ¸i B = {x ∈ V |d(v. V = A ∪ B ¸i A ∩ B = ∅. deoarece ˆ caz contrar y ar fi penultimul nod al acestui lant ¸i cum orice ¸ ¸ sublant (portiune) al unui lant de lungime minim˘ este un lant de lungime minim˘ ˆ ¸ ¸ ¸ a ¸ a ıntre extremit˘¸ile at sale am avea d(v. Cum l(μ) este un num˘r impar. y] nu apartine lanturilor μ1 ¸i μ2 . . Lr ale lanturilor μ1 ¸i μ2 r˘mˆne o multime nevid˘ de ¸ ¸ cicluri (elementare) muchie-disjuncte C1 . rezultˆ cˆ l(C1 ) + · · · + l(Cs ) = num˘r impar. rezult˘ c˘ prin eliminarea din lantul ˆ ¸ ¸ s a a ¸ ınchis ¸ s a a ¸ a μ a eventualelor portiuni comune L1 . v) = 0 rezult˘ c˘ v ∈ A. . a Etapa 2) Fie acum G un graf oarecare ¸i G1 = (V1 . Demonstratia prin reducere la absurd este ˆ ıncheiat˘. . x) + 1 + d(v. x) se nume¸te distanta de la v la x. Pentru orice nod a x ∈ V definim num˘rul d(v. Analog.

. x) = lungimea lantului elementar unic de la vi la x ˆ arborele BF (vi ) ¸ ın a (corespunz˘tor parcurgerii BF a grafului neorientat G pornind din nodul vi . s ¸ a – ˆ caz contrar componenta Gi este graf bipartit ¸i Vi = Ai ∪Bi este partitia corespunz˘toare In acestui graf bipartit. s componenta Gi nu este graf bipartit. deoarece contine cicluri de lungime ın ¸ impar˘ (de exemplu ciclul [1. Ai = ∅ pentru urm˘toarele componente Gi (se asigur˘ astfel c˘ A = ∅ ¸i B = ∅). . deci nici graful G nu este bipartit ¸i algoritmul se ˆ ıncheie.TEMA 6. a Corolarul 6. dac˘ graful a G este orientat se parcurge graful neorientat obtinut prin eliminarea orient˘rii arcelor!). . indicˆnd urm˘torul algoritm ¸ ¸ a a a de determinare dac˘ un graf G este bipartit ¸i.2. Ei ) cu cˆte un singur nod.ˆ x. Cum B = V \ A ¸i B = V \ A rezult˘ c˘ A = A ¸i B = B . se parcurg a a a urm˘toarele etape: a – Dac˘ [vi . v2 ∈ A . . adic˘ Vi = {vi }.1. deci avem. Demonstratia teoremei anterioare este constructiv˘. atunci a a ı. deci avem. 2. .3. De exemplu. E) are o unic˘ partitie V = A ∪ B ce verific˘ a ¸ a Definitia 6. se parcurg urm˘toarele a ¸ a a etape: – Se fixeaz˘ un nod vi ∈ Vi . a – Se calculeaz˘ distantele d(vi . w2p+1 = y] lant de lungime minim˘ de la a ¸ a v la y. Ei ) cu cel putin dou˘ noduri. 1] de lungime 3). atunci graful G nu este bipartit ¸i algoritmul se ˆ a a s ıncheie. .2 nu este bipartit. . y ∈ Bi .3. . a • Pentru fiecare component˘ Gi = (Vi . Graful reprezentat ˆ Figura 6. . ¸ a – Se calculeaz˘ multimile a ¸ a s a Ai = {x ∈ Vi |d(vi . succesiv: ¸ a v = v0 ∈ A .2. v2k = x ∈ A . y] ∈ Ei a. Analog. w1 . succesiv: v = w0 ∈ A . Rezult˘ c˘ A ⊆ A ¸i B ⊆ B . . x) = num˘r impar}. . fie V = A ∪ B a ¸ a a o partitie arbitrar˘ ce verific˘ Definitia 6. Bi = ∅ pentru prima component˘ Gi ¸i In a ¸ a s a a a s Bi = Vi . submultimile A ¸i B definite ˆ etapa 1) a demonstratiei ¸ ¸ s ın ¸ ˆ teoremei anterioare determin˘ unica partitie cu proprietatea c˘ v ∈ A. Intr-adev˘r. v1 .3. pentru orice nod y ∈ B exist˘ μ = [v = w0 . . . . a unei partitii V = A ∪ B a a s ın ¸ nodurilor sale. 3. v1 ∈ B . a a s s a a s Observatia 6. . . v2k = x] lant de lungime minim˘ de la v la x. vi ] ∈ Ei (bucl˘). • Se determin˘ componentele conexe G1 . w2 ∈ A . .1 ¸i proprietatea v ∈ A . Pentru orice nod x ∈ A exist˘ ¸ a a ¸ s a μ = [v = v0 . CLASE PARTICULARE DE GRAFURI 71 Exemplul 6. a ¸ d(vi . – ˆ caz contrar se calculeaz˘ multimile Ai = Vi . .1. Gk .3. x) pentru toate nodurile x ∈ Vi . w2p+1 = y ∈ B . • Pentru fiecare component˘ Gi = (Vi . y ∈ Ai sau x.3. . ¸ Demonstratie. Orice graf bipartit conex G = (V. Pentru un nod v arbitrar fixat. . w1 ∈ B . . x) = num˘r par} ¸i Bi = {x ∈ Vi |d(vi .1. – Dac˘ exist˘ o muchie (sau arc) de forma [x. ˆ caz afirmativ.

1. 5. Atunci graful G este bipartit ¸i o partitie a ¸ s ¸ corespunz˘toare este V = A ∪ B. 6) = 2. 2) = d(1. cu evidentierea partitiei nodurilor.3. Aplic˘m algoritmul din observatia anterioar˘. cu A = A1 ∪ · · · ∪ Ak ¸i B = B1 ∪ · · · ∪ Bk . deci s a ı. 4. 5) = 1.3. 7}. y ∈ A sau x. ¸ ¸ Figura 6. d(1. ın a ¸ a Fixˆnd nodul v = 1 (pentru singura component˘ conex˘). 6. Fie graful reprezentat ˆ Figura 6. a s Exemplul 6.3.2. d(1.2. d(1. 8} ¸i B = {2. iar toate compo¸ a nentele conexe cu cˆte un singur nod nu contin bucle. 7) = 3. obtinem distantele a a a ¸ ¸ d(1. este dat˘ ˆ Figura 6. d(1.ˆ x. 8) = 4. graful dat este bipartit ¸i unica partitie corespunz˘toare este V = A ∪ B. 1) = 0. 3. 4) = d(1. 3) = d(1. y] a. y ∈ B.3.TEMA 6. O reprezentare a acestui s ¸ a a ın graf bipartit. CLASE PARTICULARE DE GRAFURI 72 • Toate componentele conexe cu cel putin dou˘ noduri sunt grafuri bipartite. deci A = {1. Nu exist˘ nicio muchie [x.2: .

Distanta minim˘ de la un nod x la el ˆ si este egal˘ cu zero. dac˘ k ≥ 1 a ⎩ i=1 (adic˘ suma costurilor arcelor sau muchiilor sale). . 7. xk−1 . y ∈ V . x1 . . E). . In ¸ acestei probleme. . dac˘ functia cost a a ¸ c este strict pozitiv˘. . . . unde G = (V. xk ) este un drum al grafului G. y) ˆ graful G cu proprietatea c˘ ın a c(μ ) = min{c(μ)|μ este drum de la x la y ˆ G} ın se nume¸te drum minim (drum de cost minim. . .1. . ın Observatia 7. Eliminˆnd eventualele circuite C1 . Dac˘ drumul μ este minim atunci ¸i drumul elementar μ este minim ¸i c(e) = 0 pentru orice a s s ¸ a muchie sau arc e al circuitelor C1 . . . Cp . . . .Tema 7 Distante ¸i drumuri minime ¸ s Problema determin˘rii distantelor ¸i drumurilor minime ˆ a ¸ s ıntre nodurile unui graf ponderat apare ˆ ın ˆ continuare vom prezenta doi algoritmi clasici pentru rezolvarea numeroase aplicatii practice. k=1 73 . k ∈ N. . vn } iar c : E → R+ . . a Observatia 7.1. c) un graf ponderat. Deci existenta unui drum minim de la x la y implic˘ existenta unui drum minim elementar de la x la y. Un drum μ = (x. atunci orice drum minim este elementar. Fie (G. . dac˘ k = 0. . x1 . . ek . drumul minim ¸ ¸ a ınsu¸ a elementar de la x la x fiind drumul de lungime zero. c). . a b) Fie x.1. avem echivalenta: exist˘ dru¸ ¸ a ¸ a muri minime de la x la y dac˘ ¸i numai dac˘ exist˘ drumuri de la x la y.1. e1 .3. V = {v1 .1. drum de pondere minim˘) de la x la s a s ¸ a y ˆ graful ponderat (G. . Multimea drumurilor elementare fiind evident finit˘. . . as a a Observatia 7. a e1 . Cp dintr-un drum μ de la nodul x la nodul ¸ a y obtinem un drum elementar μ de la x la y cu proprietatea c˘ c(μ ) = c(μ) − ¸ a p c(Ck ) ≤ c(μ). unde x0 . . . Mai mult. c). ek ∈ E.1. k c(μ) = c(ei ). atunci costul (ponderea) lui μ este ⎧ a ⎨ 0.2. Astfel distanta minim˘ de la x la y poate fi ¸ ¸ a considerat˘ ca fiind costul minim al unui drum elementar de la x la y. xk ∈ V . μ = (x).1 Expunerea problemei Definitia 7. Costul c(μ ) al acestui drum minim se nume¸te distanta minim˘ ın de la x la y ˆ graful (G. . . ¸ a) Dac˘ μ = (x0 .

c) reprezentat ˆ Figura 7. ¸ a) Matricea distantelor (costurilor) directe asociat˘ grafului (G. c) este matricea C = (cij )i. Fie graful ponderat (G.1.1. V = {v1 . ın ¸ a Conform Observatiei 7. . pentru orice graf neorientat atˆt matricea distantelor directe cˆt ¸i ma¸ a ¸ a s tricea distantelor minime sunt matrice simetrice. . c) un graf ponderat. cii = 0 ∀ i ∈ {1. . avˆnd costul c(μ1 ) = 10+5 = 15. putem s˘ ˆ ¸ ¸ a ınlocuim termenul de ”drum” cu cel de ”drum elementar” ˆ definitia anterioar˘.1. dac˘ i = j ¸i ∃ (vi . vj ) ∈ E. c : E → R+ . ¸ Conform Observatiei 7. Afirmatia poate fi justificat˘ u¸or prin reducere la absurd. .1. dac˘ i = j ¸i ∃ (vi .1. unde G = (V. .1. xj ) (0 ≤ i ≤ j ≤ k) al s˘u este un drum minim de la xi la xj (principiul a optimalit˘¸ii al lui Bellman).n definit˘ prin a ⎧ ⎨ c(μ ). x1 . . vj ) ∈ E a s (pentru grafuri neorientate (vi . ı dac˘ ∃ μ = (vi . at ¸ a s Exemplul 7.1. 5). deci μ2 este un drum minim de la 1 la 5. 4. . Fie (G. cij = ⎩ ∞. . .5. a cij = ⎩ ∞. c) este matricea C = ¸ a (cij )i. vj ) drum ˆn G.TEMA 7. vj ) desemnˆnd de fapt muchia [vi . Conform Observatiei 7. . dac˘ i = j. xi+1 .1: Drumurile elementare de la nodul 1 la nodul 5 sunt μ1 = (1. . 5). .4. punctul b) din definitia anterioar˘ este o extindere a definitiei distantei ¸ ¸ a ¸ ¸ minime de la punctul b) al Definitiei 7. . vn }.n ¸ a definit˘ prin a ⎧ a ⎨ 0. Evident.6. .1. a s min{c(e)|e = (vi . .2. avˆnd costul c(μ2 ) = 5 + 5 = 10. Dac˘ μ = (x0 .2.j=1. a b) Matricea distantelor (costurilor) minime asociat˘ grafului (G. DISTANTE SI DRUMURI MINIME ¸ ¸ 74 Observatia 7. μ = drum minim de la vi la vj .1. vj ) ∈ E}. a a μ2 = (1. ˆ caz contrar.1. .1. ın 1 5 5 15 5 5 5 5 10 4 10 3 5 2 Figura 7. .1. ¸ . .3. Astfel distanta minim˘ de la nodul 1 la nodul 5 este c(μ2 ) = 10. .1. ¸ a Definitia 7. xk ) este un drum minim de la x0 la xk . 3. ¸ Observatia 7. vj ]). n}.1. . E). ın Observatia 7.j=1. atunci orice subdrum ¸ a μ = (xi .1.

. tik−1 . ti1 = 0 = css . . . . .2.2. . DISTANTE SI DRUMURI MINIME ¸ ¸ Exemplul 7.1 (Dijkstra). la toate nodurile grafului ponderat dat. a ¸ Demonstratie.n matricea distantelor directe asociat˘ grafului (G. Se ia tik = tjk + cjk ik ¸i se trece la pasul k + 1. s Observatia 7. . respectiv minime asociate grafului din Exemplul 7. . . . . . vik−1 } ¸i algoritmul se ˆ b) ˆ caz contrar se selecteaz˘ un nod vik ∈ V \ {vi1 . c : E → ¸ a s R+ . n} a ¸ a (adic˘ distanta ti calculat˘ de algoritm este chiar distanta minim˘ de la vs la vi ). . . Distantele minime de la nodul vs la nodurile grafului sunt calculate a ¸ ¸i memorate ˆ s ıntr-un vector t = (t1 . s ın Pentru k = 1 afirmatia este evident˘ deoarece ¸ a vi1 = vs . .2. ∀ i ∈ {1. . .2 Algoritmul Dijkstra Vom expune un algoritm pentru determinarea distantelor minime ¸i a drumurilor minime de la un ¸ s nod fixat. .2.2. . numit ¸i nod surs˘. tn ) astfel: • La pasul 1 se selecteaz˘ nodul surs˘ vs ¸i se ia ts = 0. . tik < ∞. ¸i. vik−1 }. . vik−1 } cu proprietatea c˘ exist˘ un In a a a ıncˆ nod selectat vjk ∈ {vi1 . . . Matricele distantelor ¸ sunt ⎛ 0 15 10 ⎜ ∞ 0 ∞ ⎜ C=⎜ ∞ 5 0 ⎜ ⎝ ∞ 10 ∞ 5 5 ∞ 75 directe. .1. vik−1 } astfel ˆ at tjk + cjk ik = min{tj + cji |vj ∈ {vi1 . . c) ¸i fie vs ∈ V un nod arbitrar fixat.1 ⎞ ⎛ ⎞ 5 ∞ 0 15 10 5 10 ⎜ ∞ 0 ∞ ∞ ∞ ⎟ ∞ ∞ ⎟ ⎟ ⎜ ⎟ ∞ 5 ⎟ . C = ⎜ 10 5 0 15 5 ⎟ . . s a Algoritmul 7. . vik−1 }.TEMA 7.1. v2 . vik−1 selectate la pa¸ii anteriori ¸i distantele s s ¸ corespondente ti1 . vi ∈ V \ {vi1 .1. . . . vi ∈ V \ {vi1 . . ⎟ ⎜ ⎟ ⎝ 10 10 20 0 5 ⎠ 0 5 ⎠ ∞ 0 5 5 15 10 0 7.1) . 2 ≤ k ≤ n.1 (de corectitudine a Algoritmului Dijkstra). . numit nod surs˘. E). vn }.2. c) un graf ponderat. a a s • La pasul k. algoritmul execut˘ cel mult n pa¸i. Fie (G. . .2) (7. vik−1 } la a a un nod neselectat vi ∈ V \ {vi1 . . ˆ plus. Evident. avem ti = csi . vik−1 }}. se cunosc nodurile vi1 . . . G = (V. . a) Dac˘ nu mai exist˘ nici-o muchie sau arc de la un nod selectat vj ∈ {vi1 . . Fie C = (cij )i. Vom demonstra prin inductie dup˘ k c˘ nodul vik selectat la pasul k ¸i distanta ¸ ¸ a a s ¸ a a ¸ a corespondent˘ tik calculat˘ la acel pas verific˘ egalitatea din enunt. V = {v1 . . . . adic˘ a tik = csik . . In contextul Algoritmului Dijkstra. (7. . atunci se ia ti = ∞ pentru orice nod neselectat s ıncheie. ¸ a s ˆ Teorema 7. . . .j=1. .

2. atunci μ = a a (vs . vjk . DISTANTE SI DRUMURI MINIME ¸ ¸ 76 Presupunem adev˘rat˘ afirmatia pentru orice pas mai mic decˆt k ¸i o demonstr˘m pentru pasul a a ¸ a s a k. . rezult˘ c˘ tjk = csjk < ∞ ¸i cjk ik < ∞. . . ¸ deci tik < ∞ (conform (7. inductie!). .1). deoarece csjk < ∞). p − 1} indicele maxim pentru care yl este selectat (exist˘. Fie a a a μ = (vs = x0 . . Fie vjk ∈ {vi1 .2. . . . ¸i fie xl+1 = viq . . s s a a Cazul 1) Dac˘ l = p − 1. . avˆnd costul c(μ) = csjk + cjk ik = tjk + cjk ik = tik (conform (7. .2. 1. q ≥ k. a a ın a Evident. x1 . . vik ) este un drum de la vs la vik . . Deci tiq ≤ csir + cir iq = csiq (7. . deci q = k. din descrierea algoritmului avem tiq ≥ tik (deoarece valorile tik sunt monoton cresc˘toare de la un pas la altul.4) rezult˘ c˘ a tik = csik < ∞. . . . atunci xl+1 = vik .4) (7.2. deci csik ≤ tik < ∞. conform relatiilor (7. a Dac˘ (vs . vik−1 } un nod ce verific˘ egalitatea (7. . dac˘ ar exista un drum elementar minim a a μ = (vs = y0 .2. Din descrierea algoritmului ¸i din a s a a s ipoteza de inductie (nodul vjk fiind selectat la un pas anterior).3) ¸i (7. deci q = k ¸i din (7.2. . . Utilizˆnd (7. .2) rezult˘ c˘ ¸ s a a tiq ≤ tir + cir iq . p − 1} indicele maxim astfel ˆ at a xl ∈ {vi1 . .3) s (conform principiului optimalit˘¸ii al lui Bellman pentru subdrumurile dintre x0 = vs ¸i xl = vir .2. . Rezult˘ c˘ exist˘ drumuri minime de la vs la vik . s Fie xl = vir . .1) ¸i (7. ˆ Intr-adev˘r. iar conform ipotezei de inductie pentru r avem ¸ tir = csir < ∞. Din descrierea pasului q al algoritmului. deoarece x0 = vs = vi1 ). deoarece y0 = vs este a a s a ¸ selectat) atunci yl+1 ar fi neselectat de¸i exist˘ o muchie sau un arc de la yl la yl+1 . contradictie cu descrierea modului de ˆ ıncheiere a algoritmului. . Fie l ∈ {0. . . demonstr˘m c˘ a a a tik = csik prin reducere la absurd. ˆ Intr-adev˘r. luˆnd l ∈ {0. 1.2)).2)). a ın Cum q > k.TEMA 7. yp = vi ). y1 . . xp = vik ) ıncˆ un drum elementar minim de la vs la vik .2. . .3) am avea csik < tik . at s respectiv dintre x0 = vs ¸i xl+1 = viq ale drumului minim μ ). Cazul 2) Dac˘ l < p − 1. .2.4) am obtine a ¸ a ¸ csik < tik ≤ tiq ≤ csiq . xp−1 . ceea ce contrazice faptul c˘ are loc inegalitatea csiq ≤ csik (conform principiului optimalit˘¸ii al lui a at s Bellman pentru subdrumul dintre vs ¸i viq al drumului minim μ ).2. ˆ caz contrar conform (7.2. pentru orice nod vi r˘mas neselectat ˆ urma execut˘rii ultimului pas al algoritmului avem ti = ∞ = csi . vjk ) este un drum minim de la vs la vjk (exist˘. 1 ≤ r ≤ k − 1. . Demonstratia prin inductie este ˆ ¸ ¸ ıncheiat˘. . vik−1 } (exist˘.

x ← i.2. } t[s] ← 0. a at Dac˘ i = ik este nodul selectat la pasul k. atunci j = jk se determin˘ conform egalit˘¸ii (7. 5 + 10.//select˘m urm˘torul nod x.//s este nodul surs˘ a repet˘ a { min ← ∞. . 0 + 10.2. . n}. T AT A[i] ← ∞. t4 + c43 . ∀ i ∈ {1. n} 0. . n// actualiz˘m vectorii t ¸i T AT A { dac˘ (S[i] = 0) ¸i (cxi < ∞) a s { dac˘ (t[i] > t[x] + cxi ) a . 0 + ∞.2. ın a ¸ ¸a a Observatia 7. dac˘ nodul i a fost selectat.2. cu distanta minim˘ t3 = 10. 5 + 5} = 10 = t1 + c13 . t1 + c13 . . ∀ i ∈ {1. cu distantele minime t1 = c11 = 0 s ¸ a ¸ a ¸i t4 = c14 = 5. n} ¸i c˘ ¸ a a s a nodul surs˘ este s ∈ V . .TEMA 7. Pentru graful ponderat din Exemplul 7.1. ın s a ¸ ¸i un vector t avˆnd semnificatia t[i] = distanta minim˘ de la nodul surs˘ s la nodul i. la pasul 3 avem deja selectate nodurile i1 = 1 ¸i i2 = 4. ˆ ordinea cresc˘toare a a a ın a //distantelor minime de la s la x ¸ pentru i = 1. ın a Dijkstra(s) : ¸ a { pentru i = 1. n { dac˘ (S[i] = 0) ¸i (t[i] < min) a s { min ← t[i]. . . deoarece s min{t1 + c12 . ˆ select˘m a a ıl a { S[x] ← 1. ˆ caz contrar. a ∀ i ∈ {1. luˆnd ca nod surs˘ nodul 1. Algoritmul Dijkstra este specific metodei de programare Greedy.2. aplicarea a a Algoritmului Dijkstra este evidentiat˘ ˆ urm˘torul tabel: ¸ a ın a Pas Nodul selectat 1 1 2 4 3 3 4 5 5 2 Distanta minim˘ ¸ a 0 5 10 10 15 De exemplu. . . n}. } } dac˘ (min < ∞)// exist˘ x. ¸ a a calculat conform (7.1). t4 + c42 . s Pentru determinarea drumurilor minime de la nodul s la nodurile grafului vom utiliza ¸i un vector s T AT A avˆnd semnificatia a ¸ T AT A[i] = nodul j ce este predecesorul direct al nodului i pe drumul minim de la s la i. t[i] ← ∞.1. 5 + ∞. . a Descrierea ˆ pseudocod a algoritmului are forma urm˘toare. Se selecteaz˘ nodul i3 = 3. Pentru implementarea Algoritmului Dijkstra. consider˘m c˘ V = {1. . t1 + c15 .2). . . . .2. . a s pentru i = 1.3. el selectˆnd ¸ a nodurile ˆ ordinea cresc˘toare a distantei fat˘ de nodul surs˘. t4 + c45 } = min{0 + 15.2. Observatia 7. n// initializ˘ri { S[i] ← 0. Utiliz˘m un vector S avˆnd semnificatia a a a ¸ S[i] = 1.1. DISTANTE SI DRUMURI MINIME ¸ ¸ 77 Exemplul 7.1) ¸i (7. T AT A[s] ← 0.

. .j=1. .n . . n} definite prin C (0) = C. = (k−1) (k−1) min{cij . Fie C = (cij )i. V = {v1 . . respectiv c˘ μ este o bucl˘ sau drumul (vi ) de lungime 0 pentru i = j. .1 (de corectitudine a Algoritmului Roy-Floyd).2. Acest algoritm este asem˘n˘tor cu Algoritmul Roy-Warshall a a a pentru determinarea matricei drumurilor. In contextul Algoritmului Roy-Floyd. . c). . . ipoteza de inductie ¸i principiul optimalit˘¸ii al lui Bellman avem ¸ s at . I(μ) ⊆ {v1 . .3.1)) ¸i egalitatea (7. . .3. Se calculeaz˘ matricele C (k) = (cij )i.2) ˆ Teorema 7. n} ¸ ¸ a a avem ⎧ a ⎨ min{c(μ)|μ = (vi . n}. } 78 }. c). deci pentru k = 0 aceast˘ multime este ∅. (7.3. .3. . cik ∀k. G = (V. . . .1) + (k−1) ckj }. .TEMA 7.3.n matricea distantelor directe asociat˘ grafului (G. dac˘ (k) ∃ μ = (vi . . n} c˘ pentru orice i. Demonstratie. . s ın a } cˆt timp (min < ∞). vn }. vj ) drum cu I(μ) ⊆ {v1 . 1. . a } } } 7. .3) este evident˘ din definitia s a ¸ matricei C a costurilor directe ¸i faptul c˘ I(μ) = ∅ ˆ s a ınseamn˘ c˘ drumul μ este de fapt un arc sau o a a muchie pentru i = j.3. v2 . vk }}. ¸ a a c : E → R+ .3.2).1 (Roy-Floyd). ın unde I(μ) reprezint˘ multimea nodurilor intermediare ale drumului μ ¸i {v1 . k ∈ {0. . E). ultima matrice calculat˘ este chiar matricea distantelor minime asociat˘ grafului (G. vk } reprezint˘ a ¸ s a a ¸ multimea {vi |1 ≤ i ≤ k}. Implementarea anterioar˘ necesit˘ O(n2 ) operatii (deoarece blocul ”repet˘” se ¸ a a execut˘ de cel mult n ori ¸i necesit˘ de fiecare dat˘ cel mult n comparatii pentru determinarea a s a a ¸ nodului selectat x ¸i cel mult n comparatii ¸i n adun˘ri pentru actualizarea vectorilor t ¸i T AT A). Fie (G. j ∈ {1. (k) cij (k) (7. . j ∈ {1. T AT A[i] ← x. ¸ (0) Pentru k = 0 avem cij = cij (conform (7. adic˘ a ¸ a a C (n) = C . i. . . . c) un graf ponderat.3) cij = ⎩ ∞. ˆ caz contrar.3) adev˘rat˘ pentru k − 1 (1 ≤ k ≤ n) ¸i o demonstr˘m pentru a a s a k. .3. . ¸ a Observatia 7. . . Algoritmul 7.4.3 Algoritmul Roy-Floyd Vom expune un algoritm pentru determinarea distantelor minime ¸i a drumurilor minime ˆ ¸ s ıntre orice dou˘ noduri ale grafului ponderat dat. vj ). . Fie d ∈ [0. . vk }. . a a Presupunem acum egalitatea (7.j=1. Folosind (7. . . . DISTANTE SI DRUMURI MINIME ¸ ¸ { t[i] ← t[x] + cxi . (7. s ¸ s a s Aceasta este de fapt ¸i complexitatea Algoritmului Dijkstra (ˆ implementarea optim˘). . Vom demonstra prin inductie dup˘ k ∈ {0. ∞). . 1. .3.

. . vk .TEMA 7. . . . j ∈ {1. . . vk−1 }. . vj ) drumuri cu I(μ1 ). vk }. . .3. . . DISTANTE SI DRUMURI MINIME ¸ ¸ echivalentele: ¸ cij = d ⇔ cij (k) (k−1) 79 = d ≤ cik (k−1) + ckj (k−1) sau cik (k−1) + ckj (k−1) = d < cij (k−1) ⇔ ∃ μ = (vi . . prin aplicarea Algoritmului Roy-Floyd obtinem ¸ matricele: ⎛ ⎛ ⎞ ⎞ 0 15 10 5 ∞ 0 15 10 5 ∞ ⎜ ∞ 0 ∞ ∞ ∞ ⎟ ⎜ ∞ 0 ∞ ∞ ∞ ⎟ ⎜ ⎜ ⎟ ⎟ (0) (1) C = C = ⎜ ∞ 5 0 ∞ 5 ⎟. adic˘ egalitatea din enunt. . . . I(μ2 ) ⊆ {v1 . . . . . apoi μ2 ¸i. vj ) drum minim cu proprietatea c˘ I(μ) ⊆ {v1 . vk }. vk }. . vn } poate fi eliminat˘. c(μ ) = d (μ se obtine parcurgˆnd ˆ ai μ1 . .1. i. . . . . a a ıntotdeauna adev˘rat˘. . . . . vj ) drum cu I(μ”) ⊆ {v1 . . deci a a Pentru k = n conditia I(μ) ⊆ {v1 . vk ∈ I(μ ). n}). Demonstratia prin inductie a egalit˘¸ii (7. . s ¸ Exemplul 7. . .1. . c(μ) = d sau ∃ μ = (vi . . vk−1 } a a (adic˘ de cost minim dintre toate drumurile de la vi la vj ce satisfac aceast˘ a proprietate). . Pentru graful din Exemplul 7. . cu k. ¸ a ıntˆ s μ1 ¸i μ2 sunt portiunile din μ dintre vi ¸i prima aparitie a lui vk ˆ I(μ ). I(μ2 ) ⊆ {v1 . ˆ ¸ ın s ıntre aceste aparitii ¸ ¸ eventualele arce sau muchii ale lui μ au costul 0 conform Observatiei 7. j ∈ {1. vk−1 ) sau ∃ μ1 = (vi . . . vj ) drum minim cu proprietatea c˘ I(μ) ⊆ {v1 . c(μ) = d ≤ c(μ1 ) + c(μ2 ) ∀ μ1 = (vi . . . . . .1. . vk ).1. . C = ⎜ ∞ 5 0 ∞ 5 ⎟ ⎜ ⎜ ⎟ ⎟ ⎝ ∞ 10 ∞ 0 5 ⎠ ⎝ ∞ 10 ∞ 0 5 ⎠ 5 5 ∞ ∞ 0 5 5 15 10 0 . n}. . . .1) ⇔ ∃ μ = (vi . . . . . ∀ μ” = (vi . vk−1 } a ⇔ ∃ μ = (vi .2 obtinem cij = cij .1. . . vj ) drum minim cu proprietatea c˘ a I(μ) ⊆ {v1 . . . . fiind ˆ ¸ (n) din (7. . i. . s ¸ s ¸ ın respectiv dintre ultima aparitie a lui vk ˆ I(μ ) ¸i vj . c(μ) = d. j). vj ) drumuri minime cu proprietatea c˘ a I(μ1 ). vk ). .3) ¸i Definitia 7. . . . Algoritmul Roy-Floyd are complexitatea O(n3 ) (deoarece necesit˘ cˆte o adunare ¸ a a ¸i o comparatie pentru fiecare triplet (k. . μ2 = (vk . ∀ i. c(μ1 ) + c(μ2 ) = d < c(μ”). . . . . s ¸ ¸ a ¸ Observatia 7. .1. .3. .3. . vj ) drum minim cu proprietatea c˘ a I(μ ) ⊆ {v1 . vk ∈ I(μ). . . . .3. . . μ2 = (vk .3) este astfel ˆ ¸ ¸ at ıncheiat˘. reciproc.

. j ∈ {1. ¸i continuˆnd acest procedeu pentru subdrumurile minime dintre z ¸i y se g˘sesc toate s a s a drumurile minime elementare de la x la y.2) avem cik = cik ¸ mentarea algoritmului putem utiliza o singur˘ matrice C (k) . . z. n pentru i = 1. i. n cij ← cij .//initializare pentru k = 1. DISTANTE SI DRUMURI MINIME ¸ ¸ (deoarece. ⎛ ⎛ ⎞ ⎞ 0 15 10 5 ∞ 0 15 10 5 15 ⎜ ∞ 0 ∞ ∞ ∞ ⎟ ⎜ ∞ 0 ∞ ∞ ∞ ⎟ ⎜ ⎜ ⎟ ⎟ C (2) = ⎜ ∞ 5 0 ∞ 5 ⎟ .3. a (k) (k−1) (k) (k−1) ¸i ckj = ckj . ¸ ¸ Astfel putem determina toate nodurile z ce sunt succesori directi ai nodului x pe drumuri minime ¸ de la x la y. pentru determinarea tuturor drumurilor minime a a ¸ a (elementare) dintre dou˘ noduri distincte x. Roy Floyd : { pentru i = 1. Considerˆnd c˘ functia cost c este strict pozitiv˘. . ¸ Observatia 7. unde multimea nodurilor este multimea standard V = {1. . . n}. C (5) = ⎜ 10 5 0 15 5 ⎟ = C ⎜ ⎜ ⎟ ⎟ ⎝ ∞ 10 ∞ 0 5 ⎠ ⎝ 10 10 20 0 5 ⎠ 5 5 15 10 0 5 5 15 10 0 (1) (0) (0) (0) 80 (matricea distantelor minime). Astfel obtinem urm˘toarea descriere ˆ a ¸ a ın pseudocod a algoritmului. n ¸ pentru j = 1.TEMA 7. . de exemplu. Conform ecuatiilor (7. ⎜ ⎜ ⎟ ⎟ ⎝ ∞ 10 ∞ 0 5 ⎠ ⎝ ∞ 10 ∞ 0 5 ⎠ 5 5 15 10 0 5 5 15 10 0 ⎛ ⎛ ⎞ ⎞ 0 15 10 5 10 0 15 10 5 10 ⎜ ∞ 0 ∞ ∞ ∞ ⎟ ⎜ ∞ 0 ∞ ∞ ∞ ⎟ ⎜ ⎜ ⎟ ⎟ C (4) = ⎜ ∞ 5 0 ∞ 5 ⎟ . 5 + 10} = 15). . . C (3) = ⎜ ∞ 5 0 ∞ 5 ⎟ . . n pentru j = 1. cxz + czy = cxy .3).3.3. c53 = min{c53 . n dac˘ (cik + ckj < cij ) cij ← cik + ckj . . c51 + c13 } = min{∞. . y) = drum minim ⇔ z = x. . deci pentru imples Conform ecuatiilor (7. Algoritmul Roy-Floyd este un algoritm specific metodei ¸ ¸ program˘rii dinamice. y putem utiliza echivalenta: a ¸ (x. . a }.2. ∀ k. n}.

1 8.2 Problema fluxului maxim Algoritmul Ford-Fulkerson 81 .Tema 8 Fluxuri ˆ retele de transport ın ¸ 8.

Sign up to vote on this title
UsefulNot useful