0

我在将二维数组分成盒子时遇到了麻烦,就像在数独中一样。我的棋盘对象中有一个正方形数组,我想将它们分成 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++;
    }

这使第一个盒子正确,但在那之后就消失了。我已经考虑了好几个小时了,我似乎无法解决这个问题。有没有人有一个巧妙的技巧?

4

3 回答 3

1

所以,我假设这些盒子的编号是这样的:

012
345
678

(每个盒子由 3x3 个单元组成)

如果ij是 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%3y = 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++;
    }
}
于 2013-05-02T18:18:11.160 回答
0

如果要使用单个数字来索引 2D 数组,请使用 mod / 除法函数。

row = index / row_size;
col = index % col_size;

您的索引应在 0 到 (row_size*col_size -1) 的范围内

于 2013-05-02T18:04:01.153 回答
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);
    }
}
于 2013-05-02T18:23:46.913 回答