Sunteți pe pagina 1din 13

GRAFURILE ORIENTATE

Elev: Bradea Ciprian


Clasa: XI-A
CUPRINS
1. Prezentare grafurile orientate
2. Reprezentarea in memorie a
grafurilor orientate
2.1 Prin matricea de adiacenta
2.2 Prin vector de arce
2.3 Prin lista de adiacenta
3. Drum in graful orientat
4. Probleme
5. Motivarea temei
1. GRAFURILE ORIENTATE
(Prezentare)
Se numeste graf orientat o pereche ordonata de multimi notata
G=(X,U), unde:

- X este o multime nevida de varfuri


- U este o multime de perechi ordonate de arce.

Se reprezenteaza in plan nodurile prin puncte iar muchiile sunt


denumite arce si se reprezinta prin linii la capatul carora exista o
sageata ce indica sensul de parcurgere.

1 2

4
3

G=(X,U);

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

Se numesc noduri adiacente in graful G, oricare dintre nodurile care


formeaza un arc.

Nodul din care pleaca un arc se numeste extremitate initiala a arcului


iar nodul in care intra arcul se numeste extremitate finala a acestuia.

Se numesc arce incidente doua arce care au o extremitate comuna.

Se numeste succesor al nodului i orice nod in care ajunge un arc


plecat din nodul i.

Se numeste predecesor al nodului j, nodul i care este extremitate


initiala pentru arcul ce intra in j.

Teorema: Daca graful orientat G are n noduri atunci numarul total de


grafuri orientate ce se pot forma cu aceste noduri este egal cu 4 n(n-1)/2

Gradele unui nod intr-un graf orientat

 Grad extern : reprezinta numarul de arce ce ies din nod, si


se noteaza cu d+(x).

 Grad intern : reprezinta numarul de arce care intra in nod,


si se noteaza cu d-(x).

Se numeste nod terminal un nod care are suma gradelor egala cu 1.


Se numeste nod izolat un nod care are suma gradelor egala cu 0.
5

1 6
2

4 3

Nod i d+(i) d-(i)


1 2 2
2 5 2
3 0 1
4 1 1
5 0 1
6 0 1
7 1 1
2. Reprezentarea in memorie

a grafului orientat

2.1 Reprezentarea in memorie a grafului


orientat prin matricea de adiacenta

2
1
1 2 3 4
3
1 0 1 1 0
1 22
3 2 0 0 0 0
3 0 0 0 0
4 5

4
4 1 1 1 0

a[i][j]= 1, daca exista (i,j)

0, in caz contrar
Matricea de adiacenta a unui graf orientat nu mai este simetrica fata
de diagonala principala.

Suma elementelor matricei este egala cu numarul de arce.

Adunand elementele liniei i vom obtine gradul extern al nodului i.

Adunand elementele de pe coloana j vom obtine gradul intern al


nodului j.

2.2 Reprezentarea in memorie a grafului


orientat prin vector de arce

Struct arc

{int ni, nf;

}v[100];

Accesul la camp se face sub forma v[i].ni, v[i].nf


2.3 Reprezentarea grafului orientat prin
liste de adiacenta

2
i S(i)
1 1 2,3,4
2 -
3 2,4
3
4 2

3. Drum in graful orientat


Fie G(X,U) un graf orientat. Se numeste drum in graful G, o
succesiune de noduri notata cu D=x1,x2,…,xk care au
proprietatea ca oricare ar fi doua noduri succesive ele sunt
legate printr-un arc.
Un drum este o succesiune de arce care au aceeasi orientare.
Lungimea unui drum este data de numarul de arce care compun
acel drum.
Drumul elementar este drumul in care nodurile sunt distincte
doua cate doua.
Drumul simplu este drumul in care arcele sunt distincte doua
cate doua.
1

6
2

5
455
555

L=(5,4,2,6,1) este lant elementar


L1=(5,4,2,6)
L2=(5,4,6)
D=(3,2,1,6,4) este drum elementar

Teorema: Daca un graf neorientat contine un drum intre doua


noduri x si y, atunci el va contine si un drum elementar intre
nodurile x si y.
Circuitul
Def: Se numeste circuit un drum simplu in care extremitatea
initiala coincide cu extremitatea finala.
Lungimea unui circuit este egala cu numarul de arce din care
acesta este alcatuit.
C1=(4,2,1,6,4)
C2=(2,1,6,2)

4. Probleme
Problema 1: Se da un graf orientat tare conex cu n varfuri si m arce prin lista arcelor. Se
numeste varf central un varf cu proprietatea ca suma distantelor de la el la toate celelalte
varfuri este minim. Distanta de la i la j este egala cu lungimea celui mai scurt drum de la i la j.
Afisati varfurile centrale ale grafului. Se va folosi un algoritm de tip breadth-first.
Exemplu:
graf.in
813
12
13
23
34
45
56
67
87
78
81
63
62
64
graf.out
6

Rezolvare:

#include <fstream>
using namespace std;
ifstream fin("graf.in");
ofstream fout("graf.out");

int n,m,A[101][101],P[101],D[101],Q[101],dmin=100,S[101];

int Suma_distante(int x)
{//distantele minime cu BF
int st=1,dr=1;
Q[1]=x;
P[x]=1;
D[x]=0;
while(st<=dr)
{
int v=Q[st];
for(int i=1;i<=n;i++)
if(!P[i] && A[v][i])
{
dr++;
Q[dr]=i;
P[i]=1;
D[i]=D[v]+1;
}
st++;
}
int s=0;
for(int i=1;i<=n;i++)
s=s+D[i];
return s;
}

int main()
{
fin>>n>>m;
for(int i=1;i<=m;i++)
{
int x,y;
fin>>x>>y;
A[x][y]=1;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
P[j]=0;
S[i]=Suma_distante(i);
if(S[i]<dmin) dmin=S[i];
}
for(int i=1;i<=n;i++)
if(S[i]==dmin)
fout<<i<<" ";
return 0;
}

S-ar putea să vă placă și