java - 如何循环数独板?

标签 java sudoku

例如,假设我们有一个像这样的数独板:

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 。

最佳答案

  1. 创建 3x3 子 block 数组
  2. 使用 2 个计数器(x 和 y)来跟踪读取的每个元素在整个板上的位置
  3. 将 (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/

相关文章:

java - 检查 Sibling 类的实例

Java/Swing JButton 不显示其文本且不执行其操作

java - 如何使用eclipse编写并执行PIG Latin

java - 理解Weka的代码

Prolog 为数独求解器返回 false

c++ - 输入/输出文件(数独求解器)

java - Sudoku Solver的代码解释

java - RxJava 流 : conditional operators and error handling

c - 多线程数独求解器

list - 在 Haskell 中输出列表列表?