Chapitre 1 Définitions et concepts fondamentaux de la théorie des graphes 1 Chapitre 2 Les plus courts Chemins : algorithme de Dijkstra 2.1 Rappels théoriques En théorie des graphes, l’algorithme de Dijkstra sert à résoudre le problème du plus court chemin, c’est-à-dire, trouver le chemin le plus court entre deux sommets d’un graphe. Il permet, par exemple, de déterminer le plus court chemin pour se rendre d’une ville à une autre connaissant le réseau routier d’une région. Il s’applique à un graphe connexe. De plus, cet algorithme est souvent réalisé à l’aide d’un tableau dans lequel chaque étape correspond à une ligne. Afin de résoudre les exercices, nous allons définir les notions suivantes : – Le poids associé à l’arête e est un nombre réel noté w(e). On considère que le poids associé à une arête est typiquement une longueur. – Un graphe pondéré est un graphe pour lequel un poids est associé à chacune des arêtes. – Le poids ou la longueur d’un parcours est la somme des poids associés à chacune des arêtes qui le compose. – d(u, v) = la longueur du plus court chemin du sommet u vers le sommet v du graphe. ⇒ plusieurs hypothèses sont considérées : G est un graphe simple et tous les poids associés aux arêtes d’un graphe sont ≥ 0. De plus par convention, le poids entre deux sommets qui ne sont pas adjacents est défini par w = ∞. 2 Algorithme de Dijkstra – S = sous-ensemble de V (= ensemble des sommets du graphe (V, E, ψ)) tel que u0 ∈ S où u0 est le sommet de départ. – u′ = sommet considéré à chaque étape. – l(v) = valeur associée à chaque sommet v. Initialement l(u0 ) et l(v) = ∞ pour v 6= u0 . → → → → → → INITIALISATION : l(u0 ) = 0, l(v) = ∞ pour v 6= u, S := u0 , u′ = u. BOUCLE (tant qu’il reste des sommets hors de S) : pour chaque v 6∈ S, l(v) = min(l(v), l(u′ ) + w(u′ v)) trouver vmin 6∈ S tel que l(vmin ) ≤ l(v) pour tout v 6∈ S u′ := vmin S := S ∪ {u′ } 2.2 Exercices Exercice 1 : Une compagnie admet 6 succursales dans chacune des 6 villes notées C1 , C2 , · · · , C6 . Le prix d’un vol direct de la ville Ci à la ville Cj est donné par la (i, j)ième entrée dans la matrice suivante (∞ signifie qu’il n’existe pas de vol direct). 0 50 ∞ 40 25 10 50 0 15 20 ∞ 25 ∞ 15 0 10 20 ∞ 40 20 10 0 10 25 25 ∞ 20 10 0 55 10 25 ∞ 25 55 0 Quel est le parcours le moins cher pour aller de la ville C1 à la ville C3 ? 3 Exercice 2 : Trouver les distances à partir de a du graphe dirigé suivant : Exercice 3 : Un voyageur souhaite se rendre de Marseille au Futuroscope en train. D’une carte du réseau TGV, il a extrait le schéma suivant : Les guides donnent par ailleurs les temps suivants : Marseille-Lyon : 1h50 Marseille-Paris : 3h Marseille-Toulouse : 3h Lyon-Paris : 2h15 Lyon-St Pierre des corps : 3h Paris-St Pierre des corps : 1h St Pierre des corps-Futuroscope : 30min Futuroscope-Bordeaux : 2h10 Toulouse-Bordeaux : 2h10 Avec toutes ces informations, quel est le plus court chemin pour le voyageur s’il veut aller de Marseille au Futuroscope ? 4 Exercice 4 : Trouver, en appliquant l’algorithme de Dijkstra au graphe suivant, le chemin minimal allant de S à E. Vérifier que le résultat obtenu n’est pas correct. Pourquoi ? Exercice 5 : Trouver, en appliquant l’algorithme de Dijkstra au graphe suivant, le chemin minimal allant de 1 à 11. Exercice 6 : Un voyageur souhaite connaitre les chemins minimaux à partir de Namur vers certaines villes. Pour ce faire, il cherche sur google map la distance en km (sur route) entre les villes qu’il souhaite visiter. Appliquer l’algorithme de Dijkstra afin de répondre au souhait du voyageur. Namur Bruxelles Charleroi Ciney Andenne Kortrijk Gent Ostende Namur 0 61.1 42.5 28.7 20.6 155 128 184 Bruxelles 61.4 0 59.3 90.7 72.4 94.3 58.5 115 Charleroi 39.2 59.5 0 76.7 57.9 129 111 167 5 Ciney 28.6 85.4 74.8 0 24 187 152 209 Andenne 20.4 72.9 61.9 24.2 0 174 140 196 Kortrijk 154 93 129 192 173 0 47 70.9 Gent 127 57.4 110 156 138 48.3 0 69.3 Ostende 184 114 166 213 195 72.7 68.2 0 Exercice 7 - Janvier 2013 HD : Albert souhaiterait se rendre le plus rapidement possible de Anvers à Kortrijk. Il connait les temps de parcours entre différentes villes et les a repris dans le tableau ci-dessous. Peux-tu lui indiquer le meilleur chemin à suivre ? A Anvers Bruxelles Charleroi Damme Eeklo Fleurus Gembloux Hasselt Izegem Jodoigne Kortrijk 4 1 B 4 C 1 2 D E F 5 2 5 H I 5 10 32 20 J K 3 7 3 3 3 G 7 4 4 5 32 20 10 6 8 8 6 9 7 7 18 9 18 30 30 Exercice 8 - Janvier 2013 HJ : Le graphe ci-dessous indique, sans respecter d’échelle, les parcours possibles entre les sept bâtiments d’une entreprise importante. Un agent de sécurité effectue régulièrement des rondes de surveillance. Ses temps de parcours en minutes entre deux bâtiments sont les suivants : AB = 16 minutes BG = 8 minutes DE = 2 minutes AG = 12 minutes CD = 7 minutes EF = 8 minutes BC = 8 minutes CE = 4 minutes EG = 15 minutes BE = 12 minutes CG = 10 minutes FG = 8 minutes Sur chaque arête, les temps de parcours sont indépendants du sens du parcours. 1) Montrer qu’il est possible que l’agent de sécurité passe une fois et une seule par tous les chemins de cette usine. Donner un exemple de trajet. 2) L’agent de sécurité peut-il revenir à son point de départ après avoir parcouru une fois et une seule tous les chemins ? Justifier la réponse. 6 3) Tous les matins, l’agent de sécurité part du bâtiment A et se rend au bâtiment D. En utilisant un algorithme que l’on explicitera, déterminer le chemin qu’il doit suivre pour que son temps de parcours soit le plus court possible, et donner ce temps de parcours. Exercice 9 - Aout 2013 HD : La compagnie Europ’Air dessert différentes villes. Le tableau ci-contre donne les durées de vol entre ces différentes villes. A A B C D E F B 12 12 C E 12 5 3 7 2 2 5 D 5 3 12 3 4 7 9 F 5 3 4 9 8 8 1. Comment déterminer le trajet le plus rapide entre deux villes ? 2. Déterminer le trajet le plus rapide de A à D et donner sa durée. 3. Donner toutes les propriétés du graphe. Exercice 10 - Aout 2013 HJ : La compagnie Europ’Air dessert différentes villes. Le tableau ci-contre donne les durées de vol entre ces différentes villes. A A B C D E F B 12 12 C E 12 5 3 7 2 2 5 D 5 3 12 3 4 7 9 F 5 3 4 9 8 8 1. Comment déterminer le trajet le plus rapide entre deux villes ? 2. Déterminer le trajet le plus rapide de D à A et donner sa durée. 3. Comment modifier la méthode précédente afin de prendre en compte la durée des escales dans les différentes villes ? 7