【问题标题】:Java Sudoku Solver, does it work the same with different sudoku sizes?Java Sudoku Solver,它对不同的数独大小是否相同?
【发布时间】:2017-05-18 13:51:37
【问题描述】:

我有一个数独求解器,可以完美地与 9x9 数独配合使用。我也想让它与 9x6 数独和其他尺寸一起使用。是否可以只更改此功能?

您可以看到“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;

    }

【问题讨论】:

  • 我看不出一个数独谜题如何拥有与列不同的行数...
  • 数独谜题总是有 AxA 但从来没有 AxB 大小。您可以尝试 3x3、6x6、9x9、12x12、15x15、18x18 等
  • 嗯,你可以有各种shapes 来解决这样的数字难题。但后来我不会再称它为数独了......
  • 我从未见过 9x6 数独,但我不明白为什么 OP 不能对其进行管理和编写一些规则。
  • 要使其更具动态性,请尝试将 9 替换为 cells.length。您还需要一些方法来确定盒子的大小。

标签: java


【解决方案1】:

最原始的数独是 2x2 数独

1 2
2 1 

您有两个解决方案,每个数字都存在于每一行中,每个数字都存在于每一列中。

另一个例子是 3x2

1 2
2 3
3 1

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

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

因此没有解决方案是可能的,这不是数独。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-01
    • 2016-07-03
    • 2021-03-24
    • 2020-09-08
    • 2012-12-22
    • 1970-01-01
    相关资源
    最近更新 更多