Судоку

Ниже мой метод решения. Когда я вызываю его в своем основном методе, ничего не происходит, и все последующие операции не выполняются, но затмение не сообщает об ошибке.

    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, что предотвращает возврат кода.

Вот мой код для решения судоку. Надеюсь, поможет.

Другие вопросы по тегам