gpt4 book ai didi

java - 数独解法

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:30:33 24 4
gpt4 key购买 nike

我的数独解法有问题。该程序是这样工作的;开始时棋盘是空的,用户在棋盘上添加几个数字,然后点击“求解”按钮,程序会尝试求解。除了将相同的数字放在同一行之外,一切正常。因此,如果用户添加 1,1,0,0 ... 0。在拼图中,它无法解决它,因为它的两个 1 彼此相邻,并且将永远继续尝试找到一个 sulotion,即使它无法解决谜。但是,如果它们都是 0(空),它会立即解决它,就像我将 1 和 2 放在左上角一样。如果我只是在其中放入一些随机数,它将检测到它无法解决(或者如果它是一个有效的谜题,它将解决它)

我在想这句话,当 theNumber == (row, col) 等于 thenNumber == (row+1, col) 时,它应该 返回 false 因为它是一个重复的数字。

这是我尝试在 solve 方法中添加的代码,显然没有成功。

if ((puzzle.getNum(row, col) == a) == (puzzle.getNum(row + 1, col) == a)) {
return false;
}

非常感谢帮助

最佳答案

像这样验证拼图:

  1. 创建一个包含 9 个元素的 boolean 数组。
  2. 遍历每一行、每一列和 9x9 框。
    • 如果读取的是数字,则将数组中对应的值设置为true。
    • 如果它已经为真,则抛出一个错误(不可能的谜题)。
    • 读取一行、一列或 9x9 框后重置 boolean 数组。
  3. 然后,如果验证成功,调用求解方法。

编辑:源代码

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

没有太多时间进行测试,但它可能有效(?)。行/列变量命名可能不正确,因为我没有时间在您的代码中找到它,但它是否工作应该无关紧要。

关于java - 数独解法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15552756/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com