Algorithmique des graphes : Projet 1 Lecture de graphe

publicité
Université Paris-Nord
L3 Info
Algorithmique des graphes : Projet
Langage de programmation : C.
À faire en binôme.
Le projet comprend plusieurs étapes :
1. Lire un graphe dans un fichier
2. Afficher un graphe grâce à la syntaxe DOT
3. Calculer les plus courts chemins dans un graphe à partir d’un sommet donné
. Utiliser l’algorithme le mieux adapté au graphe en entrée
4. Afficher les valeurs des plus courts chemins obtenus et l’arborescence correspondante
5. Calculer le nombre d’opérations élémentaires effectuées 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 remplacés par les valeurs appropriées lors de l’exécution de votre programme.
1
Lecture de graphe
Les graphes à traiter par l’algorithme seront stockés dans des fichiers texte. Avant de pouvoir
appliquer l’algorithme à un graphe, il faut donc commencer par lire les données dans le fichier
correspondant, et les stocker ensuite dans une structure appropriée. On vous demande donc ici
d’implémenter une méthode permettant d’effectuer cette opération.
Il faut commencer par lire les données du fichier. Les fichiers représentant les graphes auront
le format suivant :
– La première ligne contiendra une seule information, le nombre n de sommets du graphe.
– La deuxième ligne contiendra une seule information, le nombre m d’arcs du graphe.
– Chacune des m lignes suivantes contiendra la description d’un arc du graphe : sa première
extrémité, sa deuxième extrémité, et son poids.
Sur chacune des m dernières lignes, ces trois informations sont séparées par des virgules. Un
exemple de graphe à quatre sommets et cinq arcs est donné 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écrit 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éfinir une structure dans laquelle stocker ces informations. Vous pouvez choisir une représentation parmi les trois évoquées en cours : liste d’adjacence, matrice
d’adjacence ou matrice d’incidence. Précisez ci-dessous quelle structure vous avez choisie, et
éventuellement pour quelle(s) raison(s).
Attention : Pensez à 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 à écrire le graphe
dans un fichier .dot en suivant la syntaxe expliquée, par exemple, aux adresses ci-dessous :
– https://fr.wikipedia.org/wiki/DOT_%28langage%29
– http://cyberzoide.developpez.com/graphviz/#LV
Vous devrez donc, à partir d’un graphe stocké dans la structure que vous avez choisie dans
la Partie 1, créer un fichier .dot contenant votre graphe décrit dans la syntaxe DOT.
Dans les salles TP, sur les machines du sercal, le fichier .dot ainsi produit peut être affiché
en utilisant le logiciel dot. Ainsi, votre fichier <exemple.dot> peut être affiché 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écuter Bellman, Dijkstra ou Ford-Bellman pour déterminer les plus courts chemins dans notre graphe, il convient de déterminer lequel parmi ces algorithmes est le plus
adapté : si plusieurs d’entre eux s’appliquent, il faut choisir le plus rapide !
Rappelez ici les cas où chaque algorithme s’applique :
. Bellman :
. Dijkstra :
. Ford-Bellman :
Proposez une méthode qui détermine, selon les propriétés du graphe, quel algorithme de
plus courts chemins utiliser :
Programmez cette méthode : l’utilisateur devra voir s’afficher ce qui suit sur la console, où
les noms entre crochets <...> seront remplacés 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émentation de l’algorithme
L’utilisateur vous précisera à partir de quel sommet il souhaite calculer les plus courts
chemins dans son graphe.
À partir de quel sommet souhaitez-vous calculer les plus courts chemins ?
<mon_sommet>
À vous ensuite d’implémenter les algorithmes du cours : Bellman, Dijkstra et Ford-Bellman.
Vous appliquerez alors l’algorithme choisi grâce à la Partie 3.1 au graphe donné par l’utilisateur,
en partant du sommet <mon_sommet>.
4
Affichage du résultat
Une fois les plus courts chemins calculés, affichez comme suit dans la console les valeurs des
plus courts chemins à partir du sommet <mon_sommet> vers tous les autres sommets :
Les plus courts chemins à 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éez un fichier .dot contenant l’arborescence des plus courts chemins correspondants. Affichez cette arboresence.
5
5.1
Complexité
Nombre d’opérations
Modifiez votre programme afin qu’il calcule le nombre d’opérations élémentaires effectuées
au cours de son exécution. Après son exécution, affichez comme suit dans la console le nombre
d’opérations élémentaires ainsi calculé.
L’exécution du programme pour votre graphe a nécessité:
<nombre_opérations> opérations
Rappel : les opérations élémentaires sont : addition, soustraction, multiplication, division,
affectation, comparaison. . .
5.2
Test
Testez votre programme sur des exemples de différentes tailles et reportez vos résultats
ci-dessous. Ces résultats correspondent-ils à vos attentes ?
Nombre d’arêtes
Nombre de sommets
Algorithme choisi
Nombre d’opérations
Téléchargement