コード例 #1
0
ファイル: Solver.cs プロジェクト: eleonoreW/SudokuSolver
        /// <summary>
        /// Fonction à appeller pour résoudre un Sudoku
        /// </summary>
        /// <returns>La grille correspondant au Sudoku résolu ou null si le sudoku n'est pas résolvable.</returns>
        public int[,] Solve()
        {
            if (AC3(cspDepart))
            {
                if (EstValide(cspDepart))
                {
                    return(Solver.CspToGrille(cspDepart, taille));
                }
                else
                {
                    Dictionary <Tuple <int, int>, List <int> > cspResultat = Backtracking_search();

                    return(Solver.CspToGrille(cspResultat, taille));
                }
            }
            else
            {
                Console.WriteLine("Grille impossible à résoudre");
                return(null);
            }
        }
コード例 #2
0
        static void Main(string[] args)
        {
            // Recuperation des lignes du fichier d'entree
            string[] inputLines = File.ReadAllLines("Input.txt");

            // Taille de la grille à la ligne 0
            int gridSize = int.Parse(inputLines[0]);

            int[,] grid = new int[gridSize, gridSize];

            // Remplissage de la grille à partir des donnees
            int dataLinesLength = inputLines.Length - 1;

            if (dataLinesLength == gridSize)
            {
                for (int i = 0; i < gridSize; i++)
                {
                    // Donnees de la grille dans les lignes suivantes
                    string[] data = inputLines[i + 1].Split(',');
                    if (data.Length == gridSize)
                    {
                        int j = 0;
                        foreach (string value in data)
                        {
                            grid[i, j] = int.Parse(value);
                            j++;
                        }
                    }
                    else
                    {
                        // Nb colones != taille
                        Console.WriteLine("Nombre de donnees en colonnes (" + data.Length + ") different de la taille de la grille (" + gridSize + ") \n");
                        End();
                        return;
                    }
                }
            }
            else
            {
                // Nb lignes != taille
                Console.WriteLine("Nombre de donnees en lignes (" + dataLinesLength + ") different de la taille de la grille (" + gridSize + ") \n");
                End();
                return;
            }

            Sudoku sudoku = new Sudoku(gridSize);

            sudoku.grid = grid;


            Solver solveur = new Solver(sudoku);

            Console.WriteLine(Sudoku.GridToString(Solver.CspToGrille(solveur.cspDepart, solveur.taille), solveur.taille) + "\n");
            Console.WriteLine(Sudoku.GridToString(solveur.Solve(), solveur.taille) + "\n");
            End();


            void End()
            {
                Console.WriteLine("Appuyer sur une touche pour quitter ..." + "\n");
                Console.ReadKey();
            }
        }