2015-04-03 4 views
1

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

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

В вашем случае, если вы снимите назначая таблицу вне для цикла, который предотвращает код от возвратов.

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