////////////////////////////////////////////
    //
    // 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); 
}
}