2

我正在尝试编写一个程序,该程序将为用户提供数独难题来解决。但我坚持按难度隐藏数字。我怎么做?

4

2 回答 2

1

考虑到你有一个 9x9 的整数矩阵

int sudoku[9][9];

并且这个矩阵充满了正确的数独,例如,只需将一些条目替换为 0。请记住,数独通常围绕其中心对称。

// Hide (i,j) from solution
sudoku[i][j] = 0;
sudoku[8-i][8-j] = 0;

每次您从解决方案中隐藏两个数字时,请与您的求解器确认它仍然可以解决。最后,将难度与这样一个过程的一定数量的循环联系起来

for (k=0; k < difficulty; ) {
  // randomly select (i,j) so that:
  //   - 0 <= i <= 4
  //   - 0 <= j <= 4
  //   - (i,j) != (4, 4)
  //   - solution[i][j] != 0 (i.e., (i, j) has not already been randomly selected
  save1 = solution[i][j];
  solution[i][j] = 0;
  save2 = solution[8-i][8-j];
  solution[8-i][8-j] = 0;

  if (!can_be_solved(solution)) {
    // (i, j) was not a good choice!
    solution[i][j] = save1;
    solution[8-i][8-j] = save2;
  }
  else {
    // it's still OK, let's go one step further
    k += 1;
  }
}
  //

}
于 2013-04-27T19:16:42.773 回答
0

您可以编写一个数独求解器,然后随机生成数独板并测试它们是否对您的数独求解器有效。在生成棋盘的方法中,您可以有一个输入来指定将在起始棋盘上显示的数字数量。看看不同难度的标准数字数量,并以此为基础。

于 2013-04-27T19:16:20.290 回答