Corrigé du TD 9 : villes et routes

Classe Ville

// Cette class represente une ville avec des routes qui rejoignent d'autres villes
class Ville
{
    protected String nom;
    protected ArrayList routes=new ArrayList();
 
    protected boolean dejaParcouru;
 
    public String toString()
    {
        return nom;
    }
 
    // Verifier (recursivement) si la ville v
    // est joignable a partir de cette ville
    public boolean EstJoignable(Ville v)
    {
        boolean aRetourner ;
        if (dejaParcouru)
        {
            // Si on a deja parcouru cette ville, sans succes, inutile de recommencer
            System.out.println("Je suis a la ville : " + this + ", deja parcourue !") ;
            aRetourner = false;
        }
        else
        {
            System.out.println("Je suis a la ville:"+ this +
                ", a la recherche de la ville:"+v);
            if(v == this)
            {
                // On est dessus, on a trouvé!
                aRetourner = true ;
            }
            else
            {
                // Marquer qu'on est en trai de parcourir cette ville
                dejaParcouru=true;
 
                // regarder dans toutes les villes voisines
                // Pour ca, on va regarder chaque route
                int i = 0 ;
                aRetourner = false ;
                while (!aRetourner && i < routes.size())
                {
                    Route r=(Route)routes.get(i);
                    System.out.println("De " + this + ", je parcours la route:" + r);
                    // pour chaque route, trouver la ville d'en face
                    Ville vr = r.Autre(this);
                    // Regarder si la ville "v" peut etre jointe
                    // a partir de l'autre ville
                    aRetourner = vr.EstJoignable(v) ;
                    i++ ;
                }
 
                // on libère le marqueur "dejaParcouru" :
                dejaParcouru = false ;
            }
        }
        return aRetourner ;
    }
 
    // Ajouter une route
    public void AjouterRoute(Route route)
    {
        routes.add(route);
    }
 
    // Constrcteur
    public Ville(String _nom)
    {
        nom=_nom;
        dejaParcouru = false ;
        System.out.println("Creation de la ville:"+nom);
    }
}

Classe Route

// Cette classe represente une route qui relie 2 villes
class Route
{
    protected String nom;
    protected Ville ville1;
    protected Ville ville2;
 
    public String toString(){return nom+"("+ville1+","+ville2+")";}
 
    // Retourne l'une des deux villes qui n'est pas "v"
    public Ville Autre(Ville v)
    {
        if(v!=ville1){return ville1;}
        else
        {return ville2;}
    }
    public Route(String _nom,Ville _ville1,Ville _ville2)
    {
        nom=_nom;
        ville1=_ville1;
        ville2=_ville2;
        ville1.AjouterRoute(this);
        ville2.AjouterRoute(this);
    }
}

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>