Example #1
0
        // 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);
        }
Example #2
0
 // méthode pour ajouter un élément dans la liste
 public void addNoeud(CaseNoeud noeud)
 {
     liste.Add(noeud);
 }