我有點卡住了數獨算法,我使用回溯編碼它,並遵循理論上的步驟,這應該工作,我試圖貶低它,但太難了(是的,它解決了一些數字和做事)Sudoku算法與回溯不返回任何解決方案
我粘貼代碼,我希望你能幫助我,我實在看不出是哪裏的問題......
public void backtracking(int row,int col){
if(row > 8){
System.out.println("Solution Found!!");
printSudoku();
}
if (m[row][col] != 0){
next(row, col);
}
else {
for(int i =1; i < n;i++)
if(row(row, i) && col(col, i)) {
m[row][col] =i;
next(row, col);
}
m[row][col] = 0;
}
}
public void next(int row, int col) {
if(col < 8)
backtracking(row, col + 1) ;
else
backtracking(row+ 1, 0) ;
}
public boolean region(int x, int y, int numReg) {
x = (x/3) * 3 ;
y = (y/3) * 3 ;
for(int r = 0; r < 3; r++)
for(int c = 0; c < 3; c++)
if(m[x+r][y+c] == numReg)
return false ;
return true ;
}
public boolean row(int x, int k){
for(int i =0; i < 9; i++)
if(m[x][i] == k)
return false;
return true;
}
public boolean col(int x, int k){
for(int i =0; i < 9; i++)
if(m[i][x] == k)
return false;
return true;
}
我中省略「printSudoku」方法,只是雙倍的,你知道。
你已經瞭解回溯與數獨,即questiions:這個問題(http://stackoverflow.com/questions/9959172/recursive-solution- to-sudoku-generator?rq = 1)[or this one](http://stackoverflow.com/questions/9404673/sudoku-solver-in-java-using-backtracking-and-recursion?rq=1)[even這一個](http://stackoverflow.com/questions/6432794/why-is-this-sudoku-backtracking-getting-stuck?rq=1) – icrovett 2013-04-22 17:05:33
我做到了,我的解決方案是基於這些問題,但它doesn沒有工作....我不只是爲了好玩而問:S – Santanor 2013-04-22 18:25:39