繁体   English   中英

Java:数独数组未填充

[英]Java: Sudoku Array not Filling

我一直在尝试构建一个数独,从一个 9x9 数组开始,以确保给定列和行中的数字都不相同(即没有 3x3 框的数独)。 我已经设置了如下所示的代码,但我一直遇到运行时错误,我认为这是由于数组无法完成填充的 do-while 语句造成的。 但是,如果我将 10 添加到新的随机数(在 do-while 语句中),则数组将完成填充。 我还创建了一个冗长的“检查”方法,用于检查当前单元格是否与该列或行中的任何其他单元格相同,并且仅当数字为原始单元格时才返回 true。 为简单起见,我没有包含该方法。 有什么我想念的吗?

import java.util.Random;

public class S9x9 {

    public static void main (String[] args){
        int [][] nines = new int [9][9];
        Random rand = new Random();

        for (int i = 0; i < nines.length; i++) {
            for (int j = 0; j < nines.length; j++) {
                nines[i][j] = rand.nextInt(9) + 1;
                if (!(check(nines,i,j))) {
                    do
                        nines[i][j] = rand.nextInt(9) + 1;
                    while (!(check(nines, i, j)));
                }
                System.out.print(nines[i][j] + " ");
            }
            System.out.print("\n");
        }
    }
}

你的算法很快就会陷入僵局。 假设你有这个:

5 2 3 1 8 6 9 7 4 
4 3 1 6 9 2 5 8 7 
2 1 6 7 3 5 8 9 

没有有效的数字可以放在最后一个位置。 我建议您在使用随机生成之前更改您的算法以清除所有无效数字。 如果候选人为零,则必须回溯。

问题是当您不使用任何回溯算法来寻找数独解决方案时,您可能会陷入僵局。 假设您的两个for()循环已经找到以下网格:

xxx xxx x1x
xxx xxx x2x
xxx xxx x3x

xxx xxx x4x
567 891 2?.
... ... ...

... ... ...
... ... ...
... ... ...

有的地方? 当前ij值所在的标记不能有任何有效数字,因为所有数字都已“使用”。 检查其他问题,例如如何通过回溯和递归解决数独? 关于数独如何回溯。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM