BFS găsea drumul cu cele mai puține muchii. Dar când fiecare șosea are un COST — kilometri, lei, minute — drumul scurt în muchii poate fi scump în bani. Dijkstra găsește ruta optimă de la depozit spre toate punctele de vânzare.
Pe fiecare muchie — un număr: costul. În memorie: matricea costurilor, ruda matricei de adiacență.
c[i][j] = costul muchiei [i,j] dacă există · 0 pe diagonală · ∞ (o valoare uriașă) unde NU există muchie — atenție, aici 0 nu mai poate însemna „lipsă", căci un cost chiar poate fi 0!
Verde = distanță FINALĂ (sigură), auriu = nodul fixat acum / distanță tocmai îmbunătățită, albastru = estimare provizorie.
Dijkstra alege mereu nodul nefixat cu distanța MINIMĂ — alegere lacomă (X·M12). De data asta, lăcomia e demonstrat corectă.
Când fixezi nodul u cu cea mai mică estimare, niciun drum viitor nu-l mai poate ieftini: orice alt drum spre u trece prin noduri cu estimări ≥ d[u], iar costurile muchiilor sunt ≥ 0 — deci ar aduna, nu ar scădea. Alegerea locală nu strică viitorul: exact justificarea pe care Greedy o cerea!
Cu costuri NEGATIVE, certificatul pică — un drum „mai lung" ar putea scădea totalul, iar Dijkstra dă rezultate greșite. La liceu costurile sunt ≥ 0, dar la BAC-ul teoretic întrebarea „de ce cere Dijkstra costuri nenegative?" e clasică.
Cinci întrebări despre Dijkstra.
Dijkstra, condensat.