Я написал решатель Судоку, и он отлично работает, когда судоку разрешима. Однако, когда судоку неразрешима, он изменяет исходные номера головоломки при возврате назад.Судоку решил найти решение для неразрешимой судоку
bool Sudoku::solve(int row, int col){
if (board[row][col] != 0){
int next_col = col;
int next_row = row;
next_col++;
if (next_col > 8){
next_row++;
next_col = 0;
}
if (next_row > 8){
return true;
} else {
if (solve(next_row, next_col))
return true;
}
}
for (int number = 1; number <= 9; number++){
board[row][col] = number;
if (check_row(row, number)
&& check_col(col, number)
&& check_box(row, col, number)){
int next_row = row;
int next_col = col+1;
if (next_col > 8){
next_col = 0;
next_row++;
}
if (next_row > 8){
return true;
}
if (solve(next_row, next_col))
return true;
}
}
board[row][col] = 0;
return false;
}
плата является 2D целочисленный массив. Я знаю, что я мог бы использовать какую-то структуру вместо целого, которая будет хранить, если номер был изначально там или нет, однако это решение не очень привлекательно для меня. Есть ли другой путь ?
Он пытается сделать его решаемым ... –
Спонтанный ИИ? Потрясающие. Вы должны, вероятно, сразу же запастись этим. :-) –