public class Labyrinthe { static boolean [][] labyrinthe = { { false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false }, { false,true ,true ,true ,true ,true ,true ,true ,true ,true ,true ,true ,true ,true ,true ,true ,true ,false,false,false }, { false,true ,false,false,true ,false,false,false,false,false,false,false,false,false,true ,false,false,false,false,false }, { true ,true ,false,false,true ,false,false,false,true ,true ,true ,true ,true ,false,true ,false,false,false,false,false }, { false,false,false,false,true ,false,false,false,true ,false,false,false,false,false,true ,false,false,false,false,false }, { false,false,false,false,true ,false,false,true ,true ,true ,true ,false,true ,true ,true ,true ,true ,true ,false,false }, { false,false,true ,true ,true ,false,false,false,false,false,true ,false,true ,false,false,false,false,true ,false,false }, { false,false,true ,false,false,false,false,false,false,false,true ,false,true ,false,false,false,false,true ,false,false }, { false,false,true ,false,false,true ,false,false,false,false,true ,false,false,false,true ,false,false,true ,false,false }, { false,false,true ,false,false,true ,true ,true ,true ,true ,true ,false,false,false,true ,false,false,true ,false,false }, { false,false,true ,false,false,false,false,true ,false,false,false,false,false,false,true ,true ,true ,true ,true ,false }, { false,false,true ,true ,true ,true ,true ,true ,true ,true ,true ,true ,true ,false,false,true ,false,false,false,false }, { false,false,false,false,true ,false,false,true ,false,false,false,false,true ,false,false,true ,true ,true ,false,false }, { false,true ,false,false,true ,false,false,false,false,false,false,false,true ,false,false,false,false,true ,false,false }, { false,true ,false,false,false,false,true ,true ,true ,true ,true ,true ,true ,false,false,false,false,false,false,false }, { false,true ,true ,false,false,false,true ,false,false,false,false,false,false,false,false,false,true ,true ,true ,true }, { false,false,true ,false,false,false,true ,false,true ,true ,true ,true ,true ,false,false,false,true ,false,false,false }, { false,false,true ,false,false,false,true ,false,true ,false,false,false,false,false,false,false,true ,false,false,false }, { false,false,true ,true ,true ,true ,true ,true ,true ,true ,true ,true ,true ,true ,true ,true ,true ,false,false,false }, { false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false } }; ///////////////////////////////////////////////////////////////////////////////// /* Type structure de definition d'une position */ /* par un numero de ligne et un numero de colonne */ static class Position { int l = -1; int c = -1; }; /* Test d'egalite de deux position */ static boolean egal(Position p1,Position p2) { boolean res; if ( ( p1.c != p2.c ) || ( p1.l != p2.l ) ) { res = false; } else { res = true; } return res; } /* Fonction de test de l'existence d'une sortie */ /* a un labyrinthe represente par un tableau */ /* de booleen */ /* La matrice lb code le labyrinthe */ /* Le parametre p est la position a partir */ /* de laquelle rechercher */ /* Le parametre origine est la position qui vient */ /* d'etre quittee pour atteindre la position p et */ /* vers laquelle il est interdit de retourner */ /* Le parametre sortie est destine a recueillir */ /* la position de la sortie si celle-ci existe */ /* Le booleen retourne indique si une sortie */ /* a ete trouvee */ static boolean trouveSortie(boolean [][] lb, Position p, Position origine, Position sortie) { boolean res = false; Position np = new Position(); if ( ( p.l == -1 ) || ( p.l == lb.length ) || ( p.c == -1 ) || ( p.c == lb[0].length ) ) { sortie.l = origine.l; sortie.c = origine.c; res = true; } else { if ( lb[p.l][p.c] == true ) { np.c = p.c+1; np.l = p.l; if ( egal(np,origine) == false ) { res = trouveSortie(lb,np,p,sortie); } if ( res == false ) { np.c = p.c-1; np.l = p.l; if ( egal(np,origine) == false ) { res = trouveSortie(lb,np,p,sortie); } if ( res == false ) { np.c = p.c; np.l = p.l+1; if ( egal(np,origine) == false ) { res = trouveSortie(lb,np,p,sortie); } if ( res == false ) { np.c = p.c; np.l = p.l-1; if ( egal(np,origine) == false ) { res = trouveSortie(lb,np,p,sortie); } } } } } } return(res); } ///////////////////////////////////////////////////////////////////////////////// public static void main(String [] args) { Position p = new Position(); p.l = 3; p.c = 0; Position o = new Position(); o.l = 3; o.c = -1; Position sortie = new Position(); if ( trouveSortie(labyrinthe,p,o,sortie) == true ) { Ecran.afficherln("La sortie est en position (",sortie.c,",",sortie.l,")."); } else { Ecran.afficherln("Il n'y a pas de sortie!"); } } }