Vous êtes sur la page 1sur 2

L'algorithme de Dijkstra peut tre dcrit de la manire suivante : - on utilise trois tableaux : Le premier, indic par les sommets,

contient des valeurs numriques de mme type que les distances portes par les arcs du graphe. Nous l'appelerons ici "d istance." A la fin de l'algorithme, si x est un sommet, distance[x] donne la dista nce de la racine x. Au dbut de l'algorithme, on initialise distance[racine] 0 et le s autres composantes du tableau distance une valeur plus grande que toutes les lo ngueurs de chemins que l'on peut avoir dans le graphe ; nous notons ci-dessous "infini" cet te "grande valeur" . Le second, indic par les dommets sauf la racine, contient des nom s de sommets. Ce tableau sert indiquer, la fin de l'algorithme, l'arborescence des plus c ourts chemins. On initialise touses ses composantes -1. On appellera "arbo" ce tableau.A la fin de l'algoritme, x tant un sommet autre que la racine : si arbo[x]=-1, c'est qu'il n'existe aucun chemin de la r acine x. sinon, arbo[x] contient le "pre" de x dans l'arborescence des plus courts chemins depuis x que l'on aura dtermine. Le troisime, indic par les sommets, indique si un sommet appartien t dj l'arborescence des plus courts chemins en cours de construction. Toutes les composantes de ce tableau sont initialises 0. Ce tableau sera not "apparti ent". On note "ordre" l'ordre du graphe. Aprs l'initialisation, on effectue une boucle dont on sort au plus tard aprs (ordre-1) itrations mais aussi si aucun sommet hors de l'arbores cence des plus courts chemins dj construite n'est atteignable par un chemin venant de la racine. Chaque itration de la boucle consiste en : - la recherche d'un sommet qui sera appel "pivot". Ce sommet est le som met non encore dans l'arborescencqui possde la plus petite valeur dans le tableau dist ance (o l'un de tels sommets s'ils sont plusieurs). - si la recherche ci-dessus a conduit un sommet "pivot" tel que distan ce[pivot]< infini, - on met ce sommet dans l'arborescence (c'est--dire qu'on donne la valeur 1 appartient[pivot]) - on actualise les composantes des tableaux distance et arbo pour les sommets non encore dans l'arborescence de faon ce que, pour un tel smmet y : distance[y]=minimum{distance[x]+longueur(arc(x,y)), ce m inimum tant pris sur tous les sommets x appartenant dj l'arborescence de s plus courts chemins en cours de construction (il suffit de comparer la p rcdente valeur de distance[y] avec distance[pivot]+longueur(arc(pivot,y))po

ur savoir si l'ancienne valeur doit tre modifie. arbo[y]=sommet qui atteint le minimum dans l'expression dfinissant distance[y]. Dans notre programme : - les sommets sont appels 0, 1, ..., ordre-1 - les distances sont des "float" - le graphe est cod par le tableau des listes des fils des sommets, chaqu e fils tant accompagn de la longueur (note poids) de l'arc correspondeant - infini est choisie comme tant FLT_MAX, le plus grand "float". - le calcul de l'arborescence des plus courts chemins est men par la fonc tion CalculArbo qui appelle ChoixPivot et MiseAJour. - ChoixPivot recherche et retourne le sommet non encore dans l'arborescence qui possde la plus petite valeur de distance ; si ce minimum est FL T_MAX, la fonction ChoixPivot retourne -1. - MiseAJour est appele juste aprs avoir ajout "pivot" l'arb orescence. Elle met jour les champs du tableau distance correspondant au fils de "piv ot" non encore dans l'arborescence.