Sunteți pe pagina 1din 17

Grafuri

Grafuri
Definiii
Reprezentri
Parcurgere n lime
Parcurgere n adncime
Drumuri n grafuri. Conexitate
Matricea existenei drumurilor. Algoritmul Roy-
Warshall
Componente conexe
Drumuri de cost minim. Algoritmul Dijkstra. Algoritmul
Roy-Floyd
Circuite i cicluri
Algoritmul Marimont



Definiii
Se numete graf sau graf neorientat o structur
G=(V,E), unde V este o mulime nevid iar E este o
submulime posibil vid a mulimii perechilor
neordonate cu componente distincte din V.
Vrfurile u, v snt adiacente n G dac uv e E.
Graful G=(V,E) este graf finit, dac V este o mulime
finit.
Fie G
i
=(V
i
,E
i
), i=1,2 grafuri. G
2
este un subgraf al
grafului G
1
dac V
2
e inclus n V
1
i E
2
e inclus n E
1
. G2
este este un graf parial al lui G1 dac V2=V1 i G2 este
subgraf al lui G1.
Definiii
Un digraf este o structur D=(V,E), unde V este o mulime nevid de
vrfuri, iar E este o mulime posibil vid de perechi ordonate cu
componente elemente distincte din V. Elementele mulimii E snt
numite arce sau muchii ordonate. Un graf direcionat este o
structur D=(V,E), unde V este o mulime nevid de vrfuri, iar E este
o mulime posibil vid de perechi ordonate cu componente
elemente din V, nu neaprat distincte. Evident, orice digraf este un
graf direcionat.
Se numete graf ponderat o structur (V,E,W), unde G=(V,E) este
graf i W este o funcie numit pondere care asociaz fiecrei
muchii a grafului un cost/ctig al parcurgerii ei.
Fie G=(V,E) un graf, u,veV. Secvena de vrfuri u
0
, u
1
, .., u
n
este un u-
v drum dac u
0
=u, u
n
=v, u
i
u
i+1
eE pentru toi i.
Fie G=(V,E) un graf. Elementul veV se numete vrf izolat dac,
pentru orice e e E, v nu este incident cu e.

Reprezentri
Intuitiv, grafic
G=(V,E) graf cu V={1,2,3,4,5,6}, E={(1,2),(1,3),(2,5),(3,5),(5,6)}.





D=(V,E) digraf, V={1,,5}, E={(1,2), (1,3), (1,5), (2,5), (3,5),
(4,1), (5,4)}.

1
2
3
4
5
6
1
2
3
5
4
Reprezentare
D=(V,E) graf direcionat, V={1,2,3,4,5}, E={(1,2), (1,3), (1,5) (2,5),
(3,5), (4,4)}.





G=(V,E,W) graf ponderat, V={1,2,3,4}, E={(1,2), (1,3), (1,4), (2,3),
(2,4)}, W((1,2))=5, W((1,3))=1, W((1,4))=7, W((2,3))=4, W((2,4))=2.

1
3 2
4
5 1
2
7
4
1
2
3
4
5
Reprezentri
Matricea de adiacen
( )

e
=
altfel , 0
E v , v dac , 1
a
j i
ij
( )

e
=
altfel
E v v dac
a
j i
ij
, 0
, , 1

1
2
3
4
5
6
|
|
|
|
|
|
|
|
.
|

\
|
=
0 1 0 0 0 0
1 0 0 1 1 0
0 0 0 0 0 0
0 1 0 0 0 1
0 1 0 0 0 1
0 0 0 1 1 0
A
|
|
|
|
|
|
.
|

\
|
=
1 1 0 0 0
0 0 0 0 1
1 0 0 0 0
1 0 0 0 0
1 0 1 1 0
A
1
2
3
5
4
1
2
3
4
5
|
|
|
|
|
|
.
|

\
|
=
0 0 0 0 0
0 1 0 0 0
1 0 0 0 0
1 0 0 0 0
1 0 1 1 0
A
Reprezentare
( ) ( )

e
=
altfel ,
E v , v dac , ) v , v ( W
w
j i j i
j , i
o
|
|
|
|
|
.
|

\
|

=
2 7
4 1
2 4 5
7 1 5
W
1
3 2
4
5 1
2
7
4
Matricea de adiacen pentru graf ponderat
Rprezentare
Tabelar
|
|
|
|
|
|
.
|

\
|
=
6 5
5 3
5 2
3 1
2 1
A
|
|
|
|
|
|
|
|
|
|
.
|

\
|
=
4 5
1 4
5 3
5 2
5 1
3 1
2 1
A
|
|
|
|
|
|
|
|
.
|

\
|
=
4 4
5 3
5 2
5 1
3 1
2 1
A
|
|
|
|
|
|
.
|

\
|
=
2 4 2
7 4 1
4 3 2
1 3 1
5 2 1
A
Reprezentare
Liste dinamice
Parcurgere (traversare)
n lime
Fie G=(V,E) un graf.
A - matricea de adiacen a grafului;
C - o structur de tip coad, n care snt introduse vrfurile
ce urmeaz a fi vizitate i procesate
V - un vector cu n componente (iniializate cu 0), unde

Algoritm
coada C este iniializat cu vrful v
0
;
ct timp C ,
Se extrage i viziteaz un vrf i din coad,
Se introduc n coad vecinii lui i care nu au fost deja
introdui (acele vrfuri k cu proprietatea c c[k]=0 i
a[i][k]=1). Vrfurile i ce au fost introduse n coad snt
marcate prin v[i]=1.

=
, 0
, 1
i
c
Parcurgere (traversare) n lime
Fie graful:






Rezultatul parcurgerii, pornind de la 1, este:
1, 2, 3, 4, 6, 5, 7
1
2
3
4
5 7
6
8
9 10
11
Parcurgere (traversare) n lime
void BF(int vi,int a[10][10],int n,int rez[10],int* nr)
{ TNOD* cap=NULL;
int v[10], i, r, k;
for(i=0; i<n; v[i++]=0);
push(&cap,vi);
v[vi]=1; *nr=0;
while(cap)
{ r=pop(&cap, &i);
rez[(*nr)++]=i+1;
for(k=0; k<n; k++)
if((a[i][k]==1)&&(v[k]==0))
{ push(&cap,k);
v[k]=1;
}
}
}
Parcurgere (traversare)
n adncime
Fie G=(V,E) un graf.
A - matricea de adiacen a grafului;
S - o structur de tip stiv, n care snt introduse vrfurile ce
urmeaz a fi vizitate i procesate
V - un vector cu n componente (iniializate cu 0), unde

Algoritm
stiva S este iniializat cu vrful v
0
;
ct timp S ,
Se extrage i viziteaz un vrf i din stiv,
Se introduc n stiv vecinii lui i care nu au fost deja
introdui (acele vrfuri k cu proprietatea c c[k]=0 i
a[i][k]=1). Vrfurile i ce au fost introduse n stiv snt
marcate prin v[i]=1.

=
, 0
, 1
i
c
Parcurgere (traversare) n adncime
Fie graful:






Rezultatul parcurgerii, pornind de la 1, este:
1, 3, 6, 7, 4, 5, 2
1
2
3
4
5 7
6
8
9 10
11
Parcurgere (traversare) n lime
void DF(int vi,int a[10][10],int n,int rez[10],int* nr)
{ TNOD* cap=NULL;
int v[10], i, r, k;
for(i=0; i<n; v[i++]=0);
push(&cap,vi);
v[vi]=1; *nr=0;
while(cap)
{ r=pop(&cap, &i);
rez[(*nr)++]=i+1;
for(k=0; k<n; k++)
if((a[i][k]==1)&&(v[k]==0))
{ push(&cap,k);
v[k]=1;
}
}
}

Parcurgerea DF generalizat

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