Code
We are happy to give you the code used for solving Sudoku. It's written is Java and it'is quiet simple. You may start by the class call Solver and follow the path.
You can reuse the code and consider it as in lgpl.
Solver.java Grid.java SolvingGrid.java Cell.java CellDecision.java GridUtils.java
package com.asksudoku.logic;
import java.util.ArrayList;
import java.util.List;
public class Solver {
public List<Grid> solve(Grid grid, int maxResult){
List result = new ArrayList();
SolvingGrid solvingGrid = new SolvingGrid(grid);
List<SolvingGrid> solvingResults = new ArrayList();
solve(solvingGrid, 1, solvingResults, 10);
for (SolvingGrid solvingResult : solvingResults) {
Grid resultGrid = solvingResult.getGrid();
resultGrid.copyInputCell(grid);
result.add(resultGrid);
}
return result;
}
public List<Integer> solveCell(Grid grid, Cell cell){
grid = (Grid)grid.clone();
int x = cell.getX();
int y = cell.getY();
List result = new ArrayList();
if (grid.getGrid()[x][y] != 0){
result.add(grid.getGrid()[x][y]);
return result;
}
for (int i = 1; i <= 9; i++) {
grid.getGrid()[x][y] = i;
if (solve(grid,1).size() != 0){
result.add(i);
}
}
return result;
}
private void solve(SolvingGrid grid, int depth, List<SolvingGrid> result, int maxResult) {
CellDecision decisions = grid.selectBestDecisions();
for (Integer value : decisions.getValues()) {
SolvingGrid cloned = (SolvingGrid)grid.clone();
cloned.applyValue(decisions.getX(), decisions.getY(), value);
if (cloned.isValid()) {
if (result.size() >= maxResult) return;
if (cloned.isComplete() ){
result.add(cloned);
return;
}
solve(cloned, depth+1, result, maxResult);
}
}
}
}



