java - 给定二维数组行/列索引,如何制定数独 "sub-grid"索引?

标签 java arrays algorithm math sudoku

我正在努力用 Java 实现数独网格,而我无法做的最后一件事就是将以下逻辑简化为数学公式。

这是此问题的后续内容:How to get the Sudoku 2D-array index, given its "sub-grid" and "cell-in-the-sub-grid" indexes?

这是一个运行良好的函数:

public static final int getGridIndexForCell(int rowIdx_0to8, int colIdx_0to8)  {
   int idx = -1;
   if(rowIdx_0to8 < 3)  {
      //Grid-row 1
      idx = ((colIdx_0to8 < 3) ? 0
          : ((colIdx_0to8 < 6) ? 1 : 2));

   }  else  if(rowIdx_0to8 < 6)  {
      //Grid-row 2
      idx = ((colIdx_0to8 < 3) ? 3
          : ((colIdx_0to8 < 6) ? 4 : 5));

   }  else  {
      //Grid-row 3
      idx = ((colIdx_0to8 < 3) ? 6
          : ((colIdx_0to8 < 6) ? 7 : 8));
   }
   return  idx;
}

它根据提供的底层二维数组的行和列索引返回“网格索引”。

这就是我所说的网格的含义(我将整个事物称为“板”):

        |         |
   0    |    1    |    2
        |         |
 -------------------------
        |         |
   3    |    4    |    5
        |         |
 -------------------------
        |         |
   6    |    7    |    8
        |         |

每个网格有九个单元格,索引如下

0 1 2
3 4 5
6 7 8

我会尽可能感谢带注释的答案,因为这是我还没有得到的东西。

最佳答案

所以你想要的公式是

grid_index = (column / 3) + (row / 3) * 3 = column / 3 + row - row % 3

也就是说,每当列增长 3 时,grid_index 就增长 1,而 grid_index 每次增长 3 row 增长了 3。再次,所有除法均以整数完成。

关于java - 给定二维数组行/列索引,如何制定数独 "sub-grid"索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22311529/

相关文章:

java - 使用 iText 删除 PDF 中的重复字体

javascript - 如何使用 AngularJS 推送到 MongoDB 数组?

algorithm - 作为有限状态机的通用语言解析器

arrays - 数组的K个最大元素,排序算法

java - log4j2 - 如何动态更改文件?

java - 正则表达式 - 捕获大括号之间的增量数字

java - ZonedDateTime 作为 Spring REST RequestMapping 中的 PathVariable

python - "python way"解析并有条件地替换二维列表中的每个元素

arrays - 使用给定集合中的值计算获得 N 的所有可能性

algorithm - 解释为什么插入(以及不同的情况)不会改变红黑树的黑色高度