/******************************************
*
* 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