|
Foarte mul?i algoritmi de prelucrare a grafurilor necesit? examinarea tuturor nodurilor unui graf.Pentru aceasta este necesar? definirea unei strategii de traversare a grafului.Se poate vorbi în principal de dou? tehnici de traversare:
- în adâncime (Depth First)
- în l??ime (Breadth First)
În explicarea modului de func?ionare a primei variante se folose?te un ?ir de întregi, VIZITAT, de lungime n cu ajutorul c?ruia se marcheaz? nodurile deja “vizitate” pentru a evita trecerea de mai multe ori prin acela?i nod.Cu alte cuvinte VIZITAT[j] = 1 dac? nodul j a fost deja atins ?i VIZITAT[j] = 0 în caz contrar.Vom spune despre un nod i c? a fost explorat dac? are toate nodurile adiacente vizitate.
Procedura recursiv? care asigur? parcurgerea unui graf în adâncime începând cu un anumit vârf i:
Procedura Parcurgere_în_adâncime(i)
pentru toate vârfurile k adiacente cu vârful i execut?
daca vârful k este neparcurs
atunci se parcurge vârful k
apel parcurgere_în_adâncime(k)
Ie?irea din recursivitate se produce în momentul în care nu se mai g?sesc vârfuri neparcurse adiacente cu vârfurile parcurse deja. Este posibil ca dup? un apel al procedurii incepând cu un anumit vârf i s? r?mân? în graf vârfuri neparcurse.În aceast? situa?ie apelul procedurii se repet? pentru un alt vârf ini?ial (dintre vârfurile neparcurse) pân? la parcurgerea tuturor nodurilor grafului. Programul apelant trebuie s? asigure parcurgerea vârfului utilizat în apel.Condi?iile interne care apar în problemele particulare de backtracking pot impune o parcurgere integral? sau numai par?ial? a grafului.Procedura backtracking(i) este pentru cazul parcurgerii integrale a unui graf în adâncime:
Procedura Backtracking(i)
pentru toate vârfurile k adiacente cu vârful i execut?
daca vârful k este neparcurs ?i sunt îndeplinite condi?iile de continuare
atunci se parcurge vârful k
se utilizeaza vârful k în solu?ie
dac? s-a ajuns la o solu?ie se afi?eaz?
apel Backtracking(k)
Folosind aceast? tehnic? de traversare ne propunem s? r?spundem la întrebarea:
Fiind dat un graf neorientat G=(V,E), este acesta un graf conex?
Conform acestei metode explorarea unui nod este suspendat? ori de câte ori un nou vârf este vizitat.Pentru graful G daca pornim din vârful 1, vizitarea nodurilor se va face în ordinea: 1,2,4,8,5,6,3,7
|