示例#1
0
        public static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            DijkstraAForm form = new DijkstraAForm();

            Application.Run(form);
            //to get note --> form.note
        }
示例#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);
        }
示例#3
0
 public ProfBypassForm(DijkstraAForm form)
 {
     InitializeComponent();
     this.parentForm = form;
 }