// méthode qui va chercher tout les itinéraires possibles pour les noeuds public List <ListNoeud> rechercheItiNoeud(Pt_cle depart, Pt_cle arrivee) { // contient liste de tous les itinéraires possibles List <ListNoeud> listeList = new List <ListNoeud>(); List <CaseNoeud> listCaseNoeudDep = depart.getNoeudsVoisin(); List <CaseNoeud> listCaseNoeudAr = arrivee.getNoeudsVoisin(); // taille de la liste de noeud de la case départ, on suppose que dans tous les cas la valeur est toujours de 2, chaque couloir 2 noeuds int n = listCaseNoeudDep.Count; // nombre d'éléments dans la liste des listes int m = 0; // création de liste selon le nombre de noeuds de départ // ajout de ces listes dans la liste des listes for (int i = 0; i < n; i++) { ListNoeud liste = new ListNoeud(); liste.getListe().Add(listCaseNoeudDep[i]); listeList.Add(liste); m = listeList.Count; } // boolean vérifiant sur les derniers éléments sont ceux de la destination Boolean check; // acquisition des différents itinéraires de noeuds possibles while (check == false) { // // liste de transition List <ListNoeud> listeTran = new List <ListNoeud>(); for (int i = 0; i < listeList.Count; i++) { // liste qui contient les caseNoeuds de 1 itinéraire ListNoeud liste = listeList[i]; // vérifie si la liste est terminé if (liste.getStatus() == false) { // t: index du dernier élément de la liste en cours int t = liste.getListe().Count; CaseNoeud c = liste.getListe()[t - 1]; // prends en liste les voisins du dernier point List <CaseNoeud> voisins = c.getNoeudsVoisin(); // boucle qui va considérer chaque voisin et va les ajouter à la liste s'il correspond aux critères // critère: différents des case départs et des caseNoeuds déjà contenus dans la liste for (int j = 0; j < voisins.Count; j++) { // dupplication de la liste en cours pour pouvoir ajouter les nouveaux itinéraires possibles ListeNoeud temp = liste; // case qui est voisin CaseNoeud v = voisins[j]; // si la CaseNoeud n'est pas dans la liste et parmi les CaseNoeud de départ if ((temp.Contains(v) == false) && (listCaseNoeudDep.Contains(v) == false)) { // ajout de l'élément dans la liste temp.addNoeud(v); // si la dernière caseNoeud est l'arrivée alors if (listCaseNoeudAr.Contains(v) == true) { temp.setStatut(true); } // ajout de la nouvelle liste créée listeTran.Add(temp); } } } else { // ajout de la liste terminé listeTran.Add(liste); } } // la liste des listes est mise à jour listeList = listeTran; check = true; // si 1 seul élément n'est pas fini alors la boucle continue for (int l = 0; l < listeList.Count; l++) { if (listeList[l].getStatus() == false) { check = false; } } } // méthode qui verifie si tous les ititnéraires possibles arrivent à destination return(listeList); }
// méthode pour ajouter un élément dans la liste public void addNoeud(CaseNoeud noeud) { liste.Add(noeud); }