Université Claude Bernard - Lyon 1 Licence Sciences et Technologies - L3
Algorithmique, Programmation et Complexité - LIF9 Semestre de printemps
TP - Graphes orientés, algorithme de Dijkstra
1 Graphe orienté valué
Le but est de développer une structure générique de graphe et d’implémenter l’algorithme de Dijkstra
pour la recherche de plus courts chemins. Nous allons considérer des graphes orientés et valués :
Truc
Chose
Machin Bitoniau
Bidule
8
2
7
45
1
3
12
7
10
Les valuations des arcs seront des entiers. Chaque nœud devra posséder, entre autres, une chaîne de
caractère correspondant par exemple à un nom de ville. Dans les fonctions et procédures à implémenter,
l’accès à un nœud se fera par l’intermédiaire de cette chaîne de caractère. Le graphe devra être représenté
à l’aide de listes d’adjacence (pas de matrice !), avec un accès optimisé aux arcs incidents extérieurement
à un nœud donné.
2 Implémentation
Comme pour les TPs précédents, vous avez le choix entre le passage de paramètre par pointeur ou
par référence. Chaque procédure/fonction développée devra être testée dans le programme principal.
Les procédures/fonctions demandées peuvent faire appel à d’autres procédures/fonctions internes de
votre choix. Votre code devra comporter :
1) La définition des structures Graphe,Noeud et Arc. Les collections d’éléments, quels que soient leurs
types, devront être implantées de manière à éviter le déménagement en mémoire des éléments en cas
d’insertion ou de suppression.
2) Une procédure d’initialisation d’un graphe vide
procédure initGrapheVide(donnée-résultat G : Graphe)
3) Une fonction d’ajout d’un nœud avec un nom donné
fonction ajoutGrapheNoeud(donnée-résultat G : Graphe, donnée nom : chaîne) : entier
Si un nœud portant le même nom est déjà présent dans le graphe, la fonction ne modifie pas celui-ci. La
valeur de retour pourra être utilisée pour indiquer si l’ajout du nœud a eu lieu ou non.
4) Des fonctions d’ajout d’un arc de valeur ventre deux nœuds identifiés par leur noms respectifs.
fonction ajoutGrapheArc(donnée-résultat G : Graphe, donnée v : entier,
donnée nom_départ : chaîne, donnée nom_arrivée : chaîne) : entier
Si au moins un des deux nœuds n’existe pas, la fonction ne modifie pas celui-ci. Si un arc existe déjà entre
les deux nœuds , l’ancienne valeur de cet arc est remplacée par v. La valeur de retour pourra être utilisée
pour indiquer si l’arc a été ajouté, modifié ou ignoré (si les sommets passés spécifiés ne sont pas valides).
5) Une procédure de destruction complète d’un graphe (destinée à être appelée en fin de programme)
procédure detruitGraphe(donnée-résultat G : Graphe)
1