0
我想實現一個數獨求解器,適用於任何方形尺寸的板子(4x4,9x9,16x6等)。這就是我目前對我的算法所具有的,但是一旦運行,沒有值最終會被存儲改變和theGrid是一樣的解決運行之前。
我真的不知道它出了什麼地方,任何幫助表示讚賞。數獨求解器不改變值
private int[][] theGrid;
private int emptyValue = -1;
public int[][] solve() {
recSolve(0, 0);
return theGrid;
}
void recSolve(int i, int j) {
int size = theGrid.length;
if (i == size) {
i = 0;
if (++j == size)
return;
//done
}
if (theGrid[i][j] != emptyValue) // skip filled cells
recSolve(i+1,j);
for (int val = 1; val <= size; ++val) {
if (!isPresent(theGrid, i, j, val)) {
theGrid[i][j] = val;
recSolve(i+1,j)
}
}
theGrid[i][j] = emptyValue; // reset on backtrack
}
boolean isPresent(int[][] grid, int row, int col, int num){
for(int i = 0; i < theGrid.length; i++){
if(theGrid[i][col] == num) return false;
if(theGrid[row][i] == num) return false;
}
int side = (int)Math.sqrt(theGrid.length);
int rowStart = row - row % side;
int colStart = col - col % side;
for(int m = 0; m < side; m++){
for(int k = 0; k < side; k++){
if(grid[rowStart + k][colStart + m] == num) return false;
}
}
return true;
}
你真的在某處調用函數嗎? – Carcigenicate
你實際上是在什麼地方初始化'theGrid'嗎? –
你可以粘貼這個整個文件的代碼,我們很容易理解代碼流 – zenwraight