Definitie: b3c16cl
Se numeste graf neorientat, o pereche ordonata de multimi notata G=(X,U), unde
X=Ax1,x2,…,xnS este o multime finite si nevida de elemnte numite noduri
sau varfuri, iar U=Au1,u2,…,unS este o multime de perechi neordonate de
elemente din X numite muchii.
Asadar un neorientat poate fi reprezentat sub forma unei figure geometrice alcatuite
din puncte(noduri,varfuri) si linii drepte sau curbe care unesc aceste puncte
(muchii,arce).
Exemplu:
G=(X,U) X=A1,2,3,4,5,6,7,8,9,10S U=A(1,2);(1,3);(1,5);(2,3);(6,7);(6,10);(7,8);(8,9);(9,10)S
Pentru o muchie uk=(x,y), vom spune ca :
· varfurile x si y sunt adiacente si se numesc extremitatile muchiei
uk ;
· muchia uk si varful x sunt incidente in graf(la fel, muchia uk si varful
b);
· muchia (x,y) este totuna cu (y,x) (nu exista o orientare a muchiei);
Doua muchii care au o extremitate comuna se numesc incidente.
Definitie:
Gradul unui varf x, notat d(x), reprezinta numarul muchiilor care trec prin
nodul x (incidente cu nodul x).
Exemplu: d(1)=3, d(2)=2, d(4)=0, d(5)=1.
· Un varf care are gradul 0 se numeste varf izolat(de exemplu varful
4).
· Un varf care are gradul 1 se numeste varf terminal(de exemplu varful
5).
Propozitie:
Fie G=(X,U) un graf neorientat cu n noduri si m muchii, suma gradelor tuturor
nodurilor este egala cu 2m.
Intr-un graf neorientat numarul nodurilor de grad impar este un numar par.
· Se numeste graf partial al grafului G=(X,U) un graf neorientat G’=(X,V),
unde VIX. Altfel spus, un graf G’ a lui G, este chiar G sau se
obtine din G pastrand toate varfurile si suprimand niste muchii.
· Se numeste subgraf al grafului G=(X,U) ungraf neorientat H=(Y,V), unde
YIX iar V contine toate muchiile din U care au ambele extremitati in
multimea Y.
Reprezentarea grafurilor neorientate
Cele mai cunoscute forme de reprezentare ale unui astfel de graf sunt: matricea
de adiacenta, listele vecinilor si vectorul muchiilor.
A. Matricea de adiacenta
Este o matrice patratica cu n linii si n coloane, in care elementele aai,ji
se definesc astfel: aai,ji=1 daca exista (i,j) in U, cu x diferit de y si 0
daca nu exista (i,j) in U.
Pentru graful G=(X,U) din figura de mai jos, matricea de adiacenta este: linia
0 1 1 1 1
1 0 1 0 2
A= 1 1 0 1 3
1 0 1 0 4 coloana 1 2 3 4 aai,ji=aaj,ii oricare ar fi i,j IA1,2,…..,nS
Proprietatile matricei de adiacenta:
· Este o matrice simetrica;
· Pe diagonala principala are toate elemntele egale cu 0;
· Suma elementelor pe linia sau coloana i este egala cu gradul nodului
i;
· Daca elementele pe linia/coloana i sunt toate egale cu 0 atunci nodul
este izolat;
· Daca toate elementele din matrice,mai putin cele de pe diagonala principala,
sunt 1 inseamna ca graful este complet.
B. Listele vecinilor
Pentru fiecare nod al grafului se retin nodurile adiacente cu el.
Pentru reprezentarea listei de adiacenta se poate folosi alocare dinamica.
Exemplu pentru matricea de adiacenta de mai sus:
nodul lista vecinilor
1 2, 3, 4
2 1, 3
3 1, 2, 4
4 1, 3
C. Vectorul muchiilor
Fiecare muchie a grafului poate fi privita ca o inregistrare cu doua componente:
cele doua varfuri care constitue extremitatile muchiei. Notand aceste extremitati
cu nod1 si nod2, putem defini tipul de date tmuchie, astfel: type tmuchie=record nod1,nod2:integer; end;
Graful in ansamblul sau, este o multime de muchii, adica o multime de elemente
de tipul tmuchie.In consecinta definim graful ca un “vector de muchii”,
adica un vector cu elementele de tipul tmuchie: var v:arraya1..25i of tmuchie;
Graf complet si graf bipartit.
Se numeste graf complet cu n varfuri, notat Kn, un graf G=(X,U) cu proprietatea
ca intre oricare doua varfuri exista o muchie.
Exemplu:
· Un graf complet cu n varfuri are n*(n-1)/2 muchii.
Un graf neorientat G=(X,U) se numeste bipartit daca exista 2 multimi de noduri
A si BIX astfel incat AÈB=X si AÇB=A; iar orice muchie
din U are o extremitate in multimea A si una in multimea B.
Exemplu: Fie G=(X,U) unde X=A1,2,3,4,5,6,7S, U=A(1;5),(2;6),(3;6),(4;7)S
Cu multimile A=A1,2,3,4S si B=A5,6,7S
Se obesrva ca: AÈB=X, AÇB=A, iar fiecare muchie are o extremitate
in A si una in B.
Se numeste graf bibartit complet, un graf bipartit cu proprietatea ca pentru
orice varf x din A si orice varf y din B, exista muchia(x,y) (unde A si B sunt
cele doua submultimi care partitioneaza multimea varfurilorX).
Exemplu:
Notiunile de lant si ciclu
Se numeste lant in graful G, o succesiune de varfuri L=(x1,x2,…..,xp)
,cu xi IX, in care (") 2 noduri consecutive din succesiune sunt adiacente,
adica exista muchiile (x1,x2),(x2,x3),….,(xp-1,xp)IU.
Varfurile x1 si xp se numesc extremitatile lantului, iar numarul de muchii care
intra in componenta sa reprezinta lungimea lantului.
· Un lant in care (") 2 elemente sunt diferite se numeste lant elementar.
Altfel lantul este neelementar.
Exemplu:
Lant elementar:1,2,3,4,5; 6,7,3,9,4,8…
Lant neelementar: 1,2,3,2;
Un graf G este conex, daca oricare ar fi doua varfuri ale sale , exista un lant
care le leaga.
Se numeste ciclu intr-un graf, un lant in care extremitatile coincid si muchiile
sunt diferite intre ele.
Exemplu: c1=(3,4,5,3,7,6,1,2,3), c2=(1,2,3,7,6,1), c3=(3,5,4,9,3)
· Daca intr-un ciclu, toate varfurile cu exceptia primului si a ultimului
sunt distincte doua cate doua, atunci ciclul se numeste elementar. In caz contrar
el este neelementar.
Ciclurile c2 si c3 din exemplul anterior sunt elementare,iar c1 este neelementar(in
c1, varful 3 apare si ca varf “intermediar”,adica traseul descris
mai trece odata prin varful 3 pe langa faptul ca porneste din el si se intoarce
tot in el.).
Parcurgerea grafurilor neorientate
Prin parcurgerea grafurilor neorientate se intelege vizitarea varfurilor intr-o
anumita ordine, ordine data de un anumit criteriu.
Exista doua metode de parcurgere:
· Parcurgerea in latime BF(Breadth First);
· Parcurgerea in adancime DF(Depth First);
Algoritmul de parcurgere in latime BF
Fiind dat un graf neorientat G=(X,U) si un nod xIX, sa se parcurga toate
varfurile grafului incepand din varful x.
Metoda consta in:
-se viziteaza varful de pornire, dupa care se viziteaza toate varfurile adiacente
cu acesta care nu au fost vizitate inca,in continuare se alege primul varf adiacent
cu varful de pornire si se viziteaza toate varfurile adiacente cu acesta nevizitate
inca si asa mai departe pentru celelalte varfuri cat timp este posibil.Exemplu:
Presupunem ca varful de pornire este 1,atunci parcurgerea BF este:1,2,5,6,3,4,7.
Pentu 3 varf de pornire:3,2,4,1,5,6,7.
Pentru implementare vom folosi un vector care are proprietatile unei cozi,
fie c=(c1,c2,…,ck). Capetele de intoducere si extragere vor fi identificate
prin pozitiile p si respectiv u.
Notam cu n numarul de noduri din graf. Este necesar ca elemntele matricei de
adiacenta a cu n linii*n coloane sa fie cunoscute.
Mai avem nevoie de un vector viz cu n elemente, in care elementele vizaki (k=1,2,….,n)
au semnificatia: vizaii=0, daca varful i nu a fost vizitat sau vizaii=0 daca
a fost vizitat. Mai intai initializam tot vectorul viz cu 0.
Initial in coada se gaseste varful de pornire: p=1, u=1, capi:=x, vizaxi:=1.
Cat timp mai sunt elemente in coada(“while p<=u”):
· Extragem din coada varful aflat in capatul de extragere u, si-l memoram
intr-o variabila zAz:=capiS;
· Pe linia z in a cautam vecinii lui z si ii introducem in coada.
Algoritmul de parcurgere in adancime DF
Metoda consta in:
-alegem varful de pornire, pentru acesta se alege primul vecin al sau nevizitat
inca,pentru acest vecin cautam primul vecin al sau nevizitat si asa in continuare.
In cazul in care un varf nu mai are vecini nevizitati atunci ne intoarcem la
nodul anterior, iar pentru acel nod cautam urmatorul vecin nevizitat al sau.
Pentru graful de mai sus parcurgerea in adancime plecand de la varful 1 este:
1,2,3,4,6,7,5.
Pentru a implementa vom folosi o stiva si metoda backtracking.
Conexitatea in grafurile neorientate
Prin parcurgerea in latime acelui graf am subliniat o proprietate importanta
a grafului:faptul ca in urma parcurgerii au fost vizitate toate varfurile.
Luand oricare doua varfuri,putem gasi cel putin un traseu care porneste dintr-un
varf si ajunge in celalalt.
Luand oricare doua varfuri, ele pot fi legate printr-un lant.
Dar nu toate grafurile sunt conexe. In schimb putem desprinde din el “portiuni”
care, fiecare luata separat, este un graf conex.
Exemplu:
Se numeste componenta conexa a grafului G=(X,U), un subgraf G1=(X1,U1) a lui
G, conex, cu proprietatea ca nu exista nici un lant care sa lege un varf din
X1 cu un varf din X-X1.
Grafuri hamiltoniene si euleriene.
Se numeste ciclu hamiltonian intr-un graf, un ciclu elementar care contine toate
varfurile grafului.
Un graf care contine un ciclu hamiltonian se numeste graf hamiltonian.
Un lant elementar care contine toate varfurile grafului se numeste lant hamiltonian.
· Un graf hamiltonian are cel putin trei varfuri.
· Graful complet cu n varfuri este un graf hamiltonian.
Teorema:
Fie G=(X,U), cu n>=3 varfuri, daca oricare ar fi x un nod al grafului si
d(x)>=n/2, atunci graful este hamiltonian.
Se numeste ciclu eulerian intr-un graf, un ciclu care contine toate muchiile
grafului.
Un graf care contine un ciclu eulerian se numeste graf eulerian.
Un lant eulerian este un lant care contine toate muchiile grafului.
Teorema:
Un graf fara varfuri izolate este eulerian, daca si numai daca este conex si
gradele tuturor varfurilor sunt numere pare.