350 likes | 820 Views
GRAFURI. GRAFURI NEORIENTATE GRAFURI ORIENTATE. GRAFURI NEORIENTATE. Definitie Gra d ul unui vârf . Graf parţial şi subgraf Reprezentarea grafurilor ne orientate Parcurgerea grafurilor neorientate Conexitate in grafuri neorientate Grafuri hamiltoniene si euleriene
E N D
GRAFURI • GRAFURI NEORIENTATE • GRAFURI ORIENTATE
GRAFURI NEORIENTATE • Definitie • Gradul unui vârf. • Graf parţial şi subgraf • Reprezentarea grafurilor neorientate • Parcurgereagrafurilorneorientate • Conexitate in grafurineorientate • Grafurihamiltoniene si euleriene • Aplicatiigrafurineorientate back
Definitie • Definitie: • Se numestegrafneorientat, o perecheordonata de multiminotata G=(X,U), unde X={x1,x2,…,xn} este o multimefinite si nevida de elemntenumitenodurisauvarfuri,iar U={u1,u2,…,un} este o multime de perechineordonate de elementedin X numitemuchii. • Exemplu: • G=(X,U) X={1,2,3,4,5,6,7,8,9,10} U={(1,2);(1,3);(1,5);(2,3);(6,7);(6,10);(7,8);(8,9);(9,10)}
Gradul unui vârf. • Gradul unui varf x, notat d(x), reprezinta numarul muchiilor care trec prin nodul x (incidente cu nodul x). • 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 back
Graf parţial şi subgraf • Un graf G’ a lui G, este chiar G sau se obtinedin G pastrandtoatevarfurile si suprimandnistemuchii.Se numestesubgraf al grafului G=(X,U) un grafneorientat H=(Y,V), unde YX iar V continetoatemuchiiledin U care au ambeleextremitati in multimea Y. back
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 Reprezentarea grafurilor neorientate • Cele mai cunoscute forme de reprezentare ale unui astfel de graf sunt: matricea de adiacenta, listele vecinilor si vectorul muchiilor. • Matricea de adiacenta • Este o matrice patratica cu n linii si n coloane, in care elementele a[i,j] se definesc astfel: a[i,j]=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: • a[i,j]=a[j,i] oricare ar fi i,j {1,2,…..,n} • Proprietatile matricei de adiacenta: • Este o matrice simetrica; • Pe diagonala principala are toate elementele 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. next back
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 Listele vecinilor • 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 back next
Graf complet si graf bipartit. • Se numestegraf completcu n varfuri, notatKn, un graf G=(X,U) cuproprietatea ca intreoricaredouavarfuri exista o muchie. • Exemplu: • Un grafcomplet cu n varfuri are n*(n-1)/2 muchii. • Un grafneorientat G=(X,U) se numestebipartitdacaexista 2 multimi de noduri A si BX astfelincat AB=X si AB=; iaroricemuchie din U are o extremitate in multimea A siuna in multimea B. • Exemplu: Fie G=(X,U) unde X={1,2,3,4,5,6,7}, U={(1;5),(2;6),(3;6),(4;7)} • Cu multimile A={1,2,3,4} si B={5,6,7} • Se obesrvaca: AB=X, AB=, iarfiecaremuchie are o extremitate in A siuna in B.Se numestegrafbibartit complet, un grafbipartitcuproprietatea ca pentruoricevarf x din A si oricevarf y din B, exista muchia(x,y) (unde A si B suntceledouasubmultimi care partitioneazamultimeavarfurilorX). • Exemplu: back
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 xX, 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 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. next back
Conexitate in grafuri neorientate • Prinparcurgerea in latimeaceluigraf am subliniat o proprietateimportanta a grafului:faptulca in urmaparcurgerii au fostvizitatetoatevarfurile. • Luandoricaredouavarfuri,putemgasicelputin un traseu care pornestedintr-un varf si ajunge in celalalt. • Luandoricaredouavarfuri, ele pot fi legateprintr-un lant. • Dar nu toategrafurilesuntconexe. In schimbputemdesprindedin el “portiuni” care, fiecareluataseparat, este un grafconex. • Exemplu: • Se numestecomponentaconexa a grafului G=(X,U), un subgraf G1=(X1,U1) a lui G, conex, cuproprietatea ca nu exista nici un lant care sa lege un varfdin X1 cu un varfdin X-X1. back
Grafurihamiltoniene si euleriene • Se numestecicluhamiltonianintr-un graf, un cicluelementar care continetoatevarfurilegrafului. • Un graf care contine un cicluhamiltonian se numestegrafhamiltonian. • Un lantelementar care continetoatevarfurilegrafului se numestelanthamiltonian. • Un grafhamiltonian are celputintreivarfuri. • Graful complet cu n varfuri este un grafhamiltonian. • Teorema: • Fie G=(X,U), cu n>=3 varfuri, dacaoricarear fi x un nod al grafului si d(x)>=n/2, atuncigraful este hamiltonian. • Se numesteciclueulerianintr-un graf, un ciclu care continetoatemuchiilegrafului. • Un graf care contine un ciclueulerian se numestegrafeulerian. • Un lanteulerian este un lant care continetoatemuchiilegrafului. • Teorema: • Un graffaravarfuriizolate este eulerian, daca si numaidaca este conex si gradeletuturorvarfurilorsuntnumere pare. back
GRAFURI ORIENTATE • Definitie • Graful unui vârf. Mulţimile Γ şi ω • Graf parţial şi subgraf • Reprezentarea grafurilor orientate • Drumuri si circuite in grafuri orientate • Aplicatii grafuri orientate back
Definitie • Numim graf orientat, 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 (muchiilor). Muchiile sunt diferenţiate prin ordinea de scriere a simbolurilor. • Arcul (x,y) nu este tot una cu arcul (y,x). back next
U1 1 U2 2 U3 U5 U4 3 U6 4 U7 Figura1 Exemplu graf orientat • Pentru graful G=(X,U) din figura 1. avem: X={1, 2, 3, 4} şi U={u1, u2, u3, u4, u5, u6, u7,}= {(1,1), (2,1), (3,2), (2,3), (2,4), (3,4), (3,4)} • arc va fi de forma u= (x,y), unde x se numeşte extremitate iniţială, iar y se numeşte extremitate finală a arcului. Cu alte cuvinte, “arcul iese din nodul x şi intră în nodul y”. La fel ca la grafurile neorientate, vom spune că nodurile x şi y sunt adiacente, iar arcul u şi nodul x sunt incidente (la fel arcul x şi nodul y). Nodul y se numeşte succesor al lui x, iar nodul x se numeşte predecesor al lui y. Un arc de forma (x,x), care iese din nodul x şi intră tot x, se numeşte buclă. back
Graful unui vârf • Gradul exterior al unui vârf x, notat d+(x), reprezintă numărul arcelor care ies din nodul x, adică numărul arcelor de forma (x,z) ε U. • Analog, se defineşte gradul interior al unui vârf x, notat d-(x), ca fiind numărul arcelor care intră în nodul x (de forma (y,x)). • → mulţimea nodurilor ce constituie extremităţi finale ale arcelor care pleacă din nodul x. Pe scurt, mulţimea succesorilor lui x; • → mulţimea nodurilor ce constituie extremităţi iniţiale ale arcelor care pleacă din nodul x. Pe scurt, mulţimea predecesorilor lui x; back
Graf parţial şi subgraf • Fie graful G = (X,U). Un graf parţial al lui G, este un graf G1= (X,V), cu . Altfel spus, un graf parţial G1 al lui G, este chiar G, sau se obţine din G păstrând toate vârfurile şi suprimând nişte muchii. • Fie graful G = (X,U). Un graf parţial al lui G, este un graf G1= (Y,T), unde şi , iar T va conţine numai muchiile care au ambele extremităţi în Y. Altfel spus, un graf parţial G1 al lui G, se obţine din G eliminând nişte vârfuri şi păstrând doar acele muchii care au ambele extremităţi în mulţimea vârfurilor rămase. back
Reprezentarea grafurilor orientate • Cele mai cunoscute forme de reprezentare sunt: • matricea de adiacenţă • matricea vârfuri – arce • matricea drumurilor • listele vecinilor. • reprezentarea grafului ca un vector de muchii back
2 3 1 4 Figura 5 Matricea de adiacenţă • Are aceeaşi semnificaţie ca în cazul grafurilor neorientate: fiecare element a[i,j], cu i,j ε {1,2,...,n}, este: 1 dacă există arcul (i,j), respectiv 0 în caz contrar. • Datorită orientării, aşa cum am mai spus, arcul (i,j) nu este totuna cu arcul (j,i). Prin urmare, a[i,j] ≠ a[j,i]. Aşadar matricea de adiacenţă nu mai este simetrică faţă de diagonala principală, aşa cum se întâmpla în cazul grafurilor neorientate. • Pentru graful G=(X,U) din figura 5, matricea de adiacenţă este: back
Drumuri si circuite in grafuri orientate • Se numeştelanţintr-un graf orientat, o mulţime de arce L={u1,u2,...,uk}, cu proprietatea ca oricare doua arce vecine in mulţime au o extremitate comuna. • Un lanţ este de fapt un traseu care uneşte prin arce doua noduri numite extremităţile lanţului, fără a tine cont de orientarea arcelor componente. • Se numeştedrum în graful G, un şir de noduri D={z1, z2, z3, …, zk}, unde z1, z2, z3, …, zk aparţin lui x, cu proprietatea că oricare două noduri consecutive sunt adiacente, adică există arcele [z1, z2], [z2, z3], …, [zk-1,zk] aparţin lui U. • Dacă nodurile z1, z2, z3, …, zk sunt distincte două câte două, drumul se numeşte elementar. În caz contrar, drumul este ne-elementar. • Se numeştecircuitîntr-un graf, un lanţ L={z1, z2, z3, …, zk} cu proprietatea că z1=zk şi arcele [z1, z2], [z2, z3], …, [zk-1,zk] sunt distincte două câte două. • Dacă într-un circuit, toate nodurile cu excepţia primului şi ultimului sunt distincte două câte două, atunci circuitul se numeşteelementar. În caz contrar, el este ne-elementar. back
Reprezentarea grafului ca un vector de muchii • Fiecare arc al grafului poate fi privit ca o înregistrare cu două componente, în speţă cele două noduri care constituie extremităţile arcului: • nod_in -> nodul din care iese arcul (“nodul de început” al arcului); • nod_sf -> nodul în care intră arcul (“nodul de sfârşit” al arcului); • Putem defini tipul de date ARC, astfel: • type ARC=record • nod_in, nod_sf: integer; • end; • Graful în ansamblul său, este o mulţime de arce, adică o mulţime de elemente de tipul ARC. În consecinţă, definim graful ca un “vector de arce”, adică un vector de elemente de tipul ARC: • var v: array [1..25] of ARC; • Numărul real de elemente este numărul de arce m. Astfel, elementele efectiv folosite ale vectorului vor fi v[1], v[2],..., v[m]. Fiecare element {1, 2, ..., m}) este de tipul ARC şi reprezintă unv[i] (cu i arc al grafului, având două componente: • v[i].nod_in şi v[i].nod_sf -> nodurile extremităţi ale arcului. home
3 1 4 2 Aplicatii grafuri orientate Rezolvare În procedura citire_graf se citesc de la tastatură m perechi de numere întregi de forma (x,y) reprezentând extremităţile celor m arce ale grafului, şi se constituie matricea de adiacenţă a, cu n linii * n coloane. Algoritmul de căutare a celebrităţii cuprins în procedura celebritate. Pentru început, vom căuta o persoană pe care o vom numi în continuare candidat la celebritate. Memorăm acest candidat în variabila candid. Presupunem că iniţial candidatul este persoana 1 (candid:=1). “Cercetăm” celelalte persoane, într-un ciclu cu i de la 2 la n. Pentru fiecare persoană i, trebuie să facem o testare. În cazul în care candidatul “actual” candid o cunoaşte i (a[candid,i] este 1) candid nu mai poate fi celebritate (celebritate nu trebuie să cunoască nici o altă persoană din grup !). În această situaţie, noul candidat la celebritate devine i (candid:=1). La finele parcurgerii de mai sus, în variabila candid vom avea aşadar un candidat la celebritate. Mai rămâne să vedem dacă acest candidat este cunoscut de către celelalte persoane. În exemplul de mai sus, urmare a faptului că persoana 3 este celebritate, avem relaţiile (1,3), (2,3) şi (4,3), adică a[1,3]=a[2,3]=a[4,3]=0. În consecinţă, pe coloana 3 avem n-1 valori de 1. Pe caz general, trebuie să numărăm valorile de 1 de pe coloana candid în matricea de adiacenţă, în adiacenţă, iar dacă găsim n-1 valori, atunci persoana candid este într-adevăr celebritate. • Celebritate. • Se dă un grup format din n persoane, care se cunosc sau nu între ele. De la tastatură se introduc m perechi de numere întregi (x,y) cu semnificaţia ”persoana x cunoaşte pe persoana y”. relaţia de cunoştinţă nu este neapărat reciprocă. Numim celebritate, o persoană care este cunoscută de către toate celelalte persoane din grup, dar ea nu cunoaşte pe nici un alt membru al grupului. Să se determine dacă din grup există o astfel de celebritate. • Interpretarea datelor. • Problema poate fi modelată într-un graf orientat, în care nodurile sunt persoanele 1,2,3...n, iar arcele sunt relaţiile de cunoştinţă între aceste persoane. O relaţie de cunoştinţă este de forma (x,y) cu semnificaţia “persoana x o cunoaşte pe persoana y”. De exemplu, dacă grupul are n=4 persoane, iar cele m=5 “relaţii de cunoştinţă” sunt (1,3), (2,3), (4,3), (1,2), (1,4), atunci graful şi matricea sa de adiacenţă arată astfel: back next
Aplicatii grafuri orientate • Un CD valoros • Într-un grup sunt n elevi, băieţi şi fete, pe care-i numerotăm 1, 2, … , n. Fiecare elev cunoaşte o parte dintre ceilalţi elevi. Relaţia de cunoştinţă nu este neapărat reciprocă (dacă x îl cunoaşte pe y, asta nu înseamnă că şi y trebuie să îl cunoască pe x). Unul dintre elevi are un CD foarte valoros, cu multe jocuri demonstrative, pe care toţi membri grupului vor să-l aibă fie şi pentru scurt timp, pentru a şi-l copia pe calculatorul propriu. CD—ul circulă printre membrii grupului în felul următor: fiecare elev după ce l-a primit de la altcineva îl dă mai departe, dar numai unui elev pe care îl cunoaşte, pentru că nu doreşte să ajungă în mâna unor persoane în care nu poate avea încredere. Determinaţi o modalitate (dacă există) prin care CD-ul să circule exact o singură dată pe la fiecare elev, transmiterea lui făcându-se numai către o cunoştinţă, iar în final CD-ul să ajungă din nou la proprietarul său. • Interpretarea datelor • Relaţiile de cunoştinţă din cadrul grupului pot fi reţinute într-o matrice a cu n linii şi n coloane, în fiecare element a[i, j] este: 1 dacă elevul i îl cunoaşte pe elevul j, respectiv 0 în caz contrar. Cu datele problemei putem construi un graf în care nodurile sunt elevii 1, 2, 3,…, n, iar arcele sunt relaţiile de cunoştinţă din grup. Astfel, va exista arc de la nodul x la nodul y dacă elevul x în cunoaşte pe elevul y. Întrucât în enunţ se precizează că relaţiile de cunoştinţă nu sunt neapărat reciproce („x cunoaşte pe y” nu implică „y cunoaşte pe x”), rezultă că avem de-a face cu un graf orientat. Matricea a definită mai înainte este tocmai matricea de adiacenţă a grafului. • „Traseul” pe care îl parcurge CD-ul pleacă dintr-un nod (proprietarul său), trecând prin fiecare nod (pe la fiecare elev) o singură dată. Transmiterea se face numai către o cunoştinţă. Astfel, de la elevul x va ajunge la elevul y numai dacă există arc (cunoştinţă) de la x la y. În final, traseul se încheie în nodul de unde a plecat (CD-ul se întoarce la proprietarul iniţial). Un traseu care respectă condiţiile de mai sus nu este altceva decât un circuit elementar care trece prin toate nodurile grafului: drum deoarece poate trece de la un nod la altul numai printr-un arc, elementar deoarece nu trece de două ori prin acelaşi nod, şi în sfârşit circuit pentru că revine în nodul de plecare. back