Beispiel #1
0
        static void Main(string[] args)
        {
            var game = new Sudoku("000050000906000307000409000010000050200607001040000090000701000709000206000030000");

            //var game = new Sudoku("003020600900305001001806400008102900700000008006708200002609500800203009005010300");
            game.Solve();
            if (game.IsGameSolved)
            {
                Console.WriteLine(game.BoardAsText);
            }
            else
            {
                Console.WriteLine("Kunde inte lösa spelet");
            }
            Console.ReadLine();
        }
Beispiel #2
0
        /// <summary>
        /// Löser hela sudokun
        /// </summary>
        public bool Solve()
        {
            int  Row = 0;
            int  Col = 0;
            bool runProgram;

            //Håller koll på vilken rad vi är i arrayen
            do
            {
                runProgram = false;
                for (int row = 0; row < 9; row++)
                {
                    //håller koll på vilken col vi är på
                    for (int col = 0; col < 9; col++)
                    {
                        int rowChecker = row;
                        int colChecker = col;

                        // Kollar om det är en nolla på cell platsen
                        if (sudokuArray[row, col] == 0)
                        {
                            AddNumbersToArray();
                            //kollar varje cell i raden
                            for (int col2 = 0; col2 < 9; col2++)
                            {
                                if (numbers.Contains(sudokuArray[row, col2]))
                                {
                                    numbers.Remove(sudokuArray[row, col2]);
                                }
                            }
                            //kollar varje col cell
                            for (int row2 = 0; row2 < 9; row2++)
                            {
                                if (numbers.Contains(sudokuArray[row2, col]))
                                {
                                    numbers.Remove(sudokuArray[row2, col]);
                                }
                            }
                            //kollar boxen col
                            while (colChecker % 3 != 0)
                            {
                                colChecker--;
                            }
                            while (rowChecker % 3 != 0)
                            {
                                rowChecker--;
                            }
                            for (int j = 0; j < 3; j++)
                            {
                                for (int i = 0; i < 3; i++)
                                {
                                    if (numbers.Contains(sudokuArray[rowChecker, colChecker]))
                                    {
                                        numbers.Remove(sudokuArray[rowChecker, colChecker]);
                                    }
                                    colChecker++;
                                }
                                colChecker = colChecker - 3; rowChecker++;
                                //För att skriva ut på skärmen steg för steg
                            }
                            //Kollar om det är en kvar i siffror för då är det den
                            if (numbers.Count == 1)
                            {
                                sudokuArray[row, col] = numbers[0];
                                runProgram            = true;
                            }
                            else if (numbers.Count == 0)
                            {
                                //Ifall spelet aldrig går att lösa
                                return(false);
                            }
                            else
                            {
                                Row = row;
                                Col = col;
                            }
                        }
                    }
                }
            } while (runProgram);

            if (!IsGameSolved)
            {
                List <int> recursiveValues = numbers.ToList();

                for (int i = 0; i < recursiveValues.Count; i++)
                {
                    sudokuArray[Row, Col] = recursiveValues[i];
                    Sudoku game     = new Sudoku(sudokuArray);
                    var    isSolved = game.Solve();

                    if (!isSolved)
                    {
                        continue;
                    }
                    else
                    {
                        sudokuArray = game.sudokuArray;
                        return(true);
                    }
                }
            }
            return(IsGameSolved);
        }