您好,我正在使用Sudoku Checker来验证完成的电路板的解决方案是否正确。我目前很困惑如何在块内进行检查。现在我有一个布尔值如下
我在这里检查左上方的块(Block1)。我不确定要设置哪些参数以及如何成功运行两个for循环。
问题是我想检查浓缩为3x3正方形的2d数组的一部分,看看该区域中的整数是否不重复,只有1-9出现一次。我有类似的代码,我在其中编写了此代码,以检查行是否具有重复的整数和一列。
static boolean isBlock1Valid(int[][] sudokuBoard, int referenceRow, int referenceColumn)
{
for(int i =0; i<2;i++){
for(int j=0; j<2; j++){
if(sudokuBoard[i][j]==sudokuBoard[i][j])
return false;
}
}
return true;
}//end of isBlock1Valid
这是我用作制作块检查器的参考的行检查器
static boolean IsValidRow(int[][] sudokuBoard, int referenceRow, int width)
{
//Compare each value in the row to each other
for(int i = 0; i < width; i++)
{
for(int j = i+1; j < width; j++)
{
if(sudokuBoard[referenceRow][i] == sudokuBoard[referenceRow][j])
return false;
}
}
return true;
}
最佳答案
我不太确定要给定代码做什么。但是此方法将始终返回false。
如果要确保一个块中每个元素只有一个实例。那么一种解决方法就是拥有一种清单:
boolean[] seen = new boolean[9];
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
if (seen(sudokuBoard[referenceColumn+i][referenceRow+j])) return false;
else seen[sudokuBoard[referenceColumn+i][referenceRow+j]) = true;
return true;