javaで数独をバックトラックでとくプログラムを作ろうとしています。
ここに質問の内容を詳しく書いてください。
(例)javaで数独を解くプログラムを作っています。
バックトラックを再帰で作っていると、解いている途中で止まってしまいます
プログラミング初心者です。とても困っているので教えていただければ幸いです。
発生している問題・エラーメッセージ
少し解いただけで停止してしまう。一列二列で解くのをやめてしまう。
該当のソースコード
java
1private boolean bruteForceSolve(int row, int col) { 2 //全てのセルへの入力が終了している場合にメソッドを閉じていく 3 if (row == 9) 4 return true; 5 6 7 // 注目したセルへ既に数字が入力されている場合に処理を次のセルへ移動する 8 if (!(checkEmptyCell(row,col))) { // 9 if (bruteForceSolve(col == 8 ? (row + 1): row, (col + 1)%9)) 10 return true; 11 } else { 12 Integer[] randoms = generateRandomNumbers(); 13 for (int i = 1; i <= 9; i++) { 14 // 行、列、3x3ボックス内に数字が重複しない場合に値を代入し、次のセルへ進む 15 if (!isContainedInRowColumn(row, col,randoms[i]) && 16 !isContainedIn3x3Box(row, col,randoms[i])) { 17 setCellValues(row, col,randoms[i]); 18 19 //次のマス(左から右へ、上から下へという順)に進む 20 if (cellValues[row][col] != 0) { 21 if ( bruteForceSolve(col == 8 ? (row + 1): row, (col + 1) % 9)) 22 return true; 23 } 24 //再帰 25 bruteForceSolve(row,col); 26 setCellValues(row,col,0); 27 } 28 } 29 } 30 return false; 31 }
試したこと
いろいろ調べたり、再帰について考えたりしましたが、初心者なのでなぜ問題が出るのかわからなかったです。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。