Page d'accueil Description du projet
/******************************************
 *
 *   Cedric Pradalier   2001
 *   mail : http://cedric.pradalier.free.fr/mail.html
 *
 *****************************************/



#ifndef TREILLIS_H
#define TREILLIS_H

/****************************
 Class permettant l'implementation
 d'un treillis : ce treillis represente
 l'ensemble des chemins possibles pour 
 aller d'un arret a un autre en passant
 par une liste fixee de ligne

Ex :   B       E       H
      *:* --- *:* --- *:* 
    /     \ /     \ /     \
A /    C  / \  F  / \  I    \ K
* --- *:* --- *:* --- *:* --- *
  \       \ /     \ /       /
    \  D  / \  G  / \  J  /
      *:* --- *:* --- *:*
  L1      L2      L3       L4

Dans cet exemple :
    chaque noeud represente un arret
    le symbole : represente un latence due au temps de correspondance
    les axes represente des voyages entre 2 arrets utilisant la ligne
     ecrite en dessous
    (Ex : de A a B en passant par L1)
Le but est de pouvoir chercher le plus court chemin (en terme d'horaire)
entre A et K et passant par L1..L4


La classe CEtage represente un etage :
Ex1 :  A
Ex2 : B,C,D
La classe Noeud represente un noeud : A,B,C,...
La classe CTreillis contient l'ensemble.


********************************/
#include "lignes.h"
#include "arrets.h"
#include "objet.h"
#include "vector.h"
#include "horaire.h"




class CTreillis : CObjet
{
private:
    class CNoeud 
    {
    public:
        CHoraire horaire,arriveeDest;
        int origine,destination;
        CArrets * arret;
        CNoeud():horaire(99,99){origine = destination = -1;}
        CNoeud(CArrets * A):horaire(99,99)
        {
            origine = destination = -1;
            arret=A;
        }
        virtual ~CNoeud() {}
        virtual void Print();
        void PrintMax();
    };
        
            
    class CEtage 
    {
    public:
        CVector etage; //tableau de CNoeud *
        CEtage * NextEtage;
        CEtage * PrecEtage;
        CLignes * ligne; //La ligne qu'on prend a cet etage
    // Les constructeurs
        CEtage(){NextEtage = PrecEtage = NULL;ligne = NULL;}
        ~CEtage(){delete NextEtage;}
        void SetPrecedent(CEtage * P) { PrecEtage = P;}
        void SetNext(CEtage * N) { NextEtage = N;}
        

    // Les fontionalites
        bool MaJHoraires(CHoraire TpsCorresp);
        void PrintMax();


    };


    CEtage * Depart;
    CEtage * Arrivee;
    
            
public:
    CTreillis() {Depart = Arrivee = NULL;}
    void SetDepart(CArrets * Arret_Depart);
    CTreillis(CLignes * Larr,CArrets * arrivee,CHoraire Limite);
    ~CTreillis(){delete Depart;}
    
    void PushLigne(CLignes * ligne);
    bool MaJHoraires(CHoraire TpsCorresp);
    virtual void Print();
    // Valeur basée sur la duree permettant de comparer 2 itineraires
    virtual int Value();
    void PrintMax();
    CHoraire Duree();

    
};


#endif // TREILLIS_H