Sunteți pe pagina 1din 7

GRAFURI NEORIENTATE

1. Definitii
Definitie 1:
Se numeste graf neorientat, o pereche ordonata de multimi (X,U), unde: -X este o multime finita si nevida de elemente numite varfuri sau noduri; -U este o multime de perchi neordonate de cate doua elemente din X, numite muchii sau ace. U={[x,y] /x,y apartin X} Observatie: Muchia [x,y] este identica cu [y,x]. Definitia 2: Fie G=(X,U) un graf neorientat si [x,y] o muchie. Spunem ca varfurile x si y sunt adiacente ,si ca varful x,sau y , este incident cu muchia [x,y]. Definitie 3: Fie G=(X,U) un graf neorientat si x un varf. Gradul unui varf x, notat d(x), reprezinta numarul muchiilor care trec prin nodul x (incidente cu nodul x).,sau numarul de varfuri adiacente cu acesta. Definitie 4: Fie graful G=(X,U)un graf neorientat , si x un varf. a)Daca gradul varfului x este = cu 0,atunci varful x este izolat. b)Daca gradul varfului x este = cu 1, atunci varful x se numeste varf terminal sau frunza. Definitie 5: Fie G=(X,U) un graf neorientat. a)Se numeste graf complet daca oricare doua varfuri ale sale sunt adiacente b)Se numeste graf bipartit daca exista doua multimi A si B incluse in X, astfel incat: *A intersectat cu B=multimea vida, A reunit cu B=X, *toate muchiile grafului au o extremitate in A si cealalta in B. Definitia 6: Fie G=(X,U) un graf neorientat. a) Se numeste graf partial al grafului G,un graf G1=(X,U1), cu proprietatea ca U1 inclus in U.

b)Se numeste subgraf al grafului G un graf H=(X1,U1) cu proprietatea ca X1 inclus in X ,U1 inclus in U, si orice muchie din U1 are ambele extremitati in X1. Notiunile de lant si ciclu Observatie 6: a)Un graf partial se obtine prin pastrarea tuturor varfurilor si eliminarea unor muchii. b)Un subgraf se obtine prin eliminarea unor varfuri si a muchiilor incidente cu acestea. Definitie 7:Fie G=(X,U) un graf neorientat. a)Se numeste lant in graful G, o succesiune de varfuri L=(z1,z2,...,zk), unde z1.z2,...,zk apartin lui X, cu proprietatea ca oricare doua varfuri consecutive sunt adiacente, adica exista muchiile [z1,z2], [z2,z3],...,[zk-1,zk] apartin lui U. b)Un lant se numeste elementar daca oricare 2 varfuri ale sale sunt distincte. c) Se numeste ciclu intr-un graf, un lant L=(z1,z2,...,zk) cu proprietatea ca z1=zk si muchiile [z1,z2],[z2,z3],...,[zk-1,zk] sunt distincte doua cate doua d)Un ciclu se numeste elementar daca oricare doua varfuri ale sale cu exceptia primului si a ultimului varf sunt distincte.

Definitie 8: Fie G=(X,U) un graf neorientat. Un graf G este conex, daca oricare ar fi doua varfuri ale sale, exista un lant care le leaga. 4) Suma elementelor de pe linia sau coloana i este egala cu gradul varfului i. 2. Teoreme Notaie Pentru graful G = (X, U) notm: a. m = numrul muchiilor b. N =numrul vrfurilor c. X = {x1, x2, x3, xN} mulimea vrfurilor d. U = {u1, u2, u3, um} mulimea muchiilor e. O muchie uk este o pereche neordonat (xi, xj) Teorema 1: Intr-un graf G=(X,U) cu n varfuri si m muchii, suma gradelor tuturor varfurilor este egala cu 2*numarul muchiilor. Teorema 2: Fie G=(X,U) un graf neorientat.

Exista un numar par de varfuri de grad impar. Teorema 3 : Graful complet de ordin notat K(n) are n(n-1)/2 muchii. 3. Reprezentarea in memorie a grafurilor neorientate 3.1. 3.2. 3.3 3.1. Matricea de adiacenta Vectori de muchii Listele vecinilor Matricea de adiacen

Definiie Fie graful G = (X, U) cu m muchii i N vrfuri numerotate 1, 2, 3 .n. Matricea de adiacen asociat acestui graf este o matrice ptratic A de dimensiune N cu proprietatea c: 1, dac exist muchia *i, j+ cu i<>j A[i , j] = 0, altfel Observaii: 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.

3.2.

Vector de muchii Fie un graf G= (X, U) cu N vrfuri. Implementarea grafului ca vector de muchii presupune definirea unui articol Muchie cu dou cmpuri reprezentnd extremitile unei muchii. Graful este implementat printr-un vector G ale crui elemente sunt de tip Muchie. Elementul de pe poziia i din vector va contine doua informatii (G*i+.v1, G*i+.v2)corespunztoare extremitilor muchiei i: v1 i v2. Sorturile necesare implementrii: Struct Muchie { int v1; int v2;

}; Muchie V[20]; int N, m; Citeste_Vector_Muchii(V, N, m, "a221.txt"); Afisare_Vector_Muchii(V, m);

3.3Listele de adiacenta a nodurilor Reprezentarea in calculator a unui graf se poate face utilizand listele de adiacenta a varfurilor, adica pentru fiecare varf se alcatuieste lista varfurilor adiacente cu el. Fie graful din figura urmatoare:
1 6 5 2 3 4

Lista vecinilor nodului 3: 2, 4, 5 (noduri adiacente)


1 6 5 2 3 4

Nodul 6 nu are vecini (este izolat) Pentru intreg graful vom avea mai multe liste : Nodul 1 : Nodul 2 : Nodul 3 : Nodul 4 : Nodul 5 :
2 1 2 1 3 4 3 4 3 5

Ordinea nodurilor in cadrul unei liste nu este importanta Pentru a genera o astfel de lista vom defini tipul nod : struct nod {int nd; nod *next;};

Toate listele se vor memora utilizand un vector de liste : struct nod *L[20]; Modurile de reprezentare (prin matrice de adiacenta si prin liste de vecini) se folosesc dupa natura problemei. Adica, daca in problema se doreste un acces frecvent la muchii, atunci se va folosi matricea de adiacenta; daca numarul de muchii care se reprezinta este mult mai mic dect nxn, este de preferat sa se folosesca listele de adiacenta, pentru a se face economie de memorie. 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 x, 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: 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 viz[k] (k=1,2,.,n) au semnificatia: viz[i]=0, daca varful i nu a fost vizitat sau viz[i]=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, c[p]:=x, viz[x]:=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 z{z:=c[p]}; 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 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.

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