////////////////////////////////////////////
//
// graph.cpp
//
// Programme principal
//
// Michaël ORTEGA & Nicolas DUMOULIN
// Projet de Graphe - Mai 2001
//
////////////////////////////////////////////
//visualcpp pour compiler sous visual c++
//autres_compilos pour compiler avec un autre compilateur
//cette distinction est nécessaire car visual c++ ne limite pas la portée des indices
// de boucle à la boucle, donc lorsqu'on a deux boucles qui se suivent dans un même
// bloc de code, il ne faut pas redéclarer l'indice de boucle.
#define visualcpp
//#define autres_compilos
#include "structure.h"
void main()
{
unsigned int choix_menu;
unsigned long int temps=0;
graph * R, * G;
do
{
cout<<" _______________________________________"<<endl;
cout<<" || ||"<<endl;
cout<<" || Calcul du plus court chemin ||"<<endl;
cout<<" || ||"<<endl;
cout<<" || avec l'algorithme de Dijkstra ||"<<endl;
cout<<" _______________________________________"<<endl<<endl;
do
{
cout<<" Voulez-vous : 1 -> Charger un graphe a partir d'un fichier"<<endl;
cout<<" 2 -> Generer aleatoirement un graphe"<<endl;
cout<<" 3 -> Quitter"<<endl<<endl;
cout<<" ? -> ";
cin>>choix_menu;
cout<<endl<<endl;
}
while ((choix_menu!=1)&&(choix_menu!=2)&&(choix_menu!=3));
G = new graph; //allocation mémoire pour le graphe de départ
cout<<" --------------------------"<<endl<<endl;
//traitement du choix de l'utilisateur
if (choix_menu==1)
{
G->charger();
if (!G->connexe())
{
cout<<endl<<endl<<" Erreur fatale : votre graphe n'etait pas connexe !!"<<endl<<" Nous l'avons donc modifie pour qu'il le soit!"<<endl<<endl;
G->sortie_graphe();
}
}
else if (choix_menu==2)
{
unsigned int nbsommet,proba;
cout<<"Veuillez saisir le nombre de sommet que doit contenir le graphe a generer : ";
cin>>nbsommet;
cout<<endl<<"Veuillez saisir la probabilite d'existence d'un arc entre deux sommets :"<<endl;
cout<<" (probabilite en pourcentage) Entrez un nombre entre 0 et 100 -> ";
cin>>proba;
cout<<endl<<" generation du graphe : ";
G->hasard(nbsommet,proba);
G->sortie_graphe();
}
if (choix_menu!=3)
{
cout<<" --------------------------"<<endl<<endl;
cout<<" Calcul du plus court chemin : ";
R=G->dijkstra(temps);
cout<<endl<<endl<<" Calcul termine en "<<temps<<" millisec."<<endl<<endl;
R->sortie_graphe();
cout<<" --------------------------"<<endl<<endl;
cout<<endl<<"Suprression des donnees ..."<<endl;
delete R;
delete G;
cout<<" --------------------------"<<endl<<endl;
}
}
while (choix_menu!=3);
}
}