示例#1
0
        private List <int> RecupO()
        {
            //Fonction qui récupère et retourne la liste des ouverts
            List <int> LO     = new List <int>();
            string     saisie = tB_ouvert.Text;
            Node2      N      = new Node2();

            if (saisie != "")
            {
                for (int i = 0; i < saisie.Length; i++)
                {
                    if (saisie[i] != ',')
                    {
                        LO.Add(Convert.ToInt32(saisie[i]) - 48);
                    }
                }
            }
            return(LO);
        }
示例#2
0
        private List <int> RecupF()
        {
            //Fonction qui récupère et renvoie la liste des fermés
            List <int> LF     = new List <int>();
            string     saisie = tB_Ferme.Text;
            Node2      N      = new Node2();

            if (saisie != "")
            {
                for (int i = 0; i < saisie.Length; i++)
                {
                    if (saisie[i] != ',')
                    {
                        LF.Add(Convert.ToInt32(saisie[i]) - 48);
                    }
                }
            }
            return(LF);
        }
示例#3
0
        public override double GetArcCost(GenericNode N2)
        {
            Node2 N2bis = (Node2)N2;

            return(FormDijkstra.matrice[numero, N2bis.numero]);
        }
示例#4
0
        //Evènements

        private void btn_ouvertFermeSuivant_Click(object sender, EventArgs e)
        {
            //Evenement pour amener à l'itération des listes des ouverts et fermés suivante
            if (iteration == 0)
            {
                N0.numero = numinitial - 48;
                L_Ouverts.Add(N0);
            }
            iteration++;
            lbl_iteration.Text = "Itération : " + Convert.ToString(iteration);
            N = L_Ouverts[0];

            if (L_Ouverts.Count != 0 && N.EndState() == false)
            {
                // tant que le noeud n'est pas terminal et que ouverts n'est pas vide
                // 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
                g.MAJSuccesseurs(N);
                // Inutile de retrier car les insertions ont été faites en respectant l'ordre
                // 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;
                }
            }
            List <int> LF = new List <int>();
            List <int> LO = new List <int>();

            LF = RecupF();
            LO = RecupO();
            bool boolLO = CompareList(L_Ouverts, LO);
            bool boolLF = CompareList(L_Fermes, LF);

            if (boolLO && boolLF)
            {
                ouvertFermes.Add(true);
            }
            else
            {
                ouvertFermes.Add(false);
            }

            if (N.EndState())
            {
                OuvertFerme = true;
                foreach (bool b in ouvertFermes)
                {
                    if (b == false)
                    {
                        OuvertFerme = false;
                    }
                }
                btn_ouvertFermeSuivant.Enabled = false;
                treeView1.Enabled      = true;
                btn_insertNode.Enabled = true;
                tB_treeView.Enabled    = true;
                g.GetSearchTreeVide(treeView1);
                originalTree = g.GetSearchTree();
            }
        }