Sunteți pe pagina 1din 19

Introducere

Primul articol despre grafuri a fost scris de matematicianul elveţian L.Euler şi publicat
în 1735 de Academia de Ştiinţe din St.Petersburg. Euler s-a ocupat atunci de problema
podurilor din Königsberg, a cărei generalizare este problema poştaşului. În secolele următoare
teoria grafurilor şi-a continuat dezvoltarea. Acum algoritmica grafurilor nu este numai o
ramura importantă a algoritmicii, ci are propriile ei aplicaţii în domenii cât se poate de
diverse: economie, medicină, transport, relaţii interumane, planificări de evenimente etc.
În capitolul introductiv, pe lângă noţiunile de bază, am descris şi cele mai utilizate
structuri de date utilizate la reprezentarea grafurilor. Fiecare dintre următoarele trei capitole
este dedicat unei probleme fundamentale a teoriei grafurilor: parcurgeri de grafuri,
determinarea unui arbore parţial minim şi determinarea distanţelor şi a drumurilor minime.
Cursul de Algoritmica grafurilor conţine exemple detaliate pentru algoritmii
fundamentali din teoria grafurilor prezentaţi pentru că acestea facilitează înţelegerea corectă şi
în profunzime a algoritmilor prezentaţi.

Obiectivele cursului
Cursul de Algoritmica grafurilor are ca obiectiv principal îmbogăţirea
cunoştinţelor de fundamentele Informaticii ale studenţilor Programului de studii
Informatică, forma de învăţământ ID. În acest sens, la sfârşitul acestui curs,
studenţii vor fi capabili să:
• Studenţii vor fi capabili să identifice probleme practice care pot fi modelate cu
ajutorul grafurilor

 Studenţii vor fi capabili să rezolve probleme fundamentale din teoria grafurilor.


Vor fi capabili să parcurgă grafuri, să determine arbori parţiali minimi, drumuri
minime, fluxuri maxime şi tăieturi minime
 Studenţii vor fi capabili utilizeze grafuri în modelarea problemelor din lumea
reală şi să aleagă cel mai eficient algoritm pentru rezolvarea unei astfel de
probleme.

Cerinţe preliminare
Este necesară parcurgerea cursurilor de Algoritmică şi Structuri de date.

1
Resurse
Parcurgerea unităţilor de învăţare aferente acestui curs nu necesită existenţa
unor mijloace sau instrumente de lucru.

Structura cursului
Cursul de Algoritmica grafurilor este structurat în patru module, astfel:
primul modul cuprinde două unităţi de învăţare, al doilea modul patru unităţi de
învăţare, al treilea modul două unităţi de învăţare, iar al patrulea modul cuprinde o
unitate de învăţare. La rândul său, fiecare unitate de învăţare cuprinde: obiective,
aspecte teoretice privind tematica unităţii de învăţare respective, exemple, teste de
evaluare precum şi probleme propuse spre discuţie şi rezolvare.
La sfârşitul ultimelor trei module sunt indicate teme de control. Rezolvarea
acestor trei teme de control este obligatorie. Acestea vor fi transmise de către
studenţi profesorului până la o dată prestabilită.

Durata medie de studiu individual


Parcurgerea de către studenţi a unităţilor de învăţare ale cursului de
Algoritmica grafurilor (atât aspectele teoretice cât şi rezolvarea testelor de
autoevaluare şi rezolvarea problemelor propuse) se poate face în 2-3 ore pentru
fiecare unitate de învăţare.

Evaluarea
La sfârşitul semestrului, fiecare student va primi o notă, care va cuprinde: un
test, ce va conţine întrebări teoretice şi practice din materia prezentată în cadrul
acestui material, test de va deţine o pondere de 75% în nota finală. Media notelor
aferente testelor de evaluare, realizate pe parcursul semestrului, va deţine o
pondere de 25%.

Spor la treaba !

2
Modulul 1. Noţiuni introductive

Cuprins
Introducere ...................................................................................................................... 3
Obiectivele modului ........................................................................................................ 3
U1. Vocabularul de bază din teoria grafurilor ............................................................... 4
U2. Structuri de date utilizate în reprezentarea grafurilor ............................................ 11

Introducere
Pornind de la articolul lui L. Euler din 1735 despre problema podurilor din
Königsberg, teoria grafurilor s-a dezvoltat spectaculos in secolele următoare.
Acum, aplicaţii ale grafurilor se regăsesc în domenii foarte variate: de la economie
la relaţii interumane, de la medicină la transport, de la astronautică la planificări de
evenimente etc. Această vastă aplicabilitate a grafurilor este fără îndoială un
avantaj, dar aduce cu sine şi un inconvenient: terminologia din teoria grafurilor nu
este unitară. În acest modul vom introduce noţiunile cel mai des folosite în
literatura de specialitate.

Competenţe
La sfârşitul acestui modul studenţii îşi vor însuşi noţiunile de bază din teoria
grafurilor şi vor fi capabili să:
 Reprezinte grafuri neorientate şi digrafuri;
 Determine grafuri neorienate şi digrafuri reprezenate prin diferite structuri de
date.

3
Unitatea de învăţare M1.U1. Vocabularul de bază din teoria
grafurilor

Cuprins
M1.U1.1. Introducere ...................................................................................................... 4
M1.U1.2. Obiectivele unităţii de învăţare ....................................................................... 4
M1.U1.3. Noţiuni de bază în digrafuri ............................................................................ 4
M1.U1.4. Noţiuni de bază în grafuri neorientate ............................................................ 8
M1.U1.5. Rezumat .......................................................................................................... 9
M1.U1.6. Test de evaluare a cunoştinţelor ................................................................... 10

M1.U1.1. Introducere
Grafurile au aplicabiliate într-o diversitate de domenii, motiv pentru care
terminologia din teoria grafurilor nu este tocmai unitară. În această unitate de
învăţare vom prezenta noţiunile care sunt mai frecvent utilizate în literatura de
specialitate.

M1.U1.2. Obiectivele unităţii de învăţare


Această unitate de învăţare îşi propune ca obiectiv principal însuşirea de
către studenţi a noţiunilor de bază din teoria grafurilor.
La sfârşitul acestei unităţi de învăţare studenţii vor fi capabili să:
 Utilizeze corect noţiunile de bază specifice grafurilor neorientate şi digrafurilor.

Durata medie de parcurgere a primei unităţi de învăţare este de 3 ore.

M1.U1.3. Noţiuni de bază în digrafuri

Fie N o mulţime finită cu n elemente, numite noduri şi A o mulţime finită cu m


elemente, numite arce, un arc fiind o pereche ordonată de noduri. Atunci perechea (N, A) se
notează cu G şi se numeşte digraf sau graf orientat.

4
Fie un arc a=(x, y)∈ A. Nodurile x şi y se numesc extremităţile arcului a, nodul x este
extremitatea iniţială şi y extremitatea finală; nodurile x şi y se numesc adiacente. Nodul x se
numeşte predecesor al nodului y şi nodul y se numeşte succesor al nodului x.

Fie x un nod oarecare. Mulţimea succesorilor nodului x este mulţimea V+(x) = {y | (x, y)

∈ A} şi mulţimea predecesorilor nodului x este mulţimea V − (x) = {y | (y, x)∈ A}.



Mulţimea V(x) = V+(x) ∪ V (x) se numeşte vecinătatea nodului x.
Dacă V(x) = Ø atunci x se numeşte nod izolat.
Un arc de forma (x, x) se numeşte buclă.

Exemplu. Pentru digraful din figura 1.1. avem:



V+(1) = {2, 3}, V (1) = Ø, V(1) = {2, 3},

V+(2) = {2, 3, 5}, V (2) = {1, 2, 3}, V(2) = {1, 2, 3, 5},

V+(3) = {2, 5}, V (3) = {1, 2}, V(3) = {1, 2, 5},

V+(4) = Ø, V (4) = Ø, V(4) = Ø (deci nodul 4 este izolat),

V+(5) = Ø, V (5) = {2, 3}, V(5) = {2, 3}.

Fig. 1.1

Conceptul de digraf se poate defini şi prin perechea G = (N, Γ), unde N este mulţimea
nodurilor şi Γ este aplicaţia multivocă Γ: N→P(N), Γ(x)= V+(x), x∈ N. Cele două definiţii sunt
echivalente.

5
De asemenea, se defineşte Γ -1(x) = V (x), x∈ N. Recursiv avem

Γ 2(x) = Γ(Γ(x)),
...
Γ k(x) = Γ(Γ (k-1)(x)), x∈ N.
şi analog
Γ -2(x) = Γ -1(Γ -1(x)),
...
Γ -k(x) = Γ -1(Γ -(k-1)(x)), x∈ N.
Un nod y∈ Γ k(x) se numeşte descendent al nodului x şi un nod z ∈ Γ -k(x) se numeşte
ascendent al nodului x.
Două arce se numesc adiacente dacă au cel puţin o extremitate în comun.
Fie arcul a=(x, y)∈ A. Se spune că arcul a este incident către exterior cu nodul x şi
incident către interior cu nodul y. Mulţimea arcelor incidente către exterior cu nodul x este

E+(x) = {(x, y) | (x, y)∈ A}, mulţimea arcelor incidente către interior cu nodul x este E (x) =

{(y, x) | (y, x)∈ A} şi mulţimea arcelor incidente cu nodul x este E(x) = E+(x) ∪ E (x).

Numărul ρ+(x) = |E+(x)| se numeşte semigradul exterior al nodului x, numărul ρ-(x) = | E (x)|
se numeşte semigradul interior al nodului x şi numărul ρ(x) = ρ+(x) + ρ- (x) se numeşte gradul
nodului x.

Exemplu. Se consideră digraful din figura 1.1. Avem



E+(1) = {(1, 2), (1, 3)}, E (1) = Ø, E(1) = {(1, 2), (1, 3)}, ρ+(1) = 2, ρ-(1)
= 0, ρ(1) = 2,

E+(2) = {(2, 2), (2, 3), (2, 5)}, E (2) = {(1, 2), (2, 2), (3, 2)}, E(2) =
{(1, 2), (2, 2), (2, 3), (2, 5), (3, 2)}, ρ+(2) = 3, ρ-(2) = 3, ρ(2) = 6,

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

E+(4) = Ø, E (4) = Ø, E(4) = Ø, ρ+(4) = 0, ρ-(4) = 0, ρ(4) = 0,

E+(5) = Ø, E (5) = {(2, 5), (3, 5)}, E(5) = {(2, 5), (3, 5)}, ρ+(5) = 0, ρ-(5)
= 2, ρ(5) = 2.

6
Proprietate. Într-un digraf G = (N, A), avem ρ(x) ≥ | E(x) |, x∈ N. Într-un digraf G = (N,
A) fără bucle, avem ρ(x) = | E(x) |, x∈ N.

Într-un digraf G = (N, A), se numeşte lanţ de la nodul x1 la nodul xk+1, o secvenţă L=(x1,
a1, x2,…, xk, ak, xk+1), xi∈ N, i=1, …, k+1, ai∈ A, i=1, …, k, cu proprietatea că fiecare arc ai
este de forma (xi, xi+1) sau (xi+1, xi). Dacă ai=(xi, xi+1) atunci ai se numeşte arc direct al lanţului
şi dacă ai=(xi+1, xi) atunci ai se numeşte arc invers al lanţului. Numărul de arce din secvenţă
este, prin definiţie, lungimea lanţului L. Lanţul L se numeşte simplu dacă fiecare arc ai din
secvenţă este utilizat o singură dată şi se numeşte elementar dacă fiecare nod xi din secvenţă
este utilizat o singură dată. Dacă xk+1 = x1 atunci lanţul L se numeşte ciclu.

Un lanţ poate fi reprezentat şi ca o secvenţă de arce L= (a1, …, ak).

Exemplu. Considerăm digraful din figura 1.1.


Secvenţa L= (1, (1, 2), 2, (2, 3), 3, (3, 5), 5, (2, 5), 2, (2, 3), 3), care poate fi
scrisă ca secvenţa de arce L= ((1, 2), (2, 3), (3, 5), (2, 5), (2, 3)), este un lanţ de la
nodul 1 la nodul 3, care nu este nici simplu, nici elementar. În lanţul L, arcele (1,
2), (2, 3), (3, 5) sunt arce directe, iar arcul (2, 5) este arc invers.
Secvenţa L= (1, (1, 2), 2, (2, 3), 3, (3, 2), 2), care poate fi scrisă şi L=
((1, 2), (2, 3), (3, 2)), este un lanţ simplu de la nodul 1 la nodul 2, dar nu este lanţ
elementar.
Secvenţa L= (1, (1, 2), 2, (2, 3), 3, (3, 5), 5), care poate fi scrisă şi L=
((1, 2), (2, 3), (3, 5)), este un lanţ elementar de la nodul1 la nodul 5.

Secvenţa L= (1, (1, 2), 2, (2, 5), 5, (3, 5), 3, (1, 3), 1), care poate fi scrisă şi
L= ((1, 2), (2, 5), (3, 5), (1, 3)), este un ciclu.

Într-un digraf G = (N, A), se numeşte drum de la nodul x1 la nodul xk+1, o secvenţă
D=(x1, a1, x2, …, xk, ak, xk+1), xi∈ N, i=1, …,k+1, ai ∈ A, i=1, …, k, cu proprietatea că fiecare
arc ai este de forma (xi, xi+1). Dacă xk+1 = x1 atunci drumul D se numeşte circuit.
Evident, un drum este un lanţ format numai din arce directe, iar un circuit este un ciclu
în care toate arcele sunt directe.

Un drum poate fi reprezentat şi ca o secvenţă de noduri D= (x1, …, xk+1).

7
Exemplu Se consideră digraful din figura 1.1.
Secvenţa D = (1, (1, 2), 2, (2, 3), 3, (3, 2), 2, (2, 3), 3, (3, 5), 5), care poate
fi scrisă ca secvenţa de noduri D = (1, 2, 3, 2, 3, 5), este un drum de la nodul 1 la
nodul 5, care nu este nici simplu, nici elementar.
Secvenţa D =(1, (1, 2), 2, (2, 3), 3, (3, 2), 2), care poate fi scrisă şi D = (1,
2, 3, 2), este un drum simplu de la nodul 1 la nodul 2, dar nu este un drum
elementar.
Secvenţa D =(1, (1, 2), 2, (2, 3), 3), care poate fi scrisă şi D = (1, 2, 3) este
un drum elementar de la nodul 1 la nodul 3.
Secvenţa D = (2, (2, 3), 3, (3, 2), 2), care poate fi notată şi prin D = (2, 3, 2)
este un circuit elementar.

În continuare, vom considera, în general, lanţuri şi drumuri elementare, dar fără a mai
specifica de fiecare dată atributul "elementar".

M1.U1.4. Noţiuni de bază în grafuri neorientate

Fie N o mulţime finită cu n elemente, numite noduri şi A o mulţime finită cu m


elemente, numite muchii, o muchie fiind o pereche neordonată de noduri. Atunci perechea
(N, A) se notează cu G şi se numeşte graf neorientat.
Fie o muchie a=[x, y]∈ A. Nodurile x şi y se numesc extremităţile muchiei a. Nodurile x
şi y se numesc adiacente, iar muchia a este incidentă cu nodurile x şi y.
Vecinătatea nodului x este mulţimea V(x) = {y∈ N | [x, y]∈ A}.
Dacă V(x) = Ø atunci x se numeşte nod izolat.
Două muchii se numesc adiacente dacă au cel puţin o extremitate în comun.
Fie x un nod oarecare. Mulţimea muchiilor incidente cu nodul x este E(x) = {[x, y] |
(x, y)∈ A}. Numărul ρ(x) = |E(x)| se numeşte gradul nodului x.

Exemplu. Se consideră digraful din figura 1.2 Avem


V(1) = {2, 3}, V(2) = {1, 3}, V(3) = {1, 2, 4}, V(4) = {3}.
E(1) = {[1, 2], [1, 3]}, ρ(1) = 2,
E(2) = {[1, 2], [2, 3]}, ρ(2) = 2,
E(3) = {[1, 3], [2, 3], [3, 4]}, ρ(3) = 3,

8
E(4) = {[3, 4]}, ρ(4) = 1.

Fig. 1.2

Într-un graf neorientat G = (N, A), se numeşte lanţ între nodurile x1 şi xk+1, o secvenţă
L=(x1, a1, x2,…, xk, ak, xk+1), xi∈ N, i=1, …, k+1, ai∈ A, i=1, …, k, cu proprietatea că ai=
[xi, xi+1]. Numărul de muchii din secvenţă este, prin definiţie, lungimea lanţului L. Lanţul L se
numeşte simplu dacă fiecare muchie ai din secvenţă este utilizată o singură dată şi se numeşte
elementar dacă fiecare nod xi din secvenţă este utilizat o singură dată. Dacă xk+1 = x1 atunci
lanţul L se numeşte ciclu.

Un lanţ dintr-un graf neorientat poate fi reprezentat şi ca o secvenţă de arce L= (a1, …,


ak) sau ca o secvenţă de noduri L= (x1, …, xk, xk+1).

Exemplu. Considerăm graful neorientat din figura 1.2.


Secvenţa L= (1, [1, 2], 2, [2, 3], 3, [3, 4], 4), care poate fi scrisă, echivalent,
ca secvenţă de muchii L= ([1, 2], [2, 3], [3, 4]) sau ca secvenţă de noduri L = (1,
2, 3, 4) este un lanţ de lungime 3 între nodurile 1 şi 4. Acest lanţ este elementar.
Secvenţa L= (1, [1, 2], 2, [2, 3], 3, [3, 1], 1), care poate fi scrisă, echivalent,
ca secvenţă de muchii L= ([1, 2], [2, 3], [3, 1]) sau ca secvenţă de noduri L = (1,
2, 3, 1) este un ciclu elementar de lungime 3.

M1.U1.5. Rezumat
Un digraf (graf orientat) este o pereche G = (N, A) unde N o mulţime finită cu
n elemente, numite noduri şi A o mulţime finită cu m elemente, numite arce, un arc
fiind o pereche ordonată de noduri.
Un graf neorientat este o pereche G = (N, A) unde N o mulţime finită cu n
elemente, numite noduri şi A o mulţime finită cu m elemente, numite muchii, o

9
muchie fiind o pereche neordonată de noduri.
Cele mai multe dinte noţiunile introduse în această unitate de învăţare au sens
în ambele categorii de grafuri, dar există şi noţiuni care implică orientarea arcelor şi,
ca urmare, au sens doar în digrafuri.

M1.U1.6. Test de evaluare a cunoştinţelor


1. Pentru digraful din figura 1.3, determinaţi mulţimile succesorilor,
predecesorilor şi vecinătăţile fiecărui nod.

Fig. 1.3
2. Pentru digraful din figura 1.3, determinaţi mulţimile de arce incidente,
incidente către exterior şi către interior, semigradele şi gradele fiecărui nod.
3. Determinaţi un lanţ, un drum, un ciclu şi un circuit în digraful din figura 1.3.
Precizaţi lungimile lor.
4. Pentru graful neorientat din figura 1.4, determinaţi vecinătăţile şi gradele
nodurilor.

Fig. 1.4

5. Determinaţi un lanţ şi un ciclu în graful neorientat din figura 1.4. Precizaţi


lungimile lor.

10
Unitatea de învăţare M1.U2. Structuri de date utilizate în
reprezentarea grafurilor

Cuprins
M1.U2.1. Introducere .................................................................................................... 11
M1.U2.2. Obiectivele unităţii de învăţare ..................................................................... 11
M1.U2.3. Reprezentarea digrafurilor ............................................................................ 11
M1.U2.4. Reprezentarea grafurilor neorientate ............................................................ 15
M1.U2.5. Rezumat ........................................................................................................ 18
M1.U2.6. Test de evaluare a cunoştinţelor ................................................................... 18

M1.U2.1. Introducere
În această unitate de învăţare vom descrie cele mai utilizate structuri de date
utilizate la reprezentarea digrafurilor şi a grafurilor neorientate.

M1.U2.2. Obiectivele unităţii de învăţare


Această unitate de învăţare îşi propune ca obiectiv principal însuşirea de
către studenţi a principalelor structuri de date care se folosesc pentru a reprezenta
digrafuri şi grafuri orientate.
La sfârşitul acestei unităţi de învăţare studenţii vor fi capabili să:
 Reprezinte grafuri neorientate şi digrafuri;
 Determine grafuri neorienate şi digrafuri reprezentate prin diferite structuri de
date.

Durata medie de parcurgere a acestei unităţi de învăţare este de 3 ore.

M1.U2.3. Reprezentarea digrafurilor

Fie G = (N, A) un digraf, cu N o mulţime cu n noduri şi A o mulţime cu m arce.


Matricea de adiacenţă asociată digrafului G = (N, A) este matricea
M = (mij)i,j=1,...,n,

11
unde

1, daca (i, j ) ∈ A



mij = 
0, daca (i, j ) ∉ A

Se observă că această reprezentare a digrafurilor nu este tocmai eficientă. De aceea nu


o vom utiliza decât în puţinele cazuri când este cea mai potrivită reprezentare pentru
descrierea algoritmilor (de exemplu în algoritmul Floyd-Warshall pentru drumuri minime).

Exemplu
Matricea de adiacenţă a digrafului din figura 1.5 este:

0 1 1 0 0
 
0 1 1 1 1
M = 0 1 0 0 1
 
0 0 0 0 0
0 1 0 1 0 

Fig. 1.5

Un digraf G = (N, A) pentru care s-a definit o funcţie valoare b : A →R se numeşte reţea
orientată şi se notează cu G = (N, A, b). Dacă este necesar să reprezentăm o reţea orientată
prin matricea de adiacenţă, atunci folosim şi matricea valoare
B = (bij)i,j=1,...,n,
unde

12
b(i, j ), daca (i, j ) ∈ A

bij = 
0, daca (i, j ) ∉ A

Exemplu
Pentru reţeaua orientată din figura 1.6, matricea de adiacenţă este:

0 1 1 0 0
 
0 0 1 1 1
M = 0 1 0 0 1 ,
 
0 0 0 0 0
0 1 0 1 0 

iar matricea valoare este următoarea:

0 2 4 0 0
 
0 0 1 8 4
B = 0 1 0 0 6
 
0 0 0 0 0
0 3 0 7 0 

Fig. 1.6

Reprezentarea digrafului G = (N, A) prin liste de adiacenţă constă în memorarea


mulţimilor V+(x) ale succesorilor nodului x ca liste simplu înlănţuite, pentru toate nodurile
x∈N. Deoarece trebuie să memorăm şi să accesăm n liste simplu înlănţuite, câte una pentru

13
fiecare nod, avem nevoie şi de un şir de n pointeri care să reţină adresele de început ale celor
n liste înlănţuite.

Exemplu
Listele de adiacenţă corespunzătoare digrafului din figura 1.5 sunt:

Pentru a reprezenta prin liste de adiacenţă reţeaua orientată G = (N, A, b), se adaugă în
fiecare celulă a fiecărei liste simplu înlănţuite încă un câmp în care se memorează valoarea
arcului căruia îi corespunde celula.

Exemplu
Listele de adiacenţă corespunzătoare reţelei orientate reprezentate în figura
1.6 sunt:

14
M1.U2.4. Reprezentarea grafurilor neorientate

Fie G = (N, A) un graf neorientat, unde N este o mulţime cu n noduri şi A este o mulţime
cu m muchii (arce).
Matricea de adiacenţă asociată grafului neorientat G = (N, A) este matricea
M = (mij)i,j=1,...,n,
unde

1, daca [i, j ] ∈ A



mij = 
0, daca [i, j ] ∉ A

Ca şi în cazul digrafurilor, şi pentru grafuri neorientate, reprezentarea prin matricea de


adiacenţă este ineficientă.

Exemplu
Graful neorientat reprezentat în figura 1.7 are următoarea matrice de
adiacenţă:

0 1 1 0
 
1 0 1 0
M =
1 1 0 1
 
0 0 1 0 

Fig. 1.7

Un graf neorientat G = (N, A) pentru care s-a definit o funcţie valoare b : A →R se


numeşte reţea neorientată şi se notează cu G = (N, A, b). Dacă este necesar să reprezentăm o
reţea neorientată prin matricea de adiacenţă, atunci folosim şi matricea valoare
B = (bij)i,j=1,...,n,

15
unde

b[i, j ], daca [i, j ] ∈ A



bij = 
0, daca [i, j ] ∉ A

Exemplu
Pentru reţeaua neorientată din figura 1.8, matricea de adiacenţă este:

0 1 1 0 0
 
1 0 0 1 1
M = 1 0 0 0 1 ,
 
0 1 0 0 1
0 1 1 1 0 

iar matricea valoare este următoarea:

0 2 4 0 0
 
2 0 0 8 4
B = 4 0 0 0 6
 
0 8 0 0 7
0 4 6 7 0 

Fig. 1.8

Fie V ( x) = { y ∈ N | [ x, y ] ∈ A} mulţimea vecinilor nodului x, x∈ N.


Reprezentarea grafului neorientat G = (N, A) prin liste de adiacenţă constă în
memorarea mulţimilor V(x) ale vecinilor nodului x ca liste simplu înlănţuite, pentru toate
nodurile x∈ N. Deoarece trebuie să memorăm şi să accesăm n liste simplu înlănţuite, câte una

16
pentru fiecare nod, avem nevoie şi de un şir de n pointeri care să reţină adresele de început ale
celor n liste înlănţuite.

Exemplu
Graful neorientat reprezentat în figura 1.7 are următoarea reprezentare prin
liste de adiacenţă:

Pentru a reprezenta prin liste de adiacenţă reţeaua neorientată G = (N, A, b), se adaugă
în fiecare celulă a fiecărei liste simplu înlănţuite încă un câmp în care se memorează valoarea
muchiei căreia îi corespunde celula.

17
Exemplu
Pentru reţeaua neorientată din figura 1.8, avem următoarea reprezentare
prin liste de adiacenţă:

M1.U2.5. Rezumat
Pentru a putea lucra cu grafuri orientate sau neorientate este necesară
reprezentarea acestora. Cele mai frecvent utilizate reprezentări sunt cele prin matrici
de adiacenţă şi prin liste de adiacenţă. Cele din urmă sunt mai eficiente atât din
punct de vedere al spaţiului folosit, cât şi al timpului.

M1.U2.6. Test de evaluare a cunoştinţelor


1. Scrieţi matricea de adiacenţă şi listele de adiacenţă corespunzătoare
digrafului din figura 1.9.

Fig. 1.9

18
2. Scrieţi matricea de adiacenţă, matricea valoare şi listele de adiacenţă
corespunzătoare reţelei orientate din figura 1.10.

Fig. 1.10

3. Scrieţi matricea de adiacenţă şi listele de adiacenţă corespunzătoare


grafului neorientat din figura 1.11.

Fig. 1.11

4. Scrieţi matricea de adiacenţă, matricea valoare şi listele de adiacenţă


corespunzătoare reţelei neorientate din figura 1.12.

Fig. 1.12

19

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