2017-09-13 7 views
0

四角いサイズのボード(4x4,9x9,16x6など)で動作するsudokuソルバーを実装しようとしています。これは現在私のアルゴリズムにはありますが、変更され、theGridは解決が実行される前と同じです。
どこが間違っていて、何か助けに感謝しています。数独ソルバーの値が変更されない

private int[][] theGrid; 
private int emptyValue = -1; 

public int[][] solve() { 
    recSolve(0, 0); 
    return theGrid; 
} 


void recSolve(int i, int j) { 
    int size = theGrid.length; 
    if (i == size) { 
     i = 0; 
     if (++j == size) 
      return; 
      //done 
    } 
    if (theGrid[i][j] != emptyValue) // skip filled cells 
     recSolve(i+1,j); 

    for (int val = 1; val <= size; ++val) { 
     if (!isPresent(theGrid, i, j, val)) { 
      theGrid[i][j] = val; 
      recSolve(i+1,j) 
     } 
    } 
    theGrid[i][j] = emptyValue; // reset on backtrack 
} 

boolean isPresent(int[][] grid, int row, int col, int num){ 
    for(int i = 0; i < theGrid.length; i++){ 
     if(theGrid[i][col] == num) return false; 
     if(theGrid[row][i] == num) return false; 
    } 
    int side = (int)Math.sqrt(theGrid.length); 

    int rowStart = row - row % side; 
    int colStart = col - col % side; 

    for(int m = 0; m < side; m++){ 
     for(int k = 0; k < side; k++){ 
      if(grid[rowStart + k][colStart + m] == num) return false; 
     } 
    } 
    return true; 
} 
+1

あなたは実際にどこかの関数を呼び出していますか? – Carcigenicate

+0

実際に 'theGrid'をどこかで初期化していますか? –

+1

このファイル全体のコードを貼り付けることができますか?コードフローを理解するのは簡単です – zenwraight

答えて

0

私はデバッガを実行することをお勧めしますが間違いがあります。最初に、isPresentは、値が存在しないときにtrueを返します。これは、私が期待しているものとは反対です。

関連する問題