This is an old revision of the document!
Laboratorul 7:
1. Obiectivele laboratorului
2. Grafuri neorientate
2.1 Definiție
Un graf neorientat este o pereche ordonată de multimi(X,U),unde:
X este o mulțime finită și nevidă de elemente numite noduri sau vârfuri
U este o mulțime de perechi neordonate din X, numite muchii
2.2 Structură
Un graf are următoarele elemente:
Mulțimea nodurilor X - Mulțimea tuturor nodurilor grafului
Multimea muchiilor U - Mulțimea tuturor muchiilor grafului
Gradul nodului - numărul de muchii formate cu ajutorul nodului respectiv
Nod izolat - Un nod ce nu formează nici-o muchie
Noduri terminale - Un nod ce formează o singură muchie
Noduri adiacente - Noduri intre care există o muchie
Nod si muchie incidente - Nodul face parte dintr-o muchie
2.3 Reprezentare
Matricea de adiacență - este o matrice a cu n linii și n coloane,în care elementele a[i,j] se definesc astfel:
a[i,j] = 1 ,dacă ∃ muchia [i,j] cu i≠j
a[i,j] = 0 ,în caz contrar
Lista de adiacență - este un tablou de liste egal cu numarul de varfuri;dacă există o muchie intre nodul curent si un alt nod,atunci acesta se trece în listă
Vectorul de muchii - mulțime ce conține toate muchiile grafului
3. Grafuri orientate
3.1 Definiție
Un graf orientat este o pereche ordonată de mulțimi G={X,U}, unde:
X este o mulțime finită și nevidă numită mulțimea nodurilor(vârfurilor)
U este o mulțime formată din perechi ordonate de elemente ale lui X, numită mulțimea arcelor
3.2 Structură
Într-un graf orientat, distingem:
3.3 Reprezentare
Matricea de adiacență - este o matrice a cu n linii și n coloane, în care elementele a[i,j] se definesc astfel:
a[i,j] = 1, dacă ∃ arcul (i,j) în mulțimea U
a[i,j] = 0, în caz contrar
4 Parcurgerea grafurilor
4.1 Parcurgerea în lățime
Parcurgerea în lățime (Breadth-First-Search -BFS) este o metodă ce presupune vizitarea nodurilor în următoarea ordine:
nodul sursă (considerat a fi pe nivelul 0)
vecinii nodului sursă (reprezentând nivelul 1)
vecinii încă nevizitați ai nodurilor de pe nivelul 1 (reprezentând nivelul 2)
ș.a.m.d
4.1.1 Implementare
Pe masură ce algoritmul avansează,se colorează nodurile în felul următor:
alb - nodul este nedescoperit încă
gri - nodul a fost descoperit și este în curs de procesare
negru - procesarea nodului s-a încheiat
Se păstrează informațiile despre distanța până la nodul sursă. Se obține arborele BFS. Pentru implementarea BFS se utilizează o coadă (Q) în care inițial se află doar nodul sursă.Se vizitează pe rând vecinii acestui nod și se pun și ei în coadă.În momentul în care nu mai există vecini nevizitați,nodul sursă este scos din coadă.
Pentru fiecare nod u din graf
{
culoare[u]=alb
d[u] = infinit //in d se retine distanta pana la nodul sursa
p[u] = null //
}
culoare[sursă]=gri
d[sursă]=0
enqueue(Q,sursă) //punem nodul sursă în coada Q
Cât timp coada Q nu este vidă
{
v=dequeue(Q) //extragem nodul v din coadă
pentru fiecare u dintre vecinii lui v
dacă culoare[u] == alb
{
culoare[u] = gri
p[u] = v
d[u] = d[v] + 1
enqueue(Q,u) //adăugăm nodul u în coadă
}
culoare[v] = negru //am terminat explorarea vecinilor lui v
}