Ejemplo n.º 1
0
        public Itineraire chemin(Pt_cle dep, Pt_cle arr)
        {
            List <Itineraire> listIti;

            // lorsque que les 2 points sont dans le même couloir
            if (compareList(dep.getCouloir().getNoeudsVoisin(), arr.getCouloir().getNoeudsVoisin()) == false)
            {
                List <ListNoeud> listList;
                listList = rechercheItiNoeud(dep, arr);
                for (int i = 0; i < listList.Count; i++)
                {
                    listIti.Add(generationIti(listList[i], dep, arr));
                }
            }
            else
            {
                Itineraire         iti      = new Itineraire();
                List <CaseCouloir> listCase = generationList(dep.getCouloir(), arr.getCouloir());
                listCase.Add(arr.getCouloir());
                for (int j = 0; j < listCase.Count; j++)
                {
                    iti.addCase(listCase[j]);
                }
                listIti.Add(iti);
            }
            iti = itiFinal(listIti);
            return(iti);
        }
Ejemplo n.º 2
0
        // la méthode génère une liste de CaseCouloir avec l'aide de la liste des CaseNoeud
        public Itineraire generationIti(ListNoeud listN, Pt_cle dep, Pt_cle arr)
        {
            int                lig, col;
            Itineraire         iti   = new Itineraire();
            List <CaseCouloir> liste = new List <CaseCouloir>();

            // liste contenant la case départ jusqu'au premier noeud
            liste = generationList(dep.getCouloir(), listN[0]);
            for (int i = 0; i < liste.Count; i++)
            {
                iti.addCase(liste[i]);
            }
            // boucle pour rajouter toutes les CaseCouloir qui sont entre les CaseNoeud
            for (int j = 1; j < listN; j++)
            {
                liste = generationList(listN[j - 1], listN[j]);
                for (int k = 0; k < liste.Count; k++)
                {
                    iti.addCase(liste[k]);
                }
            }
            // ajout des CaseCouloir entre le dernier noeud et le point d'arrivée
            liste = generationList(listN[listN.Count - 1], arr.getCouloir());
            for (int l = 0; l < liste.Count; l++)
            {
                iti.addCase(liste[l]);
            }
            // ajout du point d'arrivée
            iti.addCase(arr.getCouloir());

            return(iti);
        }
Ejemplo n.º 3
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);
        }