Aceasta e o versiune anterioară a paginii.
La fel ca la arbori de acoperire, presupunem că fiecare muchie are un cost de parcurgere.
Într-un graf, orice drum este definit de o succesiune de muchii (cu proprietatea că, pentru oricare două muchii consecutive din succesiune, nodul destinaţie/de sosire al primei muchii este acelaşi cu nodul sursa/de plecare al celei de-a doua muchii).
Costul unui drum va fi definit ca suma costurilor muchiilor ce compun acel drum.
Fie un nod sursă(S) şi un nod destinaţie(D). Pot exista mai multe drumuri de la S la D(drumuri care au S = primul nod, D = ultimul nod), iar drumul de cost minim de la S la D va fi cel mai ieftin(cu costul cel mai mic) dintre acestea.
Următorii algoritmi caută drumurile de cost minim de la un singur nod(sursă) la toate celelalte noduri. Rezultatul acestor algoritmi este un arbore cu drumuri de cost minim, unde:
Algoritmul lui Dijkstra se bazează pe un principiu similar cu cel al algoritmului lui Prim:
Diferenţa apare, în algoritmul lui Dijkstra, la funcţia folosită pentru estimarea costurilor, atunci când evaluăm vecinii unui nod:
Paşii algoritmului lui Dijkstra:
1. Declarăm două mulţimi: mulţimea nodurilor neexplorate(MN), iniţial MN = V(includem toate nodurile); mulţimea nodurilor explorate(ME) ce compun arborele, iniţial ME = vidă; 2. Atribuim fiecărui nod o estimare iniţială a costului: 0 pentru nodul sursă(S); infinit pentru toate celelalte; 3. Cât timp există noduri în MN 1. Alegem, din MN(nodurile neexplorate), nodul cu cel mai mic cost estimat îl numim C(nodul curent) 2. pentru fiecare din vecinii lui C care se află în MN 3. calculăm noua estimare de cost = cost(drumul S-C) + cost(muchia (C,V)); 4. comparăm noua estimare cu vechiul cost(drumul S-V): dacă noul cost e mai bun 1. actualizăm cost(drumul S-V) = noul cost; 2. actualizăm parinte(V) = C; (pentru păstrarea muchiei folosite) altfel păstrăm vechiul cost 5. Marcăm nodul C ca explorat: îl eliminăm din MN şi îl adăugăm în ME. (Nu va mai fi verificat)
Următorul algoritm caută cel mai scurt drum de la orice nod sursă(S) la fiecare nod destinaţie(D).