22
Liceul Teoretic Dunarea Grafuri neorientate Graf neorientat = o pereche de multimi =(V, E)unde V este o mulţime finită nevida de elemente numite noduri iar E o multime de perechi neordonate din V, numite muchii. Notăm graful cu G=(V, E). Intr-un un graf G=(V, E) neorientat relaţia binară este simetrică: (v,w)ÎE atunci (w,v) ÎE. Nod = element al mulţimii V, unde G=(V, E) este un graf neorientat. Muchie = element al mulţimii E ce descrie o relaţie existentă între două noduri din V, unde G=(V, E) este un graf neorientat; In figura alaturata: V={1,2,3,4,5,6} sunt noduri E={[1,2], [1,4], [2,3],[3,4],[3,5]} sunt muchii G=(V, E)=({1,2,3,4,5,6}, {[1,2], [1,4], [2,3], [3,4], [3,5]}) Adiacenta: Într-un graf neorientat existenţa muchiei (v,w) presupune că w este adiacent cu v şi v adiacent cu w. 1 5 1 2 4 3 6

98-Grafuri-neorientate

Embed Size (px)

DESCRIPTION

atestat complet

Citation preview

Liceul Teoretic Dunarea

Grafuri neorientate

Graf neorientat = o pereche de multimi =(V, E)unde V este o mulime finit nevida de elemente numite noduri iar E o multime de perechi neordonate din V, numite muchii. Notm graful cu G=(V, E).

Intr-un un graf G=(V, E) neorientat relaia binar este simetric: (v,w)E atunci (w,v) E.

Nod = element al mulimii V, unde G=(V, E) este un graf neorientat.

Muchie = element al mulimii E ce descrie o relaie existent ntre dou noduri din V, unde G=(V, E) este un graf neorientat;

In figura alaturata:V={1,2,3,4,5,6} sunt noduriE={[1,2], [1,4], [2,3],[3,4],[3,5]} sunt muchiiG=(V, E)=({1,2,3,4,5,6}, {[1,2], [1,4], [2,3], [3,4], [3,5]})

Adiacenta: ntr-un graf neorientat existena muchiei (v,w) presupune c w este adiacent cu v i v adiacent cu w. n exemplul din figura de mai sus vrful 1 este adiacent cu 4 dar 1 i 3 nu reprezint o pereche de vrfuri adiacente.

Inciden = o muchie este incident cu un nod dac l are pe acesta ca extremitate. Muchia (v,w) este incident n nodul v respectiv w.

Grad = Gradul unui nod v, dintr-un graf neorientat, este un numr natural ce reprezint numrul de noduri adiacente cu acesta (sau numarul de muchii incidente cu nodul respectiv)

Nod izolat = Un nod cu gradul 0.

Nod terminal= un nod cu gradul 1

Nodul 5 este terminal (gradul 1).

Nodul 6 este izolat (gradul 0)

Nodurile 1, 2, 4 au gradele egale cu 2.

Daca un graf neorientat are m muchii atunci suma gradelor tuturor nodurilor este 2m In orice graf G exista un numar par de noduri de grad impar

Lan = este o secven de noduri ale unui graf neorientat G=(V,E), cu proprietatea c oricare dou noduri consecutive din secventa lant sunt adiacente: L=[w1, w2, w3,. . ,wn] cu proprietatea c (wi, wi+1)E pentru 1i=3 noduri astfel incat gradul fiecarui nod este mai mare sau egal decat n/2 atunci G este hamiltonian

Lan eulerian = un lan simplu care conine toate muchiile unui graf

Lantul: L=[1.2.3.4.5.3.6.2.5.6] este lant eulerian

Ciclu eulerian = un ciclu simplu care conine toate muchiile grafuluiCiclul: C=[1.2.3.4.5.3.6.2.5.6.1] este ciclu eulerian

Graf eulerian = un graf care conine un ciclu eulerian.

Condiie necesar i suficient: Un graf este eulerian dac i numai dac oricare vrf al su are gradul par.

Intrebari si exercitii:1. desenati un graf G neorientat cu 6 noduri si 10 muchii 1. Exprimati graful ca o relatie binara detaliind multimea nodurilor si multimea muchiilor 1. precizati pentru fiecare nod gradul 1. precizati un lant simplu, un lant compus 1. precizati un lant elementar, neelementar 1. precizati un ciclu 1. desenati un graf Gp partial cu 7 muchii 1. desenati un subgraf Gs cu 4 noduri 1. modificati Gs astfel incat Gs sa fie graf complet 1. desenati un graf regulat Gr cu 9 noduri 1. cate componente conexe are Gr? 1. modificati Gr astfel incat sa obtineti Gr1 graf conex 1. precizati un lant hamiltonian in Gr1 1. modificati Gr astfel incat acesta sa fie graf eulerian 1. precizati un ciclu eulerian in Gr 1. puteti desena urmatoarea figura fara a ridica creionul de pe hartiesi fara a repete muchiile?

1. este graful anterior eulerian? de ce?

REPREZENTAREA GRAFURILOR NEORIENTATE

Fie G=(V, E) un graf neorientat. Exista mai multe modalitati de reprezentare pentru un graf neorientat, folosind diverse tipuri de structuri de date. Reprezentarile vor fi utilizate in diversi algoritmi si in programele care implementeaza pe calculator acesti algoritmi.

Matricea de adiacent matricea boolean

Matricea de adiacent asociat unui graf neorientat cu n noduri se defineste astfel: A = (ai j) n x n cu

1, daca [i,j]Ea[i,j]= 0, altfel

Observatii:

1. Matricea de adiacenta asociat unui graf neorientat este o matrice simetric1. Suma elementelor de pe linia k reprezint gradul nodului k1. Suma elementelor de pe coloana k reprezint gradul nodului k

Fie graful din figura urmatoare:

0 1 0 1 0 0 nodul 1 are gradul 21 0 1 0 0 0 nodul 2 are gradul 2A=0 1 0 1 1 0 nodul 3 are gradul 31 0 1 0 0 0 nodul 4 are gradul 2 0 0 1 0 0 0 nodul 5 are gradul 1 0 0 0 0 0 0 nodul 6 are gradul 0

Numarul de noduri este 6 si numarul de muchii este 5Matricea este simetrica si patratica avand 6 linii si 6 coloaneDiagonala principala contine numai valori nule

Pentru a prelucra graful se citesc:6- reprezentand n, numarul de noduri5- reprezentand m, numarul de muchii5 perechi x-y reprezentand extremitatile celor 5 muchii:1-2 => a[1,2]=a[2,1]=11-4 => a[1,4]=a[4,1]=12-3 => a[2,3]=a[3,2]=13-4=> a[3,4]=a[4,3]=13-5 => a[3,5]=a[5,3]=1

REPREZENTAREA GRAFURILOR NEORIENTATE

Listele de adiacenta a nodurilorReprezentarea 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:

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

Nodul 6 nu are vecini (este izolat)Pentru intreg graful vom avea mai multe liste:

2 4 1 3 2 4 5 1 3 3Nodul 1:

Nodul 2:

Nodul 3:

Nodul 4:

Nodul 5:

Ordinea nodurilor in cadrul unei liste nu este importantaPentru 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:nod *L[20];Datele de intrare: numarul de noduri si muchiile se vor citi din fisier:O solutie de implementare este urmatoarea:#include#includestruct nod {int nd; nod *next;};nod *L[20];void afisare(int nr_nod) //afiseaza lista vecinilor nodului nr_nod{nod *p=L[nr_nod];if(p==0) cout