Click here to Skip to main content
15,881,559 members
Articles / Programming Languages / C#
Article

Sudoku Algorithm: Strategies to Avoid Backtracking

Rate me:
Please Sign up or sign in to vote.
3.88/5 (9 votes)
27 Jan 2008CPOL4 min read 134.6K   3.3K   33   24
A Sudoku algorithm with 4 deterministic strategies to avoid backtracking
Sudoku Solver Main App

Introduction

First of all, I must confess that I'm not a fan of Sudoku. However, after seeing my wife spend 5 to 10 minutes every day solving the daily puzzle in the newspaper, I try to understand her strategy. Several friends like this puzzle, but they spend much more time, so my wife has something! A week after, I share her advices to solve this puzzle with all of you, but in a language I understand... C#...

What is Sudoku?

As shown in the image above, Sudoku consists in 81 cells, distributed in a 9x9 matrix. This matrix is composed of 9 rows and 9 columns, each with 9 cells. Additionally, there are 9 groups of 3x3-matrixes (as shown above), that we call "squares" in this article. The idea is to write a digit between 1 and 9 in each cell, but the game has some rules:

  • You cannot write the same digit in two or more cells of the same row.
  • You cannot write the same digit in two or more cells of the same column.
  • You cannot write the same digit in two or more cells of the same "square"

Sudoku Strategies to Solve a Cell

The algorithm uses four strategies to determine a valid value for a cell in the Sudoku board. The strategies are the following:

  • Search for cells with a unique solution possible.
  • Search for rows with a unique cell for an specific digit.
  • Search for columns with a unique cell for an specific digit.
  • Search for "squares" with a unique cell for an specific digit.
  • Pick a value randomly from the available valid values for a cell.

This programs applies the 4 first strategies into a loop. This 4 strategies have proven to be sufficient to solve any Sudoku puzzle with one solution. In other words, if a Sudoku puzzle has only one solution, these 4 strategies are enough to find this solution.

If the Sudoku puzzle has more than one solution, the last strategy is needed: Pick a Random value for the cell.

Searching for Cells with a Unique Solution Possible

This strategy consists of finding the list of all the possible values for a cell that don't have a conflict with the current values of the other cells. This means that a cell has only one possible value according to the rules of the puzzle. This is an example:

Sudoku Unique Solution Cell

The grayed cell can only have one valid solution: 7. If you check, all the other values create a conflict with the cells with the red circles.

Searching for Rows, Columns and "Squares" with a Unique Cell for a Specific Digit

Each row must have all the digits between 1 and 9. This strategy consists of finding all the cells where each digit can be placed. If one of these values can only be placed into one cell in a specific row, then we have found a solution for that cell. This is an example:

Sudoku Row Solution Cell

The row marked can only host the value 2 in the grayed cell. All of the other cells in this row cannot have this value, because of the cells with the red circles. This concept can be applied as well for each column and "square" to find other solutions.

Details of the Application

The application shows in the main user interface a Sudoku board where you can place the initial values for the puzzle. If you don't write any initial value for any cell, the program will generate a random Sudoku board.

To solve the puzzle, the application applies the 4 deterministic strategies, in the same order as shown before. If any of those strategies produces a solution, then the first strategy will be run again, until the Sudoku board is solved. If the 4 strategies are applied, and no new solution for a cell is generated, and the Sudoku board is not complete, then this Sudoku has more than one solution, so we must use the random strategy.

First, we determinate which cell has the minimum of possible valid values. We do so, to avoid picking a random value to a cell with a high set of possible solutions, because this can cause cells with a short set of valid solutions to end up without any value. This is the strategy to avoid the need of a backtracking algorithm. After we pick a random value for the selected cell, we go back to execute the 4 basic strategies again. We do this until we have a valid solution for the board.

No Need for Backtracking?

As mentioned before, this application does not need a Backtracking Algorithm, because we don't depend only on random selections for the cells. And when the random strategy is needed, we pick a random value for the "more unfortunate cell", this is, the cell with the shortest set of valid values.

Solving Strategy Details

The application shows a detail of each strategy used, specifying the solved cell, and the selected value.

Sudoku Strategy Details

History

  • 27th January, 2008: First publication

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer (Senior)
Ecuador Ecuador
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
QuestionThis does not solve all unique sudokus Pin
Andrew Tristram11-Jan-13 9:59
Andrew Tristram11-Jan-13 9:59 
Generalmichael anwar Pin
Michael Azzar16-Feb-12 7:42
Michael Azzar16-Feb-12 7:42 
GeneralGood selution with great code Pin
Member 780973814-Apr-11 6:47
Member 780973814-Apr-11 6:47 
GeneralI'm not sure what you're talking about Pin
mwpowellnm7231-Mar-11 15:43
mwpowellnm7231-Mar-11 15:43 
GeneralMy vote of 3 Pin
Ercan Ozgonul4-Aug-10 21:30
Ercan Ozgonul4-Aug-10 21:30 
Generalproblem solving a grid Pin
Spirch24-Feb-09 11:24
Spirch24-Feb-09 11:24 
QuestionBitArray in SudokuSolver Pin
Member 394196628-Feb-08 7:46
Member 394196628-Feb-08 7:46 
GeneralRe: BitArray in SudokuSolver Pin
Member 394196628-Feb-08 8:08
Member 394196628-Feb-08 8:08 
GeneralMinimum Sudokus Pin
_cancer_28-Jan-08 9:18
_cancer_28-Jan-08 9:18 
GeneralRe: Minimum Sudokus Pin
PeterMoon28-Jan-08 10:36
PeterMoon28-Jan-08 10:36 
GeneralRe: Minimum Sudokus Pin
Philippe Mori17-Jul-11 15:05
Philippe Mori17-Jul-11 15:05 
GeneralSudoku's real problem Pin
Edward11128-Jan-08 8:14
Edward11128-Jan-08 8:14 
GeneralRe: Sudoku's real problem Pin
PeterMoon28-Jan-08 9:13
PeterMoon28-Jan-08 9:13 
If you click "Solve!" without specifying any digit, the application will generate a new Sudoku board.

If this is not what you meant, please explain more and maybe I can help! Smile | :)

Thanks for you comments.
GeneralRe: Sudoku's real problem Pin
Edward11128-Jan-08 12:51
Edward11128-Jan-08 12:51 
GeneralRe: Sudoku's real problem Pin
Syed Mehroz Alam28-Jan-08 19:00
Syed Mehroz Alam28-Jan-08 19:00 
GeneralRe: Sudoku's real problem Pin
Louwgi28-Jan-08 23:25
Louwgi28-Jan-08 23:25 
GeneralRe: Sudoku's real problem Pin
MartinXLord5-Feb-08 19:13
MartinXLord5-Feb-08 19:13 
GeneralRe: Sudoku's real problem Pin
Louwgi5-Feb-08 19:30
Louwgi5-Feb-08 19:30 
GeneralRe: Sudoku's real problem Pin
PeterMoon6-Feb-08 6:26
PeterMoon6-Feb-08 6:26 
GeneralRe: Sudoku's real problem Pin
languagedog14-Oct-09 8:31
languagedog14-Oct-09 8:31 
GeneralNice Solution but... [modified] Pin
megger8327-Jan-08 21:32
megger8327-Jan-08 21:32 
GeneralRe: Nice Solution but... Pin
PeterMoon28-Jan-08 4:02
PeterMoon28-Jan-08 4:02 
GeneralRe: Nice Solution but... Pin
MartinXLord5-Feb-08 19:25
MartinXLord5-Feb-08 19:25 
GeneralRe: Nice Solution but... Pin
PeterMoon6-Feb-08 6:20
PeterMoon6-Feb-08 6:20 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.