Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
\
|
=
|
|
|
|
|
.
|
\
|
=
|
|
|
|
|
.
|
\
|
=
|
|
|
|
|
.
|
\
|
=
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];
}