【发布时间】: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