例如,假设我们有一个像这样的数独板:
0 0 6 5 8 9 7 4 3
0 5 0 0 0 0 0 6 0
7 0 9 0 6 0 1 0 0
0 3 0 0 0 2 0 8 7
0 0 1 0 0 0 4 0 0
8 9 0 6 0 0 0 5 0
0 0 2 0 5 0 3 0 6
0 7 0 0 0 0 0 9 0
3 1 8 4 9 6 5 0 0
我想将它存储到一个数组中,使得数组的前 9 个元素是第一个子 block ,即值 {0 0 6 0 5 0 7 0 9}
然后是 {5 8 9 0 0 0 0 6 0}
.
我尝试寻找解决方案,但总是出现数组索引越界错误,而且它太暴力了。与此类似的东西:
while(st.hasMoreTokens()) {
if(ctr == 27) {
c.addSubBlock(sb1);
c.addSubBlock(sb2);
c.addSubBlock(sb3);
sb1 = new SubBlock();
sb2 = new SubBlock();
sb3 = new SubBlock();
ctr = 0;
}
sb1.addElement(Integer.parseInt(st.nextToken()));
sb1.addElement(Integer.parseInt(st.nextToken()));
sb1.addElement(Integer.parseInt(st.nextToken()));
sb2.addElement(Integer.parseInt(st.nextToken()));
sb2.addElement(Integer.parseInt(st.nextToken()));
sb2.addElement(Integer.parseInt(st.nextToken()));
sb3.addElement(Integer.parseInt(st.nextToken()));
sb3.addElement(Integer.parseInt(st.nextToken()));
sb3.addElement(Integer.parseInt(st.nextToken()));
ctr+=9;
}
请给我一些建议。代码片段也会有很大的帮助。
编辑:这个thread以某种方式帮助我弄清楚了。是的,这是数独的一部分,我正在尝试将棋盘编码到数组中。
我所做的就是首先将输入字符串转换为二维数组(9x9)并使用 int block = (row/3)*3 + (col/3);
准确计算每个元素属于哪个子 block 。
最佳答案
- 创建 3x3 子 block 数组
- 使用 2 个计数器(x 和 y)来跟踪读取的每个元素在整个板上的位置
- 将 (x,y) 处的值添加到子 block (x/3,y/3)
类似这样的事情:
SubBlock board[][] = new SubBlock[3][3];
int x, y;
for ( y=0; y<9; y++ )
for ( x=0; x<9; x++ )
board[y/3][x/3].addElement(Integer.parseInt(st.nextToken()));
board[0][0] 将是左上角的子 block ,board[2][2] 是右下角的子 block 。
关于java - 如何循环数独板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9399696/