Example #1
0
        public override double GetArcCost(GenericNode N2)
        {
            SpecificNode N2bis = (SpecificNode)N2;

            return(DijkstraAForm.matrice[numero, N2bis.numero]);
        }
Example #2
0
        /* Fonction principale de résolution de l'algorithme */
        public List <GenericNode> RechercheSolutionAEtoile(GenericNode N0, DijkstraAForm form)
        {
            int ite = 1;

            //Listes qui se remplira des nodes pour la résolution de l'algorithme
            L_Ouverts = new List <GenericNode>();
            L_Fermes  = new List <GenericNode>();
            //Liste contenant les solutions string de l'input pour l'utilisateur
            //e.g : si on en est à l'étape 2 de la résolution, la liste L_FermesEvolution contiendra { {"N0"}, {"N0", "N1"} }
            L_OuvertsEvolution = new List <String[]>();
            L_FermesEvolution  = new List <String[]>();

            //Le noeud passé en paramètre est supposé être le noeud initial
            GenericNode N = N0;

            L_Ouverts.Add(N0);

            //Enregistrement de l'étape 1
            L_OuvertsEvolution.Add(ToStringList(L_Ouverts));
            L_FermesEvolution.Add(ToStringList(L_Fermes));

            // tant que le noeud n'est pas terminal et que ouverts n'est pas vide
            while (L_Ouverts.Count != 0 && N.EndState() == false)
            {
                ite++;
                // Le meilleur noeud des ouverts est supposé placé en tête de liste
                // On le place dans les fermés
                L_Ouverts.Remove(N);
                L_Fermes.Add(N);

                // Il faut trouver les noeuds successeurs de N
                this.MAJSuccesseurs(N);
                // Inutile de retrier car les insertions ont été faites en respectant l'ordre

                //Enregistrement de l'étape "ite"
                L_OuvertsEvolution.Add(ToStringList(L_Ouverts));
                L_FermesEvolution.Add(ToStringList(L_Fermes));

                // On prend le meilleur, donc celui en position 0, pour continuer à explorer les états
                // A condition qu'il existe bien sûr
                if (L_Ouverts.Count > 0)
                {
                    N = L_Ouverts[0];
                }
                else
                {
                    N = null;
                }
            }
            form.SetIterationInputGoal(++ite);

            L_Fermes.Add(N);
            L_Ouverts.Remove(N);
            this.MAJSuccesseurs(N);

            //Enregistrement de la dernière étape
            L_OuvertsEvolution.Add(ToStringList(L_Ouverts));
            L_FermesEvolution.Add(ToStringList(L_Fermes));

            // A* terminé
            // On retourne le chemin qui va du noeud initial au noeud final sous forme de liste
            // Le chemin est retrouvé en partant du noeud final et en accédant aux parents de manière
            // itérative jusqu'à ce qu'on tombe sur le noeud initial
            List <GenericNode> _LN = new List <GenericNode>();

            if (N != null)
            {
                _LN.Add(N);

                while (N != N0)
                {
                    N = N.GetNoeud_Parent();
                    _LN.Insert(0, N);  // On insère en position 1
                }
            }
            return(_LN);
        }
Example #3
0
        // Méthodes abstraites, donc à surcharger obligatoirement avec override dans une classe fille
        public override bool IsEqual(GenericNode N2)
        {
            SpecificNode N2bis = (SpecificNode)N2;

            return(numero == N2bis.numero);
        }
Example #4
0
 public abstract double GetArcCost(GenericNode N2);
Example #5
0
 // Méthodes abstraites, donc à surcharger obligatoirement avec override dans une classe fille
 public abstract bool IsEqual(GenericNode N2);
Example #6
0
 public void SetNoeud_Parent(GenericNode g)
 {
     ParentNode = g;
     g.Enfants.Add(this);
 }
Example #7
0
        protected List <GenericNode> Enfants; // noeuds enfants

        public GenericNode()
        {
            ParentNode = null;
            Enfants    = new List <GenericNode>();
        }