Sunteți pe pagina 1din 7

GRAFUL Dedinitie: Se numeste graf (G) o pereche ordonata de multimi (X,U), unde X este o multime finita si nevida, iar

U o multime de perechi formata cu elemente distincte din multimea X(famile de submultimi cu doua elemente din multimea X). Emenentele multimii X se numesc varfuri sau noduri. Multimea X se mai numeste varfurile sau multimea nodurilor grafului G, avand forma X={x 1, x2, x3, , xi, , xn}. Graful G are n noduri si xi reprezinta nodul I al grafului. Ordinul grafului reprezinta numarul de noduri ale grafului n, card(X)=n. Elementele multimii U sunt perchi de noduri, adica submultimi cu doua elemente din multimea X, notate cu uk. Elementul uk este definit de perechea de forma de forma {xi, xj}, unde xi, xjX si distincte. U={ u1, u2, u3, , uk, , um} Multimea U are proprietatea de simetrie daca si numai daca pentru orice pereche de noduri (xi,xj), daca {xi, xj}U, atunci si {xj, xi}U. Clasificarea grafurilor din punct de vedere al proprietatii de simetrie Grafuri neorientate: G=(X,U) este un graf neorientat daca multimea U este formata din perchi neordonate {xi, xj}. Grafuri orientate: G=(X, U) este un graf orientat daca multimea U este formata din perchi ordonate {xj, xi}. GRAFUL NEORIENTAT Elementele multimii U(perechile de noduri) se numesc muchii. Muchia u k a grafului, determinata de submultimea {xi, xj},se noteaza [xi,xj]. Obs: [xi,xj], [xj,xi] reprezinta aceeasi muchie a grafului. Card(U)=numarul de muchii=m. Definitii: Numim noduri adiacente orice pereche de noduri care formeaza o muchie-{xi, xj}U. Fiecare dintre cele doua noduri xi, xj este nod incident cu muchia uk=[xi,xj]. Nodurile vecine unui nod xi sunt toate nodurile xj care sunt adiacente cu el. Se numeste nod extrem ale unei muchii oricare dintre cele doua noduri care se gasesc la capatul michiei. Nodurile xi, xj sunt extremitatile muchiei [xi,xj]. Se numesc muchii incidente doua muchii u i, uj care au o extremitate comuna. Putem spune ca un graf neorientat se defineste prin multimea nodurilor sale X si multimea muchiilor sale U. Ex1-manual, pagina 239 Teorema1: Daca graful neorientat G are n noduri (x1, x2, x3, , xi, , xn), atunci numarul total de grafuri neorientate care se pot forma cu aceste noduri este g:

Gradul unui nod al grafului neorientat

Nodul unui graf este caracterizat prin grad. Gradul nodului xk al grafului G este egal cu numarul muchiilor incidente cu nodul si se noteaza cu d(xk). Definitii: Numim nod terminal, nodul care are gradul egal cu 1, d(xk)=1(acest nod este incident cu o singura muchie). Numim nod izolat, un nod care are gradul egal cu 0, d(xk)=0(nu este adiacent cu un alt nod al grafului, adica nu se gaseste in extremitatea nici unei muchii. Intr-un graf cu n noduri, oricare ar fi nodul xk,

0 d(xk)n-1

Teorema2: Daca graful G are m muchii(u1, u2, , um) si n noduri (x1, x2, , xn), atunci intre gradul nodurilor si numarul de muchii exista urmatoarea relatie: suma gradelor tuturor nodurilor grafului este egala cu dublul numarului de muchii:

Propozitie1: Pentru orice graf G, numarul nodurilor de grad impar este par. Propozitie2: Numarul minim de muchii pe care trebuie sa le aiba un graf neorientat, cu n noduri, ca sa nu existe noduri izolate este: m min=[(n+1)/2] Teorema3: Daca graful G are n noduri atunci cel putin doua au acelasi grad. GRAFUL ORIENTAT In cazul acestui graf, perechile de noduri sunt ordonate. Elementele multimii (perechile de noduri) se numesc arce. Arcul k al grafului uk, ce uneste nodurile xi cu xj, este determinat de submultimea {xi, xj} si se noteaza [xi,xj]. Se numesc noduri adiacente in graful G oricare din perechile de noduri care formeaza un arc: (xi, xj)U sau (xj, xi)U. Fiecare din cele doua noduri este incident cu arcul u k=[xi, xj] sau uk=[xj, xi]. Exemplu manual, pagina 243 Teorema4: Daca graful orientat G are n noduri (x1, x2, x3, , xi, , xn), atunci numarul total de grafuri care se pot forma cu aceste noduri este g:

g=4n(n-1)/2
Gradele unui nod al grafului orientat Nodulunui graf este caracterizat prin gradul intern si gradul extern. Gradul intern al unui nod xi al grafului G este egal cu numarul arcelor care intra in nodul xi, notat d-(x).

Gradul extern al unui nod xi al grafului G este egal cu numarul arcelor care ies din nodul xi, notat d+(x). Nodul terminal este nodul care are suma gradelor 1 si este incident cu un singur arc. Nodul izolat este nodul care are suma gradelor 0, nefiind adiacent cu nici un alt nod. Se numeste successor al nodului xi orice nod la care ajunge un arc care iese din nodul xi. S(x)=multimea succesorilor nodului xi, formata din multimea nodurilor la care ajung arcele care ies din nodul xi. S(x)={xjX/(xi, xj)U} Se numeste predecesor al nodului xi orice nod de la care intra un arc in nodul x i. P(x)=multimea predeccesorilor nodului xi, formata din multimea nodurilor la care ajung arcele care intra in nodul xi. P(x)={xjX/(xj, xi)U} Teorema5: Daca graful orientat G are m arce (u 1, u2, , um) si n noduri (x1, x2, x3, , xn), atunci intre gradele nodurilor si numarul de muchii are loc relatia: suma gradelor interne ale tuturor nodurilor este egala cu suma gradelor externe ale tuturor nodurilor si cu numarul de arce:

Demonstratie: Fiecare arc ui=[xi,xj] corespunde unei unitati din gradul extern al nodului xi si a unei unitati din gradul intern al nodului x j, astfel fiecare arc contribuie cu o unitate la suma gradelor interne si cu o unitate la suma gradelor externe. Reprezentarea si implementarea grafului Reprezentarea prin matricea de adiacenta Reprezentarea prin lista muchiilor(arcelor) Reprezentarea prin lista de adiacenta(listelor vecinilor) Fie graful G=(X,U) ce are n noduri si m muchii. Reprezentarea prin matricea de adiacenta Matricea de adiacenta a unui graf este o matrice patratica binara de ordinal n, An,n , definita astfel:

Implementarea grafului prin matricea de adiacenta se face printr-un tablou bidimensional de ordin n, astfel: int a[<n>][<n>]; Proprietatile matricei de adiacenta: 1. Elementele de pe diagonala principala au valoarea 0 (orice muchie [i,j] trebuie sa respecte conditia ij 2. In cazul unui graf neorientat, matricea de adiacenta este o matrice simetrica fata de prima diagonala, deoarece daca exista muchia [i,j], atunci exista si muchia [j,i] Matricea de adiacenta este utila pentru determinarea existentei unei muchii sau a unui arc intre doua noduri , putandu-se calcula gradul unui nod.

Implementarea algoritmilor pentru reprezentarea grafurilor cu matricea de adiacenta 1. Crearea matricei de adiacenta prin introducerea datelor de la tastatura. Determinarea gradului unui nod. Salvarea matricei de adiacenta intr-un fisier text Graf neorientat #include<iostream.h> #include<fstream.h> int a[10][10],n,m;//n=nr de noduri,m=numarul de muchii ofstream f("graf1.txt"); void scrie(){//functie cu ajutorul careaia se scrie matricea de adiacenta in fisier int i,j; f<<n<<endl; for(i=1;i<=n;i++){ for(j=1;j<=n;j++) f<<a[i][j]<<" "; f<<endl; } f.close(); } int grad(int i){ int j,g=0; for(j=1;j<=n;j++) g+=a[i][j]; return g; } int main(){ int i,j,k; cout<<"numarul de noduri "; cin>>n; cout<<"numarul de muchii "; cin>>m;

for(k=1;k<=m;k++){ cout<<"primul nod al muchiei "<<k<<":"; cin>>i; cout<<"al doilea nod al muchiei "<<k<<":"; cin>>j; a[i][j]=1; a[j][i]=1; } cout<<"Nodurile izolate sunt: "; for(i=1;i<=n;i++) if(grad(i)==0) cout<<i<<" "; cout<<"nodurile terminale sunt: "; for(i=1;i<=n;i++) if(grad(i)==1) cout<<i<<" "; scrie(); return 0; } Graf orientat #include<iostream.h> #include<fstream.h> int a[10][10],n,m;//n=nr de noduri,m=numarul de muchii ofstream f("graf2.txt"); void scrie(){//functie cu ajutorul careaia se scrie matricea de adiacenta in fisier int i,j; f<<n<<endl; for(i=1;i<=n;j++) {for(j=1;j<=n;j++) f<<a[i][j]<<" "; f<<endl;} f.close();} int grad_ext(int i){ int j,g=0; for(j=1;j<=n;j++) g+=a[i][j]; return g;} int grad_int(int i){ int j,g=0; for(j=1;j<=n;j++) g+=a[j][i]; return g;} int main(){ int i,j,k; cout<<"numarul de noduri "; cin>>n; cout<<"numarul de muchii "; cin>>m; for(k=1;k<=m;k++)

{cout<<"nodul initial al arcului "<<k<<":"; cin>>i; cout<<"nodul final al arcului "<<k<<":"; cin>>j; a[i][j]=1; } cout<<"Nodurile izolate sunt: "; for(i=1;i<=n;i++) if(grad_int(i)+grad_ext(i)==0) cout<<i<<" "; cout<<endl<<"nodurile terminale sunt: "; for(i=1;i<=n;i++) if(grad_int(i)+grad_ext(i)==1) cout<<i<<" "; scrie(); return 0;} 2. Crearea matricei de adiacenta prin citirea datelor din fisier. Determinarea numarului de vecini ai unui nod. Afisarea muchiilor(arcelor) grafului Graf neorientat #include<iostream.h> #include<fstream.h> int a[10][10],n,m;//n=nr de noduri,m=numarul de muchii ifstream f("graf3.txt"); void citeste(){//functie cu ajutorul careaia se citeste matricea de adiacenta din fisier int i,j; f>>n; for(i=1;i<=n;i++) for(j=1;j<=n;j++) f>>a[i][j]; f.close();} int nr_m(){//functie cu ajutorul careia se determina nr de muchii ale grafului int i,j,m=0; for(i=1;i<=n;j++) for(j=1;j<=n;j++) m+=a[i][j]; return m/2;} int grad(int i){ int j,g=0; for(j=1;j<=n;j++) g+=a[j][i]; return g;} int main(){ int i,j,max; citeste(); max=grad(1); for(i=2;i<=n;i++) if(grad(i)>max)

max=grad(i); cout<<"nodurile cu cei mai multi vecini sunt: "; for(i=1;i<=n;i++) if(grad(i)==max) cout<<i<<" "; cout<<endl<<"graful are: "<<nr_m()<<"muchii "<<endl; cout<<"Muchiile grafului sunt: "; for(i=1;i<=n;i++) for(j=i+1;j<=n;j++) if(a[i][j]==1) cout<<i<<"-"<<j<<" "; return 0;} Graf orientat

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