首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数独解法

数独解法
EN

Stack Overflow用户
提问于 2013-03-21 16:16:22
回答 1查看 1.2K关注 0票数 7

我的sudoku解题方法有问题。程序的工作方式是这样的:当启动时,板是空的,用户在板上添加几个数字,然后按下一个解题按钮,程序就会试图解决这个问题。除了把相同的号码放在同一行外,一切都很好。所以如果用户添加了1,1,0, 0 . 0。在这个谜题中,它不能解决它,因为它的两个1是相邻的,只是会永远地试图寻找一个润肤液,即使它是一个无法解决的谜题。但是,如果它们都是0(空的),它就会马上解决它,就像Id把1和2放在左上角一样。如果我在里面放了一些随机数,就会发现它是不可解的(或者如果它是一个有效的谜题,就会解决它)。

我在想,当theNumber == (row, col) equals thenNumber == (row+1, col)的时候,它应该是return false,因为它是一个重复的数字。

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

代码语言:javascript
复制
if ((puzzle.getNum(row, col) == a) == (puzzle.getNum(row + 1, col) == a)) {
   return false;
}

我们非常感谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2013-03-21 16:25:59

像下面这样验证这个谜题:

  1. 创建一个包含9个元素的布尔数组。
  2. 循环遍历每一行、每列和9x9框。
    • 如果读取一个数字,则将数组中的相应值设置为true。
    • 如果它已经是真的,抛出一个错误(不可能的谜题)。
    • 读取一行、列或9x9框后,重新设置布尔数组。

  1. 然后,如果验证成功,则调用解决方法。

编辑:源代码

代码语言:javascript
复制
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;
}

没有太多的时间来测试,但它可能有效(?)行/col变量名称可能是不正确的,因为我没有时间在您的代码中找到它,但是它的工作与否并不重要。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15552756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档