Grafuri Orientate

25
* Grafuri Orientate

description

Grafuri

Transcript of Grafuri Orientate

Page 1: Grafuri Orientate

*Grafuri Orientate

Page 2: Grafuri Orientate

*Cuprins

*Notiuni generale

*Matricea drumurilor. Algoritmul lui Roy Warshall.

*Matricea drumurilor

*Matricea costurilor minime. Algoritmul lui Roy Floyd.

*Algoritmul lui Djikstra

Page 3: Grafuri Orientate

*Notiuni generale

*Se numeste graf orientat G perechea de multimi X,U, unde X este multimea varfurilor, iar U este multimea arcelor.

*Fiecare arc din aceasta multime are o orientare (un sens).

Inapoi

Page 4: 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.

Inapoi

Page 5: Grafuri Orientate

G = (X,U)

X={1,2,3,4}

U={(1,2),(1,3),(2,3),(2,4),(4,2),(4,3)}

1

2 3

4

Inapoi

Page 6: Grafuri Orientate

*Se numeste lant intr-un graf orientat o succesiune de noduri adiacente.

Exemplu lant : 1,3,4

*Se numeste drum intr-un graf orientat o succesiune de noduri adiacente la care arcele au toate aceeasi orientare.

Exemplu drum : 1,2,4,2

*Lantul elementar este lantul in care nodurile sunt distincte 2 cate 2 (ex : 1,2,3).

*Drumul elementar este drumul in care nodurile sunt distincte 2 cate 2 (ex: 1,2,4,3).

1

2 3

4

Inapoi

Page 7: Grafuri Orientate

1

2

3

4

5

6

G=(X,U)U={(1,2),(1,4),(1,5),(2,3),(3,4),(4,6),(5,6)}X={1,2,3,4,5,6}

Inapoi

Page 8: Grafuri Orientate

*Graful partial

*Se da un graf G format din multimea varfurilor X si multimea muchiilor U.

*Se numeste graf partial graful G1, format din perechea (X1,U1), unde X1=X,U1<=U.

*Graful partial se obtine din graful initial prin suprimarea unor muchii ale acestuia.

Inapoi

Page 9: Grafuri Orientate

G1=(X1,U1)X1={1,2,3,4,5,6}U1={(1,2),(1,4),(2,3),(5,6)}

1

2

3

4

5

6

Inapoi

Page 10: Grafuri Orientate

*Subgraful

*Se numeste subgraf al grafului G un graf G2, format din perechea (X2,U2), unde X2<=X,U2<=U.

*Un subgraf se obtine din graful initial prin suprimarea unor varfuri si a tuturor muchiilor adiacente cu acesta.

Inapoi

Page 11: Grafuri Orientate

G2=(X2,U2)

X2={1,2,3,5}

U2={(1,2),(1,5),(2,3)}

21

3

5

Inapoi

Page 12: Grafuri Orientate

Exista 2 tipuri de grade :

*Grad interior g+/-(i)= numarul de arce care intra in nodul i.

*Grad exterior g+(i) = numarul de arce care ies din nodul i.

i 1 2 3 4

g-(i) 0 2 3 1

g+(i) 2 2 0 2

1

2 3

4

Inapoi

Page 13: Grafuri Orientate

*Matricea drumurilor. Algoritmul Roy-Warshall.

*Se numeste drum intr-un graf neorientat o succesiune de drumuri

*Matricea drumurilor este o matrice binara (la fel ca cea de adiacenta), patratica (n x n), in care fiecare element

*d[i][j] = 1, drum intre i si j

= 0, altfel

Inapoi

Page 14: Grafuri Orientate

*Matricea drumurilor

i/j 1 2 3 4

1 0 1 1 0

2 0 0 1 1

3 0 0 0 0

4 0 1 1 0

i/j 1 2 3 4

1 0 1 1 1

2 0 0 1 1

3 0 0 0 0

4 0 1 1 0

Inapoi

Page 15: Grafuri Orientate

Algoritmul Roy-Warshall

for(i=1;i<=n;i++)for(j=1;J<=n;j++)for(k=1;k<=n;k++)if(a[i][j]==0&&i!=j&&i!=k&&j!=k) a[i][j]=a[i][k]*a[k][i];

Inapoi

Page 16: Grafuri Orientate

*Matricea costurilor minime. Algoritmul lui

Roy Floyd. *Matricea costurilor minime este o matrice

binara (la fel ca cea de adiacenta), patratica (n x n), in care fiecare element

*c[i][j] = cost muchie (i,j)

= 0, i=j

= ∞, nu muchia (i,j)

Inapoi

Page 17: Grafuri Orientate

1

2 3

4

24 21

34

52

46

09

Inapoi

Page 18: Grafuri Orientate

Algoritm matricea costurilor minime (Roy-Floyd)

for(k=1;k<=n;k++)for(i=1;i<=n;i++)for(j=1;j<=n;j++)if(c[i][k]+c[k][j]<c[i][j])c[i][j]=c[i][k]+c[k][j];for(i=1;i<=n;i++){for(j=1;j<=n;j++)cout<<“c[i][j]<<“ “;cout<<endl;}f.close();}

Inapoi

Page 19: Grafuri Orientate

*Matricea costurilor minime

i/j 1 2 3 4

1 0 52 46 ∞

2 ∞ 0 34 24

3 ∞ ∞ 0 ∞

4 ∞ 60 21 0

i/j 1 2 3 4

1 0 1 1 0

2 0 0 1 1

3 0 0 0 0

4 0 1 1 0

Inapoi

Page 20: Grafuri Orientate

*Algoritmul lui Dijkstra

Se da un graf orientat (sau neorientat) reprezentat prin matricea costurilor si se cere sa se determine pentru oricare 2 noduri x si y lungimea minima a drumului intre x si y. Prin lungimea unui drum se intelege suma costurilor arcelor care il alcatuiesc. Algoritmul foloseste urmatoarele structuri de date:

*Vectorul S (numit vector caracteristic) – are n componente si valori de 0 si 1: 0 daca nodul nu a fost vizitat si 1 daca nodul a fost vizitat.

Inapoi

Page 21: Grafuri Orientate

*Vectorul tatilor – vectorul in care , pentru nodul I, se retine nodul precedent pe unde trece drumul de la nodul de pornire la i.

*Vectorul drumurilor – care retine pe pozitia I costul drumului gasit la un moment dat de la nodul de pornire la i.

*Vectorul drumurilor –care retine pe pozitia I costul drumului gasit la un moment dat de la nodul de pornire la i.

Inapoi

Page 22: Grafuri Orientate

Algoritmul lui DijkstraCitire Programul principal Afisare

#include<iostream.h>#include<fstream.h>float a[50],d[50],min;int s[50], t[50], n, i, j, r, poz;void drum(int i){if(t[i]) drum(t[i]);cout<<i<<“ “;}

void main(){fsteam f(“matrice.txt”;ios::in);f>>n;for(i=1;i<=n;i++)for(j=1;j<=n;j++)f>>a[i][j];cout<<“r=“;cin>>r;s[r]=1;for(i=1;i<=n;i++){d[i]=a[r][i];if(i!=r)if(d[i]<3200)

t[i]=r;}for(i=1;i<=n-1;i++){min=32000;for(j=1;i<=n;j++){if(s[j]==0)if(d[j]<min){min=d[j];poz=j;}s[poz]=1;for(j=1;j<=n;j++)if(s[j]==0)if(d[j]>d[poz]+a[poz][j]){d[j]=d[poz]+a[poz][j];t[j]=poz;}}

for(i=1;i<=n;i++)if(i!=r)if(t[i]){cout<<“distranta de la”<<r<<“la”<<i<<“este”<<d[i]<<endl;drum(i);cout<<endl;}elsecout<<“nu exista drum de la “<r<<“la”<<i<<endl;f.close();}

Inapoi

Page 23: Grafuri Orientate

1

2

4

5

3

44

34

53

3163

i/j 1 2 3 4 5

1 0 34 ∞ 44 ∞

2 ∞ 0 31 ∞ 53

3 ∞ ∞ 0 ∞ ∞

4 ∞ 63 ∞ 0 ∞

5 ∞ ∞ ∞ ∞ 0

* Algoritmul lui Dijkstra

Inapoi

Page 24: Grafuri Orientate

*Realizat de:

*Dima Teodor

*Dutu Razvan

*Ionescu Costin

*Ivan Alexandru

*Nicola Eduard

*Panait Beatrice

Page 25: Grafuri Orientate