使用数独的精确覆盖矩阵,例如here,矩阵中的每一行都与数独网格中的位置(行,列)和一个值相关。
仅给出覆盖矩阵中的行数以及数独网格的大小(在这种情况下为9),用于确定该行所引用的行,列和值的算法是什么? (例如,第1行指的是第1行,第1列和值1,第12行指的是第1行,第2列,值3)
我用Java编写了此文件,但确实可以解决问题,但是我仍然好奇是否有任何方法可以不使用循环,而这似乎是一个纯粹可以用数学表达的问题。
private int[] rowInGrid(int puzzleSize, int matrixRow) {
// return the row, column and value correlating to a row in the cover matrix
int row = 0;
int col = 0;
int val = 0;
for (int i = 0; i < matrixRow; i++) {
val++;
if (val == puzzleSize) {
col++;
val = 0;
}
if (col == puzzleSize) {
row++;
col = 0;
}
}
return new int[]{row,col,val};
}
该函数采用拼图大小(宽度/高度/值的数量)和封面矩阵中的行号(例如0表示板的第一行和第一列中的第一个可能的值),并在董事会和价值。此函数全部为0索引。