数独是什么,就不解释了。
下面给出一个数独的截图
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