我在将2D阵列分成多个盒子时遇到了麻烦,就像在Sudoku中一样。我的电路板对象中有一个正方形阵列,我想将它们分成2x3或3x3的盒子,盒子对象有一维数组来跟踪正方形。
k是箱号,在9x9数独中,箱子的编号为0到8。
int l = 0;
for(int i=k*a; i<k*a+a;i++){
for(int j=k*b;j<k*b+b;j++){
narray[l]=brd.getSquare(i,j);
brd.getSquare(i,j).setBox(this);
l++;
}
这会让第一个框正确,但在此之后就会消失。我几个小时以来一直在考虑这个问题,而我似乎无法绕过它。有没有人有这个巧妙的伎俩?
答案 0 :(得分:1)
所以,我假设这些方框的编号如下:
012
345
678
(每个盒子由3x3个细胞组成)
如果i
和j
是x和y坐标,则需要将上述内容转换为坐标。类似的东西:
0 1 2 3 4 5 6 7 8
x 0 1 2 0 1 2 0 1 2
y 0 0 0 1 1 1 2 2 2
所以x = k%3
和y = k/3
。
在实际网格中,x和y必须从0,3和6开始,而不是从0,1和2开始,所以只需乘以3。
所以这样的事情应该这样做:(根据哪个坐标是x而哪个是y来改变)
int size = 3;
int l = 0;
for(int i = 0; i < size; i++){
for(int j = 0; j < size; j++){
int x = i + k % size * size;
int y = j + k / size * size;
narray[l] = brd.getSquare(x, y);
brd.getSquare(x, y).setBox(this);
l++;
}
}
答案 1 :(得分:0)
如果要使用单个数字索引2D数组,请使用mod / divide函数。
row = index / row_size;
col = index % col_size;
您的索引应该在0到(row_size * col_size -1)
的范围内答案 2 :(得分:0)
所以听起来你只想获得方框和行列。
int boxsize = 3;
int h = 9; //height
inh w = 9; //width
for (int r =0;r<h;r++){
for (int c=0;c<w;c++){
int br = r/boxsize;
int bc = c/boxsize;
int index = br*h + c;
narray[index]=brd.getSquare(br,bc);
System.out.println("box row =" + br +" box column =" + bc);
}
}