Un graf neorientat este o pereche ordonata G = (V, U), unde V este o multime finita de noduri (varfuri), iar U este o multime de muchii, fiecare muchie fiind o pereche neordonata de noduri distincte. Muchiile nu au directie, ceea ce inseamna ca (u, v) este identic cu (v, u). Reprezentarea in memorie se face frecvent prin matrice de adiacenta (o matrice patratica cu n linii si n coloane, unde elementul a[i][j] = 1 daca exista muchie intre nodurile i si j, altfel 0) sau prin liste de adiacenta (un vector de liste, fiecare lista continand vecinii nodului respectiv).
Parcurgerea unui graf inseamna vizitarea sistematica a tuturor nodurilor accesibile, folosind reguli precise. Depth-First Search (DFS) exploreaza pe cat posibil in adancime, mergand de la un nod la un vecin nevizitat, apoi inapoi cand nu mai exista vecini nevizitati. DFS se implementeaza recursiv sau cu o stiva.
Breadth-First Search (BFS) exploreaza in latime, vizitand toate nodurile la aceeasi distanta de nodul de plecare inainte de a trece la nivelul urmator. BFS se implementeaza cu o coada. Componentele conexe ale unui graf neorientat sunt subgrafuri maximale in care orice doua noduri sunt unite printr-un lant.
Pentru a le determina, se porneste o parcurgere (DFS sau BFS) de la fiecare nod nevizitat si se marcheaza toate nodurile accesibile ca apartinand aceleiasi componente. Complexitatea de timp pentru ambele parcurgeri, folosind liste de adiacenta, este O(n + m), unde n = numarul de noduri, m = numarul de muchii. Aplicatii: detectarea ciclurilor, sortarea topologica (pe grafuri orientate), determinarea bipartitiei, algoritmi de drum minim (BFS pentru grafuri neponderate).
In context bacalaureat, se cere implementarea eficienta a parcurgerilor si identificarea componentelor conexe. Se recomanda utilizarea listelor de adiacenta pentru grafuri rare. Pentru grafuri dese, matricea de adiacenta poate fi mai simpla.
Antrenamentul pe probleme clasice (cum ar fi numararea componentelor, verificarea conexitatii, determinarea distantei minime) este esential.
Concepte cheie: Graf neorientat: definitie, noduri, muchii, fara directie, Reprezentare: matrice de adiacenta (O(n^2) memorie) vs liste de adiacenta (O(n+m) memorie), Parcurgere DFS: algoritm recursiv sau cu stiva, complexitate O(n+m), utilizat pentru detectarea componentelor conexe, cicluri, bipartitie, Parcurgere BFS: algoritm cu coada, complexitate O(n+m), utilizeaza distanta minima in grafuri neponderate, Componente conexe: subgrafuri maximale conexe, determinare prin parcurgeri multiple, Aplicatii: numararea componentelor, verificarea conexitatii, drum minim (BFS), sortare topologica (pe orientate)
Vrei exerciții pe lecția asta + AI care te ajută pas cu pas?
Cont gratuit — 20 întrebări AI/zi, exerciții nelimitate.