Rob*_*Rob 7 java recursion solver sudoku backtracking
我的数独求解方法存在问题.该计划的工作方式如下; 当电路板启动时,它是空的,用户在电路板上添加了几个数字,然后点击一个Solve按钮,程序试图解决它.如果我将相同的数字放在同一行中,一切正常.因此,如果用户添加1,1,0,0 ... 0.在拼图中它无法解决它,因为它的两个1彼此相邻并且将继续尝试找到一个沉闷,即使它是无法解决的难题.但是,如果它们都是0(空),它将立即解决它,就像Id在左上角放置1和2一样.如果我只是在其中放入一些随机数将检测到它无法解决(或者如果它是一个有效的谜题将解决它)
我正在考虑说什么theNumber == (row, col) equals thenNumber == (row+1, col),它应该return false是因为它是一个重复的数字.
这是我试图在solve方法中添加的代码,显然没有成功.
if ((puzzle.getNum(row, col) == a) == (puzzle.getNum(row + 1, col) == a)) {
return false;
}
Run Code Online (Sandbox Code Playgroud)
非常感谢帮助
像这样验证谜题:
编辑:源代码
public boolean checkPuzzle() {
boolean[] nums = new boolean[9];
for (int row = 0; row < panel.puzzleSize; row++) {
for (int cell = 0; cell < panel.puzzleSize; cell++) {
if (nums[puzzle[row][cell]]) return false;
nums[puzzle[row][cell]] = true;
}
nums = new boolean[9];
}
for (int col = 0; col < panel.puzzleSize; col++) {
for (int cell = 0; cell < panel.puzzleSize; cell++) {
if (nums[puzzle[cell][col]]) return false;
nums[puzzle[cell][col]] = true;
}
nums = new boolean[9];
}
for (int square = 0; square < panel.puzzleSize; square++) {
int squareCol = panel.squareSize * (square % panel.squareSize);
int squareRow = panel.squareSize * Math.floor(square / panel.squareSize);
for (int cell = 0; cell < panel.puzzleSize; cell++) {
int col = cell % panel.squareSize;
int row = Math.floor(cell / panel.squareSize);
if (nums[puzzle[squareCol + col][squareRow + row]]) return false;
nums[puzzle[squareCol + col][squareRow + row]] = true;
}
nums = new boolean[9];
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
没有太多时间进行测试,但它可能会起作用(?)。row/col 变量命名可能不正确,因为我没有时间在您的代码中找到它,但它是否工作并不重要。