Судоку

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

    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;
}

Будет ли этот алгоритм отступать? Если нет, то почему?


person user4740600    schedule 03.04.2015    source источник


Ответы (1)


Это похоже на логическую ошибку, и поэтому eclipse ничего не сообщает.

В разделе цикла for вашего кода у вас должно быть что-то вроде этого

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

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

person smadhava    schedule 07.05.2015