# 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

Previous
Next Post »