gpt4 book ai didi

java - 从给定的行(x)、列(y),找到 2D 9x9 数组的 3x3 子数组

转载 作者:行者123 更新时间:2023-11-30 03:28:12 25 4
gpt4 key购买 nike

所以我试图获取所有可以放入数独单个方 block 中的可能条目。我有一个 9x9 2D 数组,它进一步分为 3x3 子数组。我想编写一个方法,该方法在其参数中采用行和列组合,并返回可以在该特定位置进行的所有可能的条目。我的方法的前 2 个 for 循环获取指定的整行和整列中所有已存在的非零值,并将它们存储在一个数组中(alreadyInUse),这将在稍后阶段用于找出什么号码尚未使用。第三个 for 循环应该使用行、列组合找到特定的子数组并将其条目添加到已经在使用的数组中。

有没有办法使用给定的二维数组的行、列来查找子数组的行、列?

    // Method for calculating all possibilities at specific position
public int[] getPossibilities(int col, int row){
int [] possibilities;
int [] alreadyInUse = null;
int currentIndex = 0;
if(sudoku[row][col] != 0){
return new int[]{sudoku[col][row]};
}
else{
alreadyInUse = new int[26];
//Go into Row x and store all available numbers in an alreadyInUse
for(int i=0; i<sudoku.length; i++){
if(sudoku[row][i] !=0){
alreadyInUse[currentIndex] = sudoku[row][i];
currentIndex++;
}
}
for(int j=0; j<sudoku.length; j++){
if(sudoku[j][col] !=0){
alreadyInUse[currentIndex] = sudoku[j][col];
currentIndex++;
}
}
for(int k=...???

}
return possibilities;
}

最佳答案

可以使用模数来过滤掉子数组。例如,一种方法是使用表达式n - (n % 3)。例如,如果行是第 8 列(0 索引数组中的最后一列),则此表达式将返回 6。对于第 6 列,它将返回 6,但对于第 5 列,它将返回 3。

然后,一旦获得左上角的单元格,您就可以使用嵌套循环遍历所有 9 个单元格,一次三个。

相关代码如下:

int x_left = (row - (row % 3));
int y_top = (col - (col % 3));
for(int i=0; i<3; i++) {
for(int j=0; j<3; j++) {
if(sudoku[i + x_left][j + y_top] != 0) {
alreadyInUse[currentIndex] = sudoku[i + x_left][j + y_top];
currentIndex++;
}
}
}

关于java - 从给定的行(x)、列(y),找到 2D 9x9 数组的 3x3 子数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29681645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com