Sunteți pe pagina 1din 2

PARCURGEREA GRAFURILOR

2. Parcurgerea grafurilor in adancime (“Depth First”)


Derularaea algoritmului presupune vizitarea unui varf apoi a varfului adiacent cu acesta si asa mai
departe , pana se revine la un alt varf si se alege un alt varf nevizitat inca. Acest lucru este posibil prin
folosirea unui vector VIZITAT de dimensiune n ale carui componente se definesc astfel:
1, daca varful k a fost vizitat
VIZITAT [k]  
0, in rest
Se va folosi o structura de tip stiva. 1
Algoritmul parcurgerii in adancime
Pas. 1. Se adauga varful k in stiva si se considera vizitat
Pas. 2. Se analizeaza varful k 2 3 4
Pas. 2.1. Se cauta primul din vecinii nevizitati
Pas. 2.1.1. Daca exista (fie j acesta) se dauga in stiva si
se considera vizitat
5 6
Pas. 2.1.2. Daca nu exista se scoate urmatorul nod din
stiva (fie jacesta)
Pas. 2.2. Varful j devine varful ce trebuie analizat (varful k)
Pas. 3. Cat timp stiva este nevida se executa Pas. 2.
7

1, 2, 3, 5, 6, 7, 4
void Parc_Ad() {
ultim = 1;
St[1] = 1;
cout<<endl<<St[1];
St – stiva
Viz[1] = 1;
Viz – vectorul VIZITAT
while (ultim>0) {
Scoate – functie care returneaza primul element
nod = Scoate(St, ultim); din stiva
j=0; Add – adauga un element in stiva
ok=0; Ultim – indicele ultimului element din stiva (la
adaugare creste cu o unitate)
for (j=1; ((j<=n) && (ok==0)); j++)
Ok – indica daca a fost gasit un alt varf adiacent
if((a[nod][j] == 1) && (Viz[j] == 0)) cu cel prelucrat. ( daca e 1 inseamna ca s-a gasit)
{
In stiva vor fi elemente atata timp cat
Add(St, ultim, j);
ultim > 0
cout<<" "<<j;
Viz[j]=1;
ok=1;
}
while ((ok==0) && (j<=n));
if (ok==0) ultim--;
}
}