Sudoku Problem Solve in C# | sudoku solver 9x9 in C#

 

In this article, we're going to look at Sudoku puzzle and algorithms used for solving it.

The Sudoku Puzzle

Simply put, Sudoku is a combinatorial number placement puzzle with 9 x 9 cell grid partially filled in with numbers from 1 to 9. The goal is to fill remaining, blank fields with the rest of numbers so that each row and column will have only one number of each kind.

What's more, every 3 x 3 subsection of the grid can't have any number duplicated as well. The level of difficulty naturally rises with the number of blank fields in each board.

 

Problem Board

8 . . . . . . . . 
. . 3 6 . . . . . 
. 7 . . 9 . 2 . . 
. 5 . . . 7 . . . 
. . . . 4 5 7 . . 
. . . 1 . . . 3 . 
. . 1 . . . . 6 8 
. . 8 5 . . . 1 . 
. 9 . . . . 4 . .
 
 Solved Board

And, to spoil the solution quickly – the correctly solved puzzle will give us the following result:

8 1 2 7 5 3 6 4 9 
9 4 3 6 8 2 1 7 5 
6 7 5 4 9 1 2 8 3 
1 5 4 2 3 7 8 9 6 
3 6 9 8 4 5 7 2 1 
2 8 7 1 6 9 5 3 4 
5 2 1 9 7 4 3 6 8 
4 3 8 5 2 6 9 1 7 
7 9 6 3 1 8 4 5 2

 

C# code

static void Main(string[] args)

        {

            var sudoku = new char[,]

    {

        { '8', '.', '.', '.', '.', '.', '.', '.', '.' },

        { '.', '.', '3', '6', '.', '.', '.', '.', '.' },

        { '.', '7', '.', '.', '9', '.', '2', '.', '.' },

        { '.', '5', '.', '.', '.', '7', '.', '.', '.' },

        { '.', '.', '.', '.', '4', '5', '7', '.', '.' },

        { '.', '.', '.', '1', '.', '.', '.', '3', '.' },

        { '.', '.', '1', '.', '.', '.', '.', '6', '8' },

        { '.', '.', '8', '5', '.', '.', '.', '1', '.' },

        { '.', '9', '.', '.', '.', '.', '4', '.', '.' }

    };

            solveSudoku(sudoku);

            Console.ReadLine();

        }

 

        public static void solveSudoku(char[,] sudokuBoard)

        {

            if (sudokuBoard == null || sudokuBoard.Length == 0)

                return;

            Problemsolver(sudokuBoard);

        }

        private static bool Problemsolver(char[,] sudokuBoard)

        {

            for (int i = 0; i < sudokuBoard.GetLength(0); i++)

            {

                for (int j = 0; j < sudokuBoard.GetLength(1); j++)

                {                 

 

                    if (sudokuBoard[i, j] == '.')

                    {

                        for (char c = '1'; c <= '9'; c++)

                        {

                            if (isValid(sudokuBoard, i, j, c))

                            {

                                sudokuBoard[i, j] = c;

                                

                                if (Problemsolver(sudokuBoard))

                                    return true;

                                else

                                    sudokuBoard[i, j] = '.';

                            }

                        }

                        return false;

                    }

                }

            }

            for (int i = 0; i < sudokuBoard.GetLength(0); i++)

            {

                for (int j = 0; j < sudokuBoard.GetLength(1); j++)

                {

                    Console.Write(sudokuBoard[i, j] + " ");

                }

                Console.Write(Environment.NewLine);

            }

 

            return true;

        }

        private static bool isValid(char[,] board, int row, int col, char c)

        {

            for (int i = 0; i < 9; i++)

            {

                //check row 

                if (board[i, col] != '.' && board[i, col] == c)

                    return false;

                //check column 

                if (board[row, i] != '.' && board[row, i] == c)

                    return false;

                //check 3*3 block 

                if (board[3 * (row / 3) + i / 3, 3 * (col / 3) + i % 3] != '.' && board[3 * (row / 3) + i / 3, 3 * (col / 3) + i % 3] == c)

                    return false;

            }

            return true;

        }


Output





Share this

Related Posts

Previous
Next Post »

2 comments

Write comments
Anonymous
February 2, 2022 at 4:49 PM delete

easy to understand, good job cheers!

Reply
avatar
Anonymous
February 4, 2022 at 6:53 PM delete

It's really nice.

Reply
avatar