This shows you the differences between two versions of the page.
|
sd-ca:laboratoare:lab-07 [2026/05/11 22:07] valentin.carauleanu [Laborator 10 - Grafuri - Basics] |
sd-ca:laboratoare:lab-07 [2026/05/12 18:39] (current) roberto_giulio.pal [Exerciţii] |
||
|---|---|---|---|
| Line 236: | Line 236: | ||
| </note> | </note> | ||
| - | ===== Algoritmul Floyd-Warshall ===== | ||
| - | |||
| - | Algoritmul **Floyd-Warshall** este un algoritm folosit pentru găsirea **celor mai scurte căi** între toate perechile de noduri dintr-un graf orientat cu costuri pe muchii. Costurile pot fi pozitive sau negative, însă algoritmul nu funcționează corect în prezența **ciclurilor negative**. | ||
| - | |||
| - | Ideea de bază a algoritmului este simplă: pentru fiecare pereche de noduri ''(i, j)'', se verifică dacă există un nod intermediar ''k'' prin care calea de la ''i'' la ''j'' devine mai scurtă. Algoritmul iterează prin toate nodurile posibile ca intermediari, îmbunătățind progresiv matricea de distanțe. | ||
| - | |||
| - | **Complexitate:** | ||
| - | * **Timp**: ''O(|V|³)'' - trei bucle imbricate peste toate nodurile | ||
| - | * **Spațiu**: ''O(|V|²)'' - matricea de distanțe | ||
| - | |||
| - | === Pseudocod === | ||
| - | |||
| - | <code> | ||
| - | dist[V][V] // Matricea de distanțe minime, inițializată cu INFINIT | ||
| - | |||
| - | pentru fiecare nod v | ||
| - | dist[v][v] = 0 | ||
| - | |||
| - | pentru fiecare muchie (u, v) din E | ||
| - | dist[u][v] = cost(u, v) | ||
| - | |||
| - | pentru k între 0 și |V| – 1 // nodul intermediar | ||
| - | pentru i între 0 și |V| – 1 // nodul sursă | ||
| - | pentru j între 0 și |V| – 1 // nodul destinație | ||
| - | dacă dist[i][k] + dist[k][j] < dist[i][j] | ||
| - | dist[i][j] = dist[i][k] + dist[k][j] | ||
| - | </code> | ||
| ===== Exerciţii ===== | ===== Exerciţii ===== | ||
| Line 278: | Line 251: | ||
| 4) [**1p**] Implementați parcurgerea in lățime (BFS) a unui graf implementat cu listă de adiacență (**BFS** pe Devmind). | 4) [**1p**] Implementați parcurgerea in lățime (BFS) a unui graf implementat cu listă de adiacență (**BFS** pe Devmind). | ||
| - | 5) [**2p - bonus**] Implementați algoritmul Floyd-Warshall pe un graf reprezentat printr-o matrice de adiacență. | ||
| ===== Interviu ===== | ===== Interviu ===== | ||