示例#1
0
        static void Main(string[] args)
        {
            var    newBoard    = SudokuBoard.Load(@"C:\Users\ctewalt\Documents\Visual Studio 2013\Projects\Sudoku\csv\sudoku_2_001.csv");
            string boardString = newBoard.GetBoard();

            Console.WriteLine(boardString);

            var solver = new SudokuSolver(newBoard);

            bool solved = solver.Solve();

            if (solved)
            {
                Console.WriteLine("Sudoku puzzle solved!");
            }
            else
            {
                Console.WriteLine("Unable to solve puzzle... :(");
            }
            Console.ReadKey();
            Console.WriteLine(Environment.NewLine + Environment.NewLine);
            for (int i = 0; i < solver.Board.Cells.Count; i++)
            {
                var    cell          = solver.Board.Cells[i];
                bool   hasCandidates = cell.Candidates.Count > 0;
                string candidates    = hasCandidates ? cell.Candidates.Select(c => c.ToString()).Aggregate((a, b) => a + "," + b): "";
                Console.WriteLine(String.Format("Cell {0}): candidates - {1}", i, candidates));
                Console.ReadKey();
            }


            Console.ReadKey();
        }
示例#2
0
        private void SolveSudoku()
        {
            grid.ClearUserCells();

            SudokuSolver solver = new SudokuSolver(grid);

            solver.Solve();
            RefreshCellValues();
        }
示例#3
0
        private void SolveSudoku()
        {
            //Clear user input
            grid.ClearUserCells();

            //Init solver and do magic
            SudokuSolver solver = new SudokuSolver(grid);

            solver.Solve();
            RefreshCellValues();
        }
示例#4
0
        static void Main()
        {
            var SudokuSolver = new SudokuSolver();
            var board        = GetBoard(Boards.HardMetro);

            PrettyPrinter.PrettyPrint(board);
            var solvedBoard = SudokuSolver.Solve(board, _debug);

            PrettyPrinter.PrettyPrint(solvedBoard);
            Console.WriteLine(IsSolved(solvedBoard));
            Console.ReadKey();
        }
示例#5
0
        static void Main(string[] args)
        {
            FillBoard();

            SudokuSolver solver = new SudokuSolver(board);

            Console.WriteLine(board);
            solver.Solve();
            Console.WriteLine(board);

            Console.ReadKey();
        }
示例#6
0
        public static void Main(string[] args)
        {
            var stopWatch = new Stopwatch();

            stopWatch.Start();

            var sudoku     = new Sudoku("./input.txt");
            var visualiser = new SudokuVisualiser(sudoku);
            var solver     = new SudokuSolver(sudoku, visualiser);

            solver.Solve();

            stopWatch.Stop();
            Console.WriteLine($"Finished in {stopWatch.Elapsed}");
        }
示例#7
0
        static void Main(string[] args)
        {
            var boardMaster = new SudokuSolver();

            //  var board = boardMaster.SetBoard();
            var board = boardMaster.ReadBoardFromFile();

            var result = boardMaster.Solve(board);

            foreach (var salution in result)
            {
                boardMaster.Print(salution);
                Console.WriteLine(new string('-', 17));
            }

            if (result.Count() > 1)
            {
                Console.WriteLine("Salutions count: " + result.Count());
            }
            else if (result.Count() == 0)
            {
                Console.WriteLine("No solution possible!");
            }
        }
示例#8
0
        public static void Main(string[] args)
        {
            bool verbose = false;

            if (args.Length > 0)
            {
                verbose = args[0].Equals("v");
            }
            int i = 0;

            int[][] matrix = new int[9][];
            while (i < 9)
            {
                string   s    = Console.ReadLine();
                string[] line = s.Split(' ');
                if (line.Length == 9)
                {
                    int[] intArr = new int[9];
                    for (int j = 0; j < 9; j++)
                    {
                        int x = int.Parse(line[j]);
                        intArr[j] = x;
                    }
                    //sud.AddRow(intArr);
                    matrix[i] = intArr;
                    i++;
                }
                else
                {
                    //invalid, please retype
                    Console.WriteLine("invalid line, please retype");
                    continue;
                }
            }
            Console.WriteLine();
            PrintMatrix(matrix);

            DateTime startTime = DateTime.Now;

            Console.WriteLine("Started: {0}", startTime);

            //SudokuSolver_old solver = new SudokuSolver_old(sud);
            //solver.Iterate(false);
            SudokuSolver solver = new SudokuSolver(matrix, verbose);

            solver.Solve();


            DateTime stopTime = DateTime.Now;

            Console.WriteLine("Stopped: {0}", stopTime);
            Console.WriteLine("solution generated: {0}", solver.possibleSolutions.Count);
            Console.WriteLine("backtracks: {0}", solver.deadendCount);

            foreach (int[][] solution in solver.possibleSolutions)
            {
                PrintMatrix(solution);
            }
            Console.WriteLine();


            TimeSpan elapsedTime = stopTime - startTime;

            Console.WriteLine("Elapsed: {0}", elapsedTime);
            Console.WriteLine("in hours       :" + elapsedTime.TotalHours);
            Console.WriteLine("in minutes     :" + elapsedTime.TotalMinutes);
            Console.WriteLine("in seconds     :" + elapsedTime.TotalSeconds);
            Console.WriteLine("in milliseconds:" + elapsedTime.TotalMilliseconds);
        }
示例#9
0
        private bool DeleteField(Sudoku temp, ref int difficulty)
        {
            int i = Rnd.Next(0, 9); ;
            int j = Rnd.Next(0, 9); ;

            // select random not yet deleted field
            while (!temp.Fields[i][j].Filled)
            {
                i = Rnd.Next(0, 9);
                j = Rnd.Next(0, 9);
            }

            temp.Fields[i][j].Value = 0;
            temp.Fields[i][j].Filled = false;
            SudokuSolver Test = new SudokuSolver();
            int Difficulty = difficulty;
            // check the desired characteristics
            Sudoku Temp = Test.Solve(temp.Copy(), true, Difficulty);
            if (Temp == null)
                return false;
            temp.Difficulty = Temp.Difficulty;
            if (Temp.NrSolutions > 1 || Temp.Difficulty > Difficulty)
                return false;
            else
                return true;
        }
示例#10
0
 public Boolean sePuedeResolver(Sudoku ToBeSolved)
 {
     SudokuSolver Solver = new SudokuSolver();
     Sudoku Result = Solver.Solve(ToBeSolved, false, 4);
     if (Result != null)
         return true;
     else
         return false;
 }
示例#11
0
 public Sudoku Resolver(Sudoku ToBeSolved)
 {
     SudokuSolver Solver = new SudokuSolver();
     Sudoku Result = Solver.Solve(ToBeSolved, false, 4);
     return Result;
 }
示例#12
0
 private void SolverToolStripMenuItem_Click(object sender, EventArgs e)
 {
     DialogResult EstaSeguro = MessageBox.Show("Esta seguro que desea resolver el sudoku actual? No podra terminarlo una vez haya confirmado."
         , "Resolver Sudoku?", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
     if (EstaSeguro == DialogResult.Yes)
     {
         Sudoku ToBeSolved;
         List<int> Fields = new List<int>();
         for (int i = 0; i < 9; i++)
         {
             for (int j = 0; j < 9; j++)
             {
                 if (Texts[i][j].Text == "")
                     Fields.Add(0);
                 else
                     Fields.Add(int.Parse(Texts[i][j].Text));
             }
         }
         ToBeSolved = new Sudoku(Fields);
         SudokuSolver Solver = new SudokuSolver();
         Sudoku Result = Solver.Solve(ToBeSolved, false, 4);
         Resolviendo = true;
         Display(Result);
         Resolviendo = false;
         SolverToolStripMenuItem.Enabled = false;
     }
     else
     {
         MessageBox.Show("Adelante no te desesperes, todavia se puede!", "Tu puedes", MessageBoxButtons.OK, MessageBoxIcon.Information);
     }
 }
示例#13
0
        private void SolveSudoku()
        {
            //Clear user input
            grid.ClearUserCells();

            //Init solver and do magic
            SudokuSolver solver = new SudokuSolver(grid);
            solver.Solve();
            RefreshCellValues();
        }