1 / 25

Grafuri orientate

Grafuri orientate. D efinitie:. Un graf orientat reprezinta o pereche ordonata de multimi G=(X,U), unde X este o multime finita si nevida, numita multimea nodurilor, si U este o multime formata din perechi ordonate de elemente ale lui X, numita multimea arcelor.

kara
Télécharger la présentation

Grafuri orientate

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Grafuri orientate

  2. Definitie: • Un graf orientat reprezinta o pereche ordonata de multimi G=(X,U), unde X este o multime finita si nevida, numita multimea nodurilor, si U este o multime formata din perechi ordonate de elemente ale lui X, numita multimea arcelor.

  3. Un exemplu de graf orientat este: reţeaua de străzi a unui oraş. Străzile sunt muchii în graf, iar intersecţiile reprezintă vârfurile grafului. Întrucât mergând pe jos ne putem deplasa pe orice stradă în ambele sensuri, vom spune că din punctul de vedere al pietonilor, „graful unui oraş” este neorientat. Cu totul altfel stau lucrurile în ceea ce priveşte conducătorii auto, pentru că în orice oraş există străzi cu sens unic. Pentru un şofer străzile trebuie să primească în graf o anumită orientare. Desigur că acele străzi pe care se poate circula în ambele sensuri vor primi orientare dublă. Am ajuns astfel la noţiunea de graf orientat.

  4. Prin noţiunea de perechi ordonate nu trebuie să înţelegem că o muchie este mai mare decât alta, ci pur şi simplu că facem deosebire între o muchie de forma (x,z) şi o alta de forma (y,x). Cu alte cuvinte muchiile sunt diferenţiate prin ordinea de scriere a simbolurilor. • Arcul (x,y) nu este tot una cu arcul (y,x).

  5. 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) ε U).

  6. Reprezentarea grafurilor orientate • Considerăm un graf orientat G= (X,U) cu m arce şi n noduri. • Cele mai cunoscute forme de reprezentare sunt: matricea de adiacenţă, matricea vârfuri – arce, matricea drumurilor şi listele vecinilor. • 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.

  7. Se numeşte lanţ 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şte drum în graful G, un şir de noduri D={z1, z­2, z3, …, zk}, unde z­1, z­2, z3, …, zk aparţin lui x, cu proprietatea că oricare două noduri consecutive sunt adiacente, adică există arcele [z­1, z­2], [z­2, z3], …, [zk-1,zk] aparţin lui U. • Practic, un drum poate fi privit ca un traseu în care toate arcele au aceeaşi orientare, dată de sensul de deplasare de la z­1 la z­k.

  8. Matricea drumurilor. • Este o matrice d cu n linii şi n coloane, în care fiecare element d[i,j] este : • 1, dacă există drum de la nodul i la nodul j în graf; • 0, în caz contrar.

  9. Algoritmul Roy-Warshall de determinare a matricei drumurilor • Matricea drumurilor se obţine aplicând matricei de adiacenţă transformări succesive. Vom spune că există drum de la nodul i la nodul j, dacă găsim un nod k (diferit de i, j) cu proprietatea că există drum de la i la k şi drum de la j la k.

  10. Grafuri orientate . Aplicatii • Intr-o clasa sunt n elevi. Dirigintele doreste sa construiasca un sistem de informare in clasa astfel incat fiecare elev sa sa obtina informatia cat mai rapid. Dirigintele anunta un elev (seful clasei). Acesta va anunta alti doi elevi care la randul lor vor anunta fiecare cate trei elevi. In continuare fiecare elev va anunta alti trei.. Sa se scrie un program care construieste o astfel de structura de informare. • Numim transpusul unui graf G=(X,U), graful G’ care are aceeasi multime de varfuri, arcele sale fiind arcele lui G, dar avand sens opus. Dandu-se G prin matricea de adiacenta sau prin lista de adiacenta, sa se determine transpusul grafului dat. • Sa se genereze matricea drumurilor asociata unui graf

  11. Dandu-se matricea drumurilor asociata unui graf orientat sa se determine daca grafula are (si sa se afiseze) varfuri izolate. Fie un graf orientat memorat prin matricea de adiacente. Sa se genereze daca este posibil un graf avand aceeasi matrice a drumurilor dar numar mai mic de arce (eventual numar minim de arce). Un arbore genealogic retine cele m relatii a n persoane: cei 2 stramosi comuni si in continoare perechi care reprezinta ascendent-descendent direct. Sa se afiseze pentru o persoana x: -ascendentii -descendentii -parintele -fratii

  12. Aplicatii • Elevii unei clase au de scris o compunere la limba franceza. Deoarece doresc sa se inspire unii de la altii, ei isi imprumuta unii altora caietele in care si-au scris temele. Se cunosc perechile de elevi (numerotati de la 1 la n) care si-au imprumutat caietele. Primul din pereche este cel care a dat tema, al doilea – cel care l-a primit. Se considera ca daca X a dat caietul lui Y, iar Y lui Z, tema lui Z este inspirata atat din tema lui X, cat si din tema lui Y. Scrieti un program care sa afiseze: • La cati colegi a imprumutat caietul fiecare elev si de la cati colegi a imprumutat fiecare • Caror colegi le-a imprumutat X caietul sau • Elevul care a dat caietul celor mai multi colegi • Elevul care a luat cele mai multe caiete pentru a se inspira • Tema carui elev a inspirat cele mai multe alte teme • Exista elevi in clasa care nu au dat si nu au primit nici un caiet? Care? • Se citeste de la tastatura o lista de elevi (nr. lor de ordine). Precizati daca este adevarat faptul ca fiecare elev din lista a imprumutat caietul de la cel care urmeaza imediat dupa el in lista. • Baietii dintr-o scoala corespondeaza cu fetele dintr-o alta scoala. Copii sunt numerotati de la 1 la n. Se cunosc perechi de numere (x-y) cu semnificatia: (x ii scrie lui y, nu neaparat si invers). Se stie ca nici un baiat nu corespondeaza cu alt baiat si nici o fata cu alta. Cititi perechile de directii de corespondenta si afisati (daca este posibil) grupa fetelor si grupa baietilor. Copilul 1 este baiat.

  13. Intr-un parc de distractii exista un trenulet care trece prin mai multe tuneluri. Se cunosc: numarul de tuneluri, numarul de portiuni de sina de tren si sensul de parcurgere intre doua tuneluri alaturate. Proprietarul parcului are la dispozitie nc culori si isi propune sa vopseasca tunelurile astfel incat oricare doua tuneluri alaturate sa fie colorate diferit. Afisati 3 solutii. • La un concurs de orientare juriul are o harta de repere intre repere fiind stabilite sensuri unice de parcurgere. Pentru a complica probele trebuie aleasa o harta care sa contina cel putin un circuit. Verificati daca harta contine circuite. • Sa se determine produsul numerelor de ordine al varfurilor unui graf prin parcugrgere in latime si adancime. Afisati valoare mai mare.

  14. Proprietati • Daca un graf cu n noduri are p comp conexe,atunci numarul minim de muchii care trebuie adaugat ca sa devina conex este p-1. • Daca un graf conex cu n noduri are n-1 muchii, atunci orice pereche de noduri este legata printr-un lant si numai unul. • Daca un graf neorientatat cu n noduri si m muchii este conex, numarul maxim de muchii care se pot elimina pentru a obtine un graf partial conex este: m-n+1. • Daca un graf are n noduri,m muchii si p componente conex, numarul de muchii care trebuie eliminate pentru a obtine un graf partial aciclic este egal cu m-n+p.

  15. Aplicatie practica a grafurilor orientate • O companie petroliera dispune intr-un oras de n benzinarii. Unele din aceste statii de benzina sunt legate intre ele prin drumuri directe(pe care se poate circula in ambele sensuri sau intr-un singur sens),iar altele nu. Pentru fiecare drum direct intre doua benzinarii se cunoaste lungimea acestui in kilometri.Domnul X se afla in masina la marginea orasului.Indicatorul de benzina se apropie de 0,ceea ce ii arata domnului X ca trebuie sa alimenteze urgent. Realizati un program prin care se indica drumul cel mai scurt de a ajunge la una din cele mai apropiate benzinarii,aflata pe un drum direct.

  16. Rezolvarea aplicatiei! • #include<iostream.h> • #include<fstream.h> • int n, a[100][100],x,y; • void citire() • {int i,j; • cin>>n; • for(i=1;i<=n;i++) • {for(j=1;j<=n;j++) • cin>>a[i][j];} • } • void Roy_Warshall() • {int i,j,k;

  17. for(k=1;k<=n;k++) • for(i=1;i<=n;i++) • for(j=1;j<=n;j++) • if(a[i][j]==0&&i!=k&&j!=k) • a[i][j]=a[i][k]*a[k][j];} • void afisare() • {int i,j; • for(i=1;i<=n;i++) • {cout<<"\n"; • for(j=1;j<=n;j++) • cout<<a[i][j]<<" ";}}

  18. int drum_int(int x) • {int j,nr=0; • for(j=1;j<=n;j++) • if(a[j][x]==1) nr++; • return nr;} • int drum_ext(int x) • {int i,nr=0; • for(i=1;i<=n;i++) • if(a[x][i]==1) nr++; • return nr;} • }

  19. void generare_drum_min() • {int i,j,k; • for(k=1;k<=n;k++) • for(i=1;i<=n;i++) • for(j=1;j<=n;j++) • if(a[i][k]+a[k][j]<a[i][j]) • a[i][j]=a[i][k]+a[k][j];} • void main() • {cout<<"Matricea de adiacenta este:"; • cout<<endl; • citire(); • Roy_Warshall(); • cout<<"Matricea drumurilor este:"; • afisare(); • cout<<"Nodul x= "; • cin>>x; • drum_int(x); • drum_ext(x); • generare_drum_min();

  20. Comentarii.Observatii. • Avand in vedere ca in prezent pretul benzinei este destul de ridicat si cei mai multi dintre romani isi alimenteaza automobilul cu putina benzina,exista un risc mai ridicat ca acestia sa ramana fara combustibil. In caz ca va veti confrunta cu o asemenea situatie,noi am utilizat teoria grafurilor orientate si am creat o aplicatie “originala” pentru a va scoate din impas. Prin aceasta problema se calculeaza drumul cel mai scurt( drumul minim) pentru a ajunge la cea mai apropiata benzinarie. Astfel,va veti alimenta rezervorul si va veti putea continua drumul linistiti.

  21. Putem prezenta si situatia in care calculam drumul maxim: void generare_drum_max() {int i,j,k; for(k=1;k<=n;k++) for(i=1;i<=n;i++) for(j=1;j<=n;j++) if(a[i][k]+a[k][j]>a[i][j]) a[i][j]=a[i][k]+a[k][j];}

  22. Dar,daca veti folosi aceasta varianta,sa folositit drumul maxim (drumul cel mai lung) pentru a ajunge la benzinariei,exista riscul ca autovehiculul sa se opreasca inainte de a ajunge la destinatie. • In concluzie…cea mai eficienta metoda,ramane aplicarea drumului minim!

  23. Proiect realizat de : • Terciu Andreea • Rotariu Alina • Macuc Alina • Munteanu Irina • Sancariuc Diana

More Related