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:
Se va folosi o structura de tip stiva.
Algoritmul parcurgerii in adancime
Pas. 1. Se
adauga varful k in stiva si se
considera vizitat
Pas. 2. Se
analizeaza varful k
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
Pas.
2.1.2. Daca nu exista se scoate urmatorul nod din stiva (fie j acesta)
Pas.
2.2. Varful j devine varful ce trebuie analizat (varful k)
Pas. 3. Cat timp stiva este nevida se executa Pas.
2.
void Parc_Ad() {
ultim = 1;
St[1] = 1;
cout<<endl<<St[1];
Viz[1] = 1;
while (ultim>0) {
nod = Scoate(St, ultim);
j=0;
ok=0;
for (j=1; ((j<=n)
&& (ok==0)); j++)
if((a[nod][j] == 1) && (Viz[j] ==
0)) {
Add(St, ultim, j);
cout<<" "<<j;
Viz[j]=1;
ok=1;
}
while ((ok==0) &&
(j<=n));
if (ok==0) ultim--;
}
}
St – stiva
Viz – vectorul VIZITAT
Scoate – functie care
returneaza primul element din stiva
Add – adauga un element in
stiva
Ultim – indicele ultimului
element din stiva (la adaugare creste cu o unitate)
Ok – indica daca a fost
gasit un alt varf adiacent cu cel prelucrat. ( daca e 1 inseamna ca s-a
gasit)
In stiva vor fi elemente
atata timp cat ultim > 0
