Sunteți pe pagina 1din 10

Grafuri

Drumuri n grafuri. Conexitate


Drumuri n grafuri
Fie G=(V,E) un graf, u,veV. Secvena de vrfuri I: u
0
, u
1
, ..., u
n

este un u-v drum dac u
0
=u, u
n
=v, u
i
u
i+1
eE, 0 i n.

Lungimea drumului, notat l(I) este egal cu n. Convenional se
numete drum trivial un drum I cu l(I)=0.

Fie I: u
0
, u
1
, ..., u
n
un drum n graful G=(V,E). I este un drum nchis
dac u
0
=u
n
; n caz contrar I se numete drum deschis.

Drumul I este elementar dac oricare dou vrfuri din I snt distincte,
cu excepia, eventual, a extremitilor.

Drumul I este proces dac pentru orice 0 i j n-1 u
i
u
i+1


u
j
u
j+1
.
Drumuri n grafuri
Fie I: u
0
, u
1
, ..., u
n
un drum n graful G=(V,E). I: v
0
, v
1
,..,v
m

este un subdrum al lui I dac I este un drum i pentru orice
j, 0 j m , exist i, astfel nct u
i
= v
j
. Orice drum cu lungime
cel puin 1 conine cel puin un drum elementar cu aceleai
extremiti.



I: v
1
, v
2
, v
4
, v
5
, v
3
, v
1
, v
2
, v
5
, v
6
, v
7
, v
8
, v
9
, v
5
, v
9
, v
8
, v
10
,
I
1
: v
1
, v
2
, v
5
, v
9
, v
8
, v
10
I
2
: v
1
, v
2
, v
4
, v
5
, v
9
, v
8
, v
10

snt v
1
-v
10
subdrumuri elementare.

v
1

v
2

v
3

v
4
v
5

v
6
v
7

v
8

v
9

v
10

Matricea existenei drumurilor
Fie G=(V,E) un graf, A matricea de adiacen. A
p

indic numrul de drumuri distincte ntre oricare 2
vrfuri.

Fie operaiile binare de adunare i nmulire
pentru matrice binare. Notnd A=(a
ij
), B=(b
ij
),
atunci A+B=(c
ij
), AxB=(d
ij
), unde pentru 0 i, j n
c
ij
=max{a
ij
, b
ij
}
d
ij
=max{min{a
ik
, b
kj
}, 0 k n}

Matricea obinut adunnd puterile de la 1 la n-1
ale matricei de adiacen constituie matricea
existenei drumurilor n graf.
Matricea existenei drumurilor

1
2
3
4
|
|
|
|
|
.
|

\
|
=
|
|
|
|
|
.
|

\
|
=
|
|
|
|
|
.
|

\
|
=
|
|
|
|
|
.
|

\
|
=
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
,
1 1 1 1
1 1 1 1
1 1 0 1
1 1 1 1
,
1 1 1 1
1 1 1 1
1 1 1 0
1 1 0 1
,
0 1 0 1
1 0 0 1
0 0 0 1
1 1 1 0
3 2
M A A A
Algoritmul Roy-Warshall
void Roy_Warshall (unsigned char a[10][10],
unsigned n,
unsigned char m[10][10])
{ int i,j,k;
for( i=0; i<n; i++ )
for( j=0; j<n; j++ )
m[i][j] = a[i][j];
for( j=0; j<n; j++ )
for( i=0; i<n; i++ )
if( m[i][j] )
for( k=0; k<n; k++ )
if( m[i][k] < m[k][j] )
m[i][k]=m[k][j];
}
Componente conexe ale unui graf
Fie G=(V,E) graf netrivial. Vrfurile u,v snt conectate dac
exist un u-v drum n G.

Dac G este un graf, atunci o component conex a lui G
este un subgraf conex al lui G, maximal n raport cu
proprietatea de conexitate.

Un graf este conex dac i numai dac numrul
componentelor sale conexe este 1.

Mulimile de vrfuri corespunztoare oricror dou
componente conexe distincte snt disjuncte.
Componente conexe ale unui graf
Algoritm pentru determinarea unei componente
conexe (subgraf, mulimi de vrfuri i muchii).

Se iniializeaz componenta vid
Se adaug la mulimea de vrfuri vrful iniial
Repet
Se caut toi vecinii noi ai vrfurilor selectate i se
adaug la mulimea de vrfuri
Se caut toate muchiile noi dintre vrfurile
selectate i se adaug la mulimea de muchii
Pn cnd nu se mai gsesc vorfuri noi
Drumuri de cost minim
Fie G=(V,E,w) un graf ponderat. Costul drumului I: u
0
, u
1
,
..., u
n
, notat L(I), este definit prin:



Pentru orice u i v vrfuri conectate n G, u v, w-distana
ntre u i v, notat D(u,v), este definit prin


unde D
uv
desemneaz mulimea tuturor u-v drumurilor
elementare din G.

Drumul pentru care D(u,v)=L(I), se numete drum de cost
minim.
( ) ( )

=
+
=
1 n
1 i
1 i i
u , u w L I
( ) ( ) { }
uv
D , L min v , u D e = I I
( ) ( ) { }
uv
D , L min v , u D e = I I
Drumuri de cost minim
Algoritmul Roy-Floyd
void Roy_Floyd (float w[10][10], unsigned n
float d[10][10], float MAX)
{ int i,j,k;
for (i=0;i<n;i++)
for (j=0;j<n;j++)
d[i][j] = w[i][j];
for (j=0;j<n;j++)
for (i=0;i<n;i++)
if(d[i][j]<MAX)
for (k=0;k<n;k++)
if (d[i][k] > d[i][j] + d[j][k])
d[i][k] = d[i][j] + d[j][k];
}