L'algorithme de Dijkstra peut être décrit de la manière suivante : - on utilise trois tableaux : Le premier, indicé par les sommets

, contient des valeurs numériques de même type que les distances portées 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 début 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 "père" de x dans l'arborescence des plus courts chemins depuis x que l'on aura déterminée. Le troisième, indicé par les sommets, indique si un sommet appartien t déjà à l'arborescence des plus courts chemins en cours de construction. Toutes les composantes de ce tableau sont initialisées à 0. Ce tableau sera noté "apparti ent". On note "ordre" l'ordre du graphe. Après l'initialisation, on effectue une boucle dont on sort au plus tard après (ordre-1) itérations mais aussi si aucun sommet hors de l'arbores cence des plus courts chemins déjà construite n'est atteignable par un chemin venant de la racine. Chaque itération 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 possède 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 façon à 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 déjà à l'arborescence de s plus courts chemins en cours de construction (il suffit de comparer la p récédente valeur de distance[y] avec distance[pivot]+longueur(arc(pivot,y))po

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

Sign up to vote on this title
UsefulNot useful