Parcurgerea grafurilor reprezintă un fundament al algoritmicii și al informaticii teoretice, fiind esențială pentru înțelegerea structurilor de date avansate și a algoritmilor pe grafuri. În cadrul liceului, la disciplinele de informatică (inclusiv pentru Bacalaureat), se studiază două metode principale de parcurgere: DFS (Depth-First Search) și BFS (Breadth-First Search), precum și algoritmul lui Dijkstra pentru determinarea drumurilor minime într-un graf ponderat cu costuri nenegative.
DFS (parcurgerea în adâncime) explorează graful mergând cât mai departe pe fiecare ramură, apoi revine (backtracking). Se implementează recursiv sau cu o stivă (stack). DFS este util pentru detectarea ciclurilor, sortarea topologică (în grafuri orientate aciclice), determinarea componentelor conexe și a arborilor de adâncime. Complexitatea sa este O(V + E), unde V = numărul de noduri, E = numărul de muchii.
BFS (parcurgerea în lățime) explorează graful pe niveluri, pornind de la un nod sursă și vizitând toți vecinii acestuia, apoi vecinii vecinilor etc. Se implementează cu o coadă (queue). BFS este ideal pentru găsirea celui mai scurt drum (în număr de muchii) într-un graf neponderat și pentru verificarea bipartitismului unui graf. Complexitatea sa este tot O(V + E).
Algoritmul lui Dijkstra generalizează BFS pentru grafuri ponderate cu muchii de costuri nenegative. El menține o mulțime de noduri nevizitate și actualizează distanțe minime estimative, alegând de fiecare dată nodul cu cea mai mică distanță curentă. Se implementează eficient cu un min-heap (priority queue).
Algoritmul lui Dijkstra este utilizat pe scară largă în rețele de calculatoare (routing) și în sisteme de navigație. Complexitatea implementării cu heap este O((V+E) log V).
Pentru Bacalaureat, elevii trebuie să cunoască implementarea în pseudocod (sau C++) a acestor algoritmi, să înțeleagă principiul de funcționare, să poată aplica manual pe exemple mici și să identifice complexitățile. De asemenea, este important să distingă cazurile de utilizare: DFS pentru probleme de backtracking sau cicluri, BFS pentru drumuri minime neponderate, Dijkstra pentru drumuri minime ponderate (costuri pozitive).
În această lecție, vom prezenta exemple concrete de aplicare și exerciții de tip grilă, răspuns liber și completare, pentru a fixa cunoștințele.
Concepte cheie: DFS (Depth-First Search) - parcurgere în adâncime cu stivă sau recursivitate, BFS (Breadth-First Search) - parcurgere în lățime cu coadă, Algoritmul lui Dijkstra - drum minim în grafuri ponderate cu costuri nenegative, folosind min-heap, Complexități: O(V+E) pentru DFS/BFS, O((V+E) log V) pentru Dijkstra, Aplicații: detectare cicluri, sortare topologică, drumuri minime, bipartitism
Vrei exerciții pe lecția asta + AI care te ajută pas cu pas?
Cont gratuit — 20 întrebări AI/zi, exerciții nelimitate.