В алгоритме все работает нормально, кроме метода решения.Когда он выполняет программу с помощью разрешимой платы Судоку, он говорит, что она не может быть решена.Я перепробовал все, что мог придумать в методе решенияЯ попробовал отладку, и она провалилась после первой проверки.Какие-либо предложения?Вот полный код:
public class SudokuSolver {</p>
<pre><code> public static void initializeGrid(int[][] grid, int[][] puzzle) {
for (int r = 0; r < puzzle.length; r++) {
for (int c = 0; c < puzzle[0].length; c++) {
grid [r][c] = puzzle [r][c];
}
}
}
public static void displayGrid(int[][] grid) {
for (int r = 0; r < grid.length; r++) {
if (r % 3 == 0) {
System.out.println("+---+---+---+");
}
for (int c = 0; c < grid[r].length; c++) {
if (c % 3 == 0) {
System.out.print("|");
}
displayDigits(r, c, grid);
} System.out.print ("|");System.out.println ();} System.out.println ("+ --- + --- + --- +");}
if (grid [r] [c] == 0) {System.out.print ('');} else {System.out.print (grid [r] [c]);}} public static int getEmptyCells (int [] [] grid, int [] [] emptyCells) {int i = 0;int numEmptyCells = 0;for (int r = 0; r
приватный статический логический hasNoDuplicates (int [] digitsList) {for (int j = 0; j
приватное статическое логическое checkCurrentRow (int [] [] grid, int currentRow) {
int [] digitsList = new int [grid.length];for (int c = 0; c
приватное статическое логическое checkCurrentCol (int [] [] grid, int currentCol) {int [] digitsList = new int [grid.length];for (int i = 0; i
приватный статический логический checkCurrentRegion (int [] [] grid, int currentRow, int currentCol) {
int [] digitsList = new int [grid.length];currentRow = (currentRow / 3) * 3;currentCol = (currentCol / 3) * 3;int i = 0;for (int r = 0; r <3; r ++) {for (int c = 0; c <3; c ++) {digitsList [i] = grid [currentRow + r] [currentCol + c];я ++;}} if (hasNoDuplicates (digitsList)) {return true;} вернуть ложь;} </p>
public static boolean isConsistent (int [] [] grid, int currentRow, int currentCol) {if (checkCurrentRow (grid, currentRow) && checkCurrentCol (grid, currentCol) && checkCurrentRegion (grid, currentRow, currentCol)) {верните истину;} вернуть ложь;}
public static boolean solvePuzzle (int [] [] grid, int [] [] emptyCells, int numEmptyCells) {int i = 0;int j = 0;int currentCellDigit = grid [emptyCells [i] [0]] [emptyCells [i] [1]];while (j
return true;
}
public static void main (String [] args) {
final int SIZE = 9;int [] [] puzzle = {{0,2,9,0,0,3,0,0,5}, {5,0,7,0,0,0,0,9,0}, {6, 0,0,0,0,9,4,2,0}, {3,0,2,0,0,4,0,0,0}, {0,0,5,0,3,0, 7,0,0}, {0,0,0,5,0,0,6,0,2}, {0,9,8,4,0,0,0,0,3}, {0, 3,0,0,0,0,1,0,6}, {2,0,0,3,0,0,9,4,0}};
int [] []grid = новый int [SIZE] [SIZE];int [] [] emptyCellsList = new int [SIZE * SIZE] [2];int numEmptyCells = 0;
initializeGrid (grid, puzzle);numEmptyCells = getEmptyCells (grid, emptyCellsList);System.out.println («Загадка:»);displayGrid (головоломка);if (solvePuzzle (grid, emptyCellsList, numEmptyCells)) {System.out.println ("было решено:");displayGrid (сетки);} else {System.out.println («не может быть решена!»);}}}