Exemplo n.º 1
0
 public Search(CSP csp, Grille grille)
 {
     this.csp = csp;
     this.nbInitialVariableNonAssigne = this.csp.GetVariableNonAssigne().Count;
     this.grille = grille;
 }
Exemplo n.º 2
0
        static void Main(string[] args)
        {
            int    choix   = 0;
            String fichier = "";
            Grille g       = new Grille();
            Parser p       = new Parser("");

            Console.WriteLine("Bienvenue.\nVous êtes dans le Résolveur de Sudoku par CSP.");
            Console.WriteLine("Tout d'abord, veuillez sélectionner un sudoku.\n");

            do
            {
                Console.WriteLine("Vous avez le choix entre choisir un fichier qui contient le Sudoku (1) ou bien le rentrer dans la console (2).");
                try
                {
                    choix = int.Parse(Console.ReadLine());
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.StackTrace);
                    Console.WriteLine("Appuyez sur une touche pour quitter.");
                    Console.ReadKey();
                    return;
                }
            } while (choix != 1 && choix != 2);


            if (choix == 1)
            {
                Console.WriteLine("Veuillez-vous assurez que le fichier est situé dans le dossier du projet.\nVeuillez entrer le nom du fichier texte contenant le Sudoku (sans l'extension):");
                fichier = Console.ReadLine();
                p       = new Parser(String.Format("..//..//{0}.txt", fichier));
                p.Lecture();
            }
            else if (choix == 2)
            {
                p.Saisie();
            }

            g = p.GetGrille();


            Console.WriteLine("Voici la grille.");
            g.Affiche();

            GenerateurCB gcb = new GenerateurCB(g.GetCases());

            gcb.Generer();

            CSP csp = new CSP(p.GetVariables(), gcb.GetContraintes(), Grille.POSSIBILITE);

            Search s = new Search(csp, g);

            Func <Variable> firstUnassigned = new Func <Variable>(csp.GetFirstVariableNonAssigne);
            Func <Variable> mrv             = new Func <Variable>(s.MRV);
            Func <Variable> mrvdh           = new Func <Variable>(s.MRVSAndDH);

            Func <Variable, List <int> > lcv = new Func <Variable, List <int> >(s.LCV);

            Console.WriteLine("Nous allons maintenant choisir les différentes heuristiques.");

            do
            {
                Console.WriteLine("Voulez-vous utilisez AC-3 ? (Oui - 1, Non - 2)");
                try
                {
                    choix = int.Parse(Console.ReadLine());
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.StackTrace);
                    Console.WriteLine("Appuyez sur une touche pour quitter.");
                    Console.ReadKey();
                    return;
                }
            } while(choix != 1 && choix != 2);

            if (choix == 1)
            {
                s.AC3();
            }

            do
            {
                Console.WriteLine("Choissisez l'heuristique de variable que vous voulez utiliser :\n" +
                                  " - Premère variable non assignée (1)\n - Minimum Remaining Value (2)\n - Minimum Remaining Value + Degree Heuristique (3)");
                try
                {
                    choix = int.Parse(Console.ReadLine());
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.StackTrace);
                    Console.WriteLine("Appuyez sur une touche pour quitter.");
                    Console.ReadKey();
                    return;
                }
            } while (choix != 1 && choix != 2 && choix != 3);


            Func <Variable> hvb;

            switch (choix)
            {
            case (1):
                hvb = firstUnassigned;
                break;

            case (2):
                hvb = mrv;
                break;

            case (3):
                hvb = mrvdh;
                break;

            default:
                hvb = firstUnassigned;
                break;
            }

            do
            {
                Console.WriteLine("Voulez-vous utiliser Least Constraining Value ? (Oui - 1, Non - 2)");

                try
                {
                    choix = int.Parse(Console.ReadLine());
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.StackTrace);
                    Console.WriteLine("Appuyez sur une touche pour quitter.");
                    Console.ReadKey();
                    return;
                }
            } while (choix != 1 && choix != 2);


            Func <Variable, List <int> > hva = null;

            if (choix == 1)
            {
                hva = lcv;
            }

            Console.WriteLine("Tout est prêt.\nAppuyez sur une touche pour lancer la recherche.");
            Console.ReadKey();

            s.BacktrackingSearch(hvb, hva);

            Console.WriteLine("Appuyez sur une touche pour quitter.");
            Console.ReadKey();
        }