我正在尝试编写一个程序,让用户可以解决数独难题。但我坚持按难度级别隐藏数字。我该怎么做?
答案 0 :(得分: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;
}
}
//
}
答案 1 :(得分:0)
你可以写一个数独求解器然后随机生成数独板并测试它们是否对你的数独求解器有效。在生成板的方法中,您可以使用一个输入来指定将在开始板上显示的数字的数量。看看不同困难的标准数字,并以此为基础。