数独中网格编号的处理

数独中网格编号的处理

Content #

用3个数组标记每行、每列、每个子网格已用的数字。

  • row[i]​[x]​:用于标记第i行中的数字x是否出现。
  • col[j]​[y]​:用于标记第j列中的数字y是否出现。
  • grid[k]​[z]​:标记第k个3×3子网格中的数字z是否出现。

把一个9行9列的网格再细分为9个3×3的子网格,在每个子网格内都不允许出现相同的数字,那么我们将9个子网格编号为1~9,在同一个子网格内不允许出现相同的数字。

观察子网格的序号k与行i、列j的关系:

  • 如果把第1~3行转换为0,第4~5行转换为1,第7~9行转换为2,则a=(i-1)/3;
  • 如果把第1~3列转换为0,第4~5列转换为1,第7~9列转换为2,则b=(j-1)/3。

行i、列j对应的子网格编号k=3×a+b+1=3×((i-1)/3)+(j-1)/3+1。

From #

bailian2982(Sudoku)