java – 数独求解方法

我的数独求解方法有问题.该计划的工作方式如下;当电路板启动时,它是空的,用户在电路板上添加了几个数字,然后通过点击Solve按钮,程序试图解决它.如果我将相同的数字放在同一行中,一切正常.因此,如果用户添加1,1,0 … 0.在拼图中它无法解决它,因为它的两个1彼此相邻并将继续尝试找到一个沉闷,即使它是无法解决的难题.但是如果它们都是0(空)它会立即解决它,就像Id在左上角放置1和2一样.如果我只是在其中放入一些随机数将检测到它无法解决(或者如果它是一个有效的谜题将解决它)

我正在考虑说,当theNumber ==(row,col)等于thenNumber ==(第1行,col)时,它应该返回false,因为它是一个重复的数字.

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

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

非常感谢帮助

解决方法

像这样验证拼图:

>创建一个包含9个元素的布尔数组.
>遍历每一行,每列和9×9框.

>如果读取数字,请将数组中的相应值设置为true.
>如果它已经是真的抛出一个错误(不可能的谜题).
>读取行,列或9×9框后重置布尔数组.

>然后,如果验证成功,则调用求解方法.

编辑:源代码

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


eclipse如何打jar包
eclipse如何查看源码
如何评价java框架的质量?
Spring MVC 和 Spring Security 有何区别?
eclipse如何运行java代码
eclipse的jdk如何配置
eclipse如何部署web项目
如何使用eclipse编程
eclipse如何导入svn项目
eclipse如何打开项目
eclipse如何添加svn
java中用于日志记录的框架有哪些?
eclipse如何更改jdk
如何在eclipse中配置svn
eclipse如何添加sdk
java框架中如何实现高并发?
eclipse如何配置python
java框架有哪些用于人工智能和机器学习的类型?
eclipse如何配置git
eclipse如何添加jdk