我有一个sudoku解算器,与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;
}发布于 2017-05-18 14:43:13
最原始的sudoku是2x2 sudoku。
1 2
2 1 您有两个非常好的解决方案,每个数字都出现在每一行,每个数字都出现在每一列中。
另一个例子是3x2。
1 2
2 3
3 1这是不可解的,因为不是每一行都有所有的数字。
另外,9x6不会在每一行中都有所有的数字。
因此,没有解决方案是可能的,这不是一个sudoku。
https://stackoverflow.com/questions/44049666
复制相似问题