L'algorithme utilise les fonctions annexes suivantes.
Initialisation(G,sdeb) 1 pour chaque point s de G 2 faire d[s]:= infini /* on initialise les sommets autres que sdeb à infini */ 3 d[sdeb]:= 0 /* sdeb étant le point le plus proche de sdeb */
maj_distances(s1,s2) 1 si d[s2] > d[s1] + Poids(s1,s2) 2 alors d[s2]:= d[s1] + Poids(s1,s2)
Voici la fonction principale utilisant les précédentes fonctions annexes :
Dijkstra(G,Poids,sdeb) 1 Initialisation(G,sdeb) 2 Q:= ensemble de tous les nœuds 3 tant que Q n'est pas un ensemble vide 4 faire s1:= Trouve_min(Q) 5 Q:= Q privé de s1 6 pour chaque nœud s2 voisin de s1 7 faire maj_distances(s1,s2)
Le plus court chemin de sdeb à sfin peut ensuite se calculer itérativement selon l'algorithme suivant, avec A la suite représentant le plus court chemin de sdeb à sfin:
1 A = suite vide 2 s:= sfin 3 A = s + A /* insère s au début de A */ 4 tant que s != sdeb 5 s = prédecesseur[s] /* on continue de suivre le chemin */ 6 A = s + A
Il est possible d'améliorer légèrement l'algorithme principal en arrêtant la recherche lorsque l'égalité s1 = sfin est vérifiée, à condition bien sûr de ne chercher que la distance minimale entre sdeb et sfin.
L'algorithme de Dijkstra pourra être mis en œuvre efficacement en stockant le graphe sous forme de listes d'adjacence et en utilisant un tas comme une file à priorités pour réaliser la fonction Trouve_min. Si le graphe possède m arcs et n nœuds, en supposant que les comparaisons des poids d'arcs soient à temps constant, et que le tas soit binomial, alors la complexité de l'algorithme est :
Une application des plus courantes de l'algorithme de Dijkstra est le protocole open shortest path first qui permet un routage internet très efficace des informations en cherchant le parcours le plus efficace.
Les routeurs IS-IS utilisent également l'algorithme. Les sites d'itinéraires routiers l'utilisent de la même manière et permettent de nombreuses adaptations en ajustant le poids des arcs comme par exemple : trajet le plus économique, le plus rapide...