数独是什么,就不解释了。
下面给出一个数独的截图

class SudokuInstance{
SudokuCell[][] cells;
public SudokuInstance(int[][] sudoku){
init(sudoku);
}
void init(int[][] sudoku){
initCells(sudoku);
adjustCells();
}
void initCells(int[][] sudoku){
cells = new SudokuCell[9][9];
for(int i=0;i<sudoku.length;i++){
for(int j=0;j<sudoku.length;j++){
if(sudoku[i][j] == 0){
cells[i][j] = new SudokuCell(i,j,sudoku[i][j]);
}else{
cells[i][j] = new SudokuCell(i,j);
}
}
}
void adjustCells(){
//1. reduceCandidates
//2. checkFamliyUnique()
}
}
public static class SudokuCell{
private int x;
private int y;
private List<Integer> candidates;
private int val;
private SudokuFamliy famliy;
public SudokuCell(int x,int y, int val){
this.x=x;
this.y=y;
this.val=val;
this.candidates=new LinkedList<>();
this.famliy = SudokuFamliy.vauleOf(x,y);
}
public SudokuCell(int x,int y, int val){
this.x=x;
this.y=y;
this.candidates=new LinkedList<>();
for(int i=1;i<10;i++){
this.candidates.add(i);
}
this.famliy = SudokuFamliy.vauleOf(x,y);
}
}
}
模型定义好以后,后续主要是调整堆栈。以及剪枝策略。
剪枝策略是选出候选最少的进行枚举。
原文:http://www.cnblogs.com/lykm02/p/5177809.html