Grafuri orientate

25
Grafuri orientate

description

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. - PowerPoint PPT Presentation

Transcript of Grafuri orientate

Page 1: Grafuri orientate

Grafuri orientate

Page 2: Grafuri orientate

DDefinitie:efinitie: Un graf orientat Un graf orientat

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

Page 3: Grafuri orientate

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.

Page 4: Grafuri orientate

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).

Page 5: Grafuri orientate

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).

Page 6: Grafuri orientate

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.

Page 7: Grafuri orientate

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.

Page 8: Grafuri orientate

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.

Page 9: Grafuri orientate

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.

Page 10: Grafuri orientate

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

Page 11: Grafuri orientate

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

Page 12: Grafuri orientate

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.

Page 13: Grafuri orientate

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.

Page 14: Grafuri orientate

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.

Page 15: Grafuri orientate

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.

Page 16: Grafuri orientate
Page 17: Grafuri orientate

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;

Page 18: Grafuri orientate

• 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]<<" ";}}

Page 19: Grafuri orientate

• 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;}• }

Page 20: Grafuri orientate

• 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();

Page 21: Grafuri orientate
Page 22: Grafuri orientate

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.

Page 23: Grafuri orientate

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];}

Page 24: Grafuri orientate

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!

Page 25: Grafuri orientate

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