200 likes | 529 Views
?. ?. ?. ?. Grafuri. Drumuri în grafuri. Conexitate. Drumuri în graf. Fie un graf , . Secvenţa de vîrfuri este un u-v drum dacă , , , . Lungimea drumului , notată este egală cu . Convenţional se numeşte drum trivial un drum cu .
E N D
? ? ? ? Grafuri Drumuriîn grafuri. Conexitate
Drumuri în graf • Fie un graf, . Secvenţa de vîrfuri esteun u-v drumdacă, , ,. • Lungimeadrumului, notatăesteegală cu . Convenţional se numeştedrum trivial un drum cu. • Fie un drum în graful . este un drum închis dacă; în caz contrar se numeşte drum deschis. • Drumul este elementar dacă oricare două vîrfuri din sînt distincte, cu excepţia, eventual, a extremităţilor. • Drumul este proces dacă pentru orice ,.
Drumuri în graf • Fie un drum în graful . este un subdrumal lui dacă este un drum şi pentru orice j, , există i, astfel încît .Orice drum cu lungime cel puţin 1 conţine cel puţin un drum elementar cu aceleaşi extremităţi. => =>
Matricea existenței drumurilor • Fie un graf, A matricea de adiacenţă.indică numărul de drumuri distincte de lungime pîntre oricare 2 vîrfuri. • Fie operaţiile binare de adunare şi înmulţire. Notînd , ,, , indică existența unui drum de lungime pîntre oricare 2 vîrfuri. • - matricea existenței drumurilor în graful G.
Algoritmul Roy - Warshall unsignedchar ** Roy_Warshall(unsignedchar**a,unsigned n) {int i,j,k; unsignedchar**m; m = new unsigned char*[n]; for(i=0;i<n;i++) m[i] = new unsigned char[n]; 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]; return m; } 1 0
Componente conexe • Fie graf netrivial. Vîrfurile și sînt conectatedacă există un u-v drum în . • Dacă este un graf, atunci o componentă conexă a lui este un subgraf conex al lui , maximal în raport cu proprietatea de conexitate. • Un graf este conex dacă şi numai dacă numărul componentelor sale conexe este 1. • Mulţimile de vîrfuri corespunzătoare oricăror două componente conexe distincte sînt disjuncte.
Componente conexe • Algoritmpentrudeterminareauneicomponenteconexe • I: , , • E: • Se iniţializează componenta vidă • Se adaugă la mulţimea de vîrfuri vîrful iniţial • Repetă • Se caută toţi vecinii noi ai vîrfurilor din şi se adaugă la mulţimea de vîrfuri • Se caută toate muchiile noi dintre vîrfurile din şi se adaugă la mulţimea de muchii • Pînă cînd nu se mai găsesc vîrfuri noi Parcurgere în adîncime / lățime Din matricea existenței drumurilor • Se determină mulțimea vîrfurilor conectate cu • Se adaugă la toate muchiile dintre vîrfurile din
Drumuri de cost minim • Fie un graf ponderat. Costul drumului , notat, este definit prin: • Pentru orice şi vîrfuri conectate în , , dacă este mulțimea tuturor drumurilor între şi , w-distanţaîntre şi , notată , este definită prin • Drumul pentru care , se numeştedrum de cost minim.
Algoritmul Roy - Floyd float** Roy_Floyd (float**w,unsignedn) {int i,j,k; float **d; d = new float*[n]; for(i=0;i<n;i++) d[i] = new float[n]; 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] < INF ) 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]; return d; }
Algoritmul Yen • I: W, n, k • E: B • pentru • determină pa.î. și e minim • pentru
Algoritmul Dijkstra • fie , , graf conex • etichete pentru fiecare vîrf : • pentru fiecare vîrf , • , , = • pentru • pentru fiecare vîrf • dacă • determină un vîrf a.î. este minimă
Drumuri de cost minim • , 1 • , 1 • , 1
Drumuri de cost minim • , 2 • , 2
Drumuri de cost minim • , 4
Drumuri de cost minim • Drum pînă la : • repetă • adaugă la drum • pînă cînd • Drum pînă la : • 5 • 4, 5 • 2, 4, 5 • 1, 2, 4, 5