Sunteți pe pagina 1din 8

Graf aciclic

 Grafurile aciclice orientate sunt grafuri orientate fără


cicluri orientate.
 Multiarborii sunt arbori aciclici orientați în care nu
există două drumuri orientate dintr-un nod de pornire
care să ducă în același nod final.
 Arborii orientați sau poliarborii sunt grafuri orientate
aciclice formate prin orientarea muchiilor unui graf
aciclic neorientat.
 arborii cu rădăcină sunt arbori orientați în care toate
muchiile arborelui neorientat asociat sunt îndreptate în
sensul opus rădăcinii.
Algoritmul Roy-Warshall-Floyd / Matricea
drumurilor

Fie G=(V,U) un graf orientat cu n noduri. Algoritmul Roy-Warshall construiește matricea


drumurilor: D cu n linii și n coloane, în care:

Di,j={ 0 dacă i=j sau nu există drum de la i la j,


1 dacă i≠j și există drum de la i la j

Conform definiției de mai sus, în matricea drumurilor, elementele cu indici egali vor avea
întotdeauna valoarea 0. Alternativ, putem accepta și elemente Di,i=1, înțelegând prin asta
că există un circuit care conține nodul i.

Pentru a construi această matrice, se pornește de la matricea de adiacență și i se aplică o


serie de transformări, pornind de la următoarea idee: dacă nu există drum de la i la j, dar
există drum de la i la k și drum de la k la j, atunci va exista și drum de la i la j, prin
reuniunea celor două drumuri existente.

Mai exact:

 inițial avem numai drumurile care nu au noduri intermediare


(arcele)
 determinăm toate drumurile care îl au eventual ca nod
intermediar pe 1
 determinăm toate drumurile care au noduri intermediare
numai din mulțimea {1,2}
 determinăm toate drumurile care au noduri intermediare
numai din mulțimea {1,2,3}
 pentru un k oarecare, determinăm toate drumurile care au
noduri intermediare numai din mulțimea {1,2,…,k}. Pentru
aceasta, vom căuta toate perechile de noduri i,j astfel
încât Di,k=1 și Dk,j=1D, de unde va rezulta că și Di,j=1.
Tare conexitate

Un graf orientat G=(V,E) este tare conex dacă pentru orice pereche de noduri
distincte (x,y) există cel puțin un drum de la x la y și există cel puțin un drum de la y la x.

Pentru un graf orientat, se numește componentă tare conexă un subgraf tare conex maximal
– prin adăugarea a încă unui nod, subgraful obținut nu mai este tare conex.

Exemplu

Graful de mai sus nu este tare conex. El are trei componente tare conexe.

Algoritmul Plus-Minus:
Folosind observații de mai sus, pentru a determina componentele
tare conexe folosim următorul algoritm, numit Plus-Minus:

 pentru fiecare nod x al grafului care încă nu a fost plasat într-


o componentă tare conexă:
o determinăm toate nodurile în care se poate ajunge
din x, folosind graful G și le marcăm într-un tablou
cu plus;
o determinăm toate nodurile din care se poate ajunge
în x, folosind graful GT și le marcăm într-un tablou
cu minus;
o nodurile marcate atât cu plus, cât și cu minus,
împreună cu x formează o componentă tare conexă;
Exemplu:

Fie graful de mai sus. Să determinăm componenta tare conexă din care face parte nodul 6:

Graful inițial Graful transpus

S-au marcat cu plus nodurile: 5 7 8 S-au marcat cu minus nodurile: 1 2 3 4 5 7


8

Nodurile marcate de două ori, 5 7 8, împreună cu nodul inițial, 6, formează o componentă


tare conexă.

Secvență C++:

 n, a[][] – numărul de noduri și matricea de adiacență


 nrc – numărul de componente tare conexe
 ctc[] – tablou pentru memorarea componentelor tare conexe: ctc[i] = numărul
de ordine al componentei din care face parte nodul i
 s[], p[] – tablouri pentru marcare nodurilor vizitate în timpul parcurgerilor
 să observăm că graful inițial și cel transpus pot fi memorate prin aceeași matrice de
adiacență
void df1(int x)
{
s[x] = 1;
for(int i =1 ; i <= n ; i ++)
if(s[i] == 0 && a[x][i] == 1)
df1(i);
}

void df2(int x)
{
p[x] = 1;
for(int i =1 ; i <= n ; i ++)
if(p[i] == 0 && a[i][x] == 1)
df2(i);
}

int main()
{
.....
for(int i = 1 ; i <= n ; ++i)
if(ctc[i] == 0)
{
for(int j = 1; j <= n ; ++j)
s[j] = p[j] = 0;
nrc ++;
df1(i); df2(i);
for(int j = 1; j <= n ; ++j)
if(s[j] == 1 && p[j] == 1)
ctc[j] = nrc;
}
....
}

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