Universit´e Paris-Nord L3 Info
Algorithmique des graphes : Projet
Langage de programmation : C.
`
A faire en binˆome.
Le projet comprend plusieurs ´etapes :
1. Lire un graphe dans un fichier
2. Afficher un graphe grˆace `a la syntaxe DOT
3. Calculer les plus courts chemins dans un graphe `a partir d’un sommet donn´e
.Utiliser l’algorithme le mieux adapt´e au graphe en entr´ee
4. Afficher les valeurs des plus courts chemins obtenus et l’arborescence correspondante
5. Calculer le nombre d’op´erations ´el´ementaires effectu´ees par votre programme
6. Tester votre programme sur des exemples
Attention : Dans ce qui suit, les objets apparaissant entre crochet, tels <mongraphe.txt>,
</Chemin_menant_au_fichier.txt>,<algorithme choisi>,<mon_sommet>, . . . seront rem-
plac´es par les valeurs appropri´ees lors de l’ex´ecution de votre programme.
1 Lecture de graphe
Les graphes `a traiter par l’algorithme seront stock´es dans des fichiers texte. Avant de pouvoir
appliquer l’algorithme `a un graphe, il faut donc commencer par lire les donn´ees dans le fichier
correspondant, et les stocker ensuite dans une structure appropri´ee. On vous demande donc ici
d’impl´ementer une m´ethode permettant d’effectuer cette op´eration.
Il faut commencer par lire les donn´ees du fichier. Les fichiers repr´esentant les graphes auront
le format suivant :
La premi`ere ligne contiendra une seule information, le nombre nde sommets du graphe.
La deuxi`eme ligne contiendra une seule information, le nombre md’arcs du graphe.
Chacune des m lignes suivantes contiendra la description d’un arc du graphe : sa premi`ere
extr´emit´e, sa deuxi`eme extr´emit´e, et son poids.
Sur chacune des mderni`eres lignes, ces trois informations sont s´epar´ees par des virgules. Un
exemple de graphe `a quatre sommets et cinq arcs est donn´e par le fichier texte suivant, de nom
<mongraphe.txt> :
4
5
1,2,10
1,3,41
1,4,3
2,3,15
3,4,7
Le graphe ainsi d´ecrit contient cinq arcs : un arc du sommet 1 vers le sommet 2, un arc de 1
vers 3, un arc de 1 vers 4, un arc de 2 vers 3, et un arc de 3 vers 4. Ces arcs ont pour poids
respectifs 10, 41, 3, 15, et 7.
Vous devez ensuite d´efinir une structure dans laquelle stocker ces informations. Vous pou-
vez choisir une repr´esentation parmi les trois ´evoqu´ees en cours : liste d’adjacence, matrice
d’adjacence ou matrice d’incidence. Pr´ecisez ci-dessous quelle structure vous avez choisie, et
´eventuellement pour quelle(s) raison(s).
Attention : Pensez `a adapter les structures vues en cours pour prendre en compte les poids
des arcs du graphe !
Structure choisie :
2 Affichage de graphe
Pour afficher un graphe, on utilisera la syntaxe DOT. Celle-ci consiste `a ´ecrire le graphe
dans un fichier .dot en suivant la syntaxe expliqu´ee, par exemple, aux adresses ci-dessous :
https://fr.wikipedia.org/wiki/DOT_%28langage%29
http://cyberzoide.developpez.com/graphviz/#LV
Vous devrez donc, `a partir d’un graphe stock´e dans la structure que vous avez choisie dans
la Partie 1, cr´eer un fichier .dot contenant votre graphe d´ecrit dans la syntaxe DOT.
Dans les salles TP, sur les machines du sercal, le fichier .dot ainsi produit peut ˆetre affich´e
en utilisant le logiciel dot. Ainsi, votre fichier <exemple.dot> peut ˆetre affich´e via la ligne de
commande dot -Tpdf <exemple.dot> qui produit un pdf contenant le graphe correspondant.
3 Plus courts chemins dans le graphe
3.1 Quel algorithme utiliser ?
Avant d’ex´ecuter Bellman, Dijkstra ou Ford-Bellman pour d´eterminer les plus courts che-
mins dans notre graphe, il convient de d´eterminer lequel parmi ces algorithmes est le plus
adapt´e : si plusieurs d’entre eux s’appliquent, il faut choisir le plus rapide !
Rappelez ici les cas o`u chaque algorithme s’applique :
.Bellman :
.Dijkstra :
.Ford-Bellman :
Proposez une m´ethode qui d´etermine, selon les propri´et´es du graphe, quel algorithme de
plus courts chemins utiliser :
Programmez cette m´ethode : l’utilisateur devra voir s’afficher ce qui suit sur la console, o`u
les noms entre crochets <...> seront remplac´es par ce qui convient :
Entrez le nom du fichier contenant votre graphe:
</Chemin_menant_au_fichier.txt>
L’algorithme de plus courts chemins choisi est:
<algorithme choisi>
3.2 Impl´ementation de l’algorithme
L’utilisateur vous pr´ecisera `a partir de quel sommet il souhaite calculer les plus courts
chemins dans son graphe.
`
A partir de quel sommet souhaitez-vous calculer les plus courts chemins ?
<mon_sommet>
`
A vous ensuite d’impl´ementer les algorithmes du cours : Bellman, Dijkstra et Ford-Bellman.
Vous appliquerez alors l’algorithme choisi grˆace `a la Partie 3.1 au graphe donn´e par l’utilisateur,
en partant du sommet <mon_sommet>.
4 Affichage du r´esultat
Une fois les plus courts chemins calcul´es, affichez comme suit dans la console les valeurs des
plus courts chemins `a partir du sommet <mon_sommet> vers tous les autres sommets :
Les plus courts chemins `a partir de <mon_sommet> ont les valeurs suivantes:
de <mon_sommet> au sommet 1: 42
de <mon_sommet> au sommet 2: -11
(...)
de <mon_sommet> au sommet n: 5
Cr´eez un fichier .dot contenant l’arborescence des plus courts chemins correspondants. Af-
fichez cette arboresence.
5 Complexit´e
5.1 Nombre d’op´erations
Modifiez votre programme afin qu’il calcule le nombre d’op´erations ´el´ementaires effectu´ees
au cours de son ex´ecution. Apr`es son ex´ecution, affichez comme suit dans la console le nombre
d’op´erations ´el´ementaires ainsi calcul´e.
L’ex´ecution du programme pour votre graphe a n´ecessit´e:
<nombre_op´erations> op´erations
Rappel : les op´erations ´el´ementaires sont : addition, soustraction, multiplication, division,
affectation, comparaison. . .
5.2 Test
Testez votre programme sur des exemples de diff´erentes tailles et reportez vos r´esultats
ci-dessous. Ces r´esultats correspondent-ils `a vos attentes ?
Nombre d’arˆetes Nombre de sommets Algorithme choisi Nombre d’op´erations
1 / 4 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !