Судоку
Ниже мой метод решения. Когда я вызываю его в своем основном методе, ничего не происходит, и все последующие операции не выполняются, но затмение не сообщает об ошибке.
public boolean solve(int r, int c){
if(c>8){
c=0;
r++;
}
if(r>8){
return true;
}
while(table[r][c].value!=0){
c++;
if(c>8){
c=-0;
r++;
}
if(r>8){
return true;
}
}
for(int k=1;k<10;k++){
if(table[r][c].checkRow(k)&&table[r][c].checkCol(k)&&table[r][c].checkCube(k)){
table[r][c].value=k;
solve(r,c);
}
}
table[r][c].value=0;
return false;
}
Будет ли этот алгоритм возвращаться назад? Если нет, то почему?
1 ответ
Это выглядит как логическая ошибка и, следовательно, затмение ничего не сообщает.
В разделе цикла вашего кода вы должны иметь что-то вроде этого
for(int k=1;k<10;k++){
if(table[r][c].checkRow(k)&&table[r][c].checkCol(k)&&table[r][c].checkCube(k)){
table[r][c].value=k;
if(solve(r,c)){
return true;
}
table[r][c].value=0;
}
}
В вашем случае вы отменяете таблицу вне цикла for, что предотвращает возврат кода.
Вот мой код для решения судоку. Надеюсь, поможет.