Java Sudoku Solver,它是否与不同的数独大小相同?

时间:2017-05-18 13:51:38

标签: java

我有一个完美适用于9x9 sudokus的数独求解器。我想让它与9x6 sudokus和其他尺寸一起工作。是否可以改变这个功能?

您可以看到“9”始终是硬编码的。所以我尝试将这些值更改为9和6,但结果在我的解决方案中只有0。

所以在我继续讨论这个之前,是否可以更改它以支持不同的网格尺寸而不改变功能?

    public boolean solve(int i, int j, int[][] cells) {

        if (i == 9) {
            i = 0;
            if (++j == 9) {
                return true;
            }
        }
        if (cells[i][j] != 0)
        {
            return solve(i + 1, j, cells);
        }

        for (int val = 1; val <= 9; ++val) {
            if (legal(i, j, val, cells)) {
                cells[i][j] = val;
                if (solve(i + 1, j, cells)) {
                    return true;
                }
            }
        }
        cells[i][j] = 0;
        return false;
    }

    public static boolean legal(int i, int j, int val, int[][] cells) {
        for (int k = 0; k < 9; ++k) // rij
        {
            if (val == cells[k][j]) {
                return false;
            }
        }

        for (int k = 0; k < 9; ++k) // kolom
        {
            if (val == cells[i][k]) {
                return false;
            }
        }

        int boxRowOffset = (i / 3) * 3;
        int boxColOffset = (j / 3) * 3;
        for (int k = 0; k < 3; ++k) // box
        {
            for (int m = 0; m < 3; ++m) {
                if (val == cells[boxRowOffset + k][boxColOffset + m]) {
                    return false;
                }
            }
        }

        return true;

    }

1 个答案:

答案 0 :(得分:1)

最原始的数独游戏是2x2数独游戏

1 2
2 1 

你有两个解决方案,每一行都有一个数字,每一列都有一个数字。

另一个例子是3x2

1 2
2 3
3 1

这是不可解决的,因为并非所有数字都出现在每一行中。

同样,9x6不会在每一行中都有每个数字。

因此无法解决问题,这不是数独。