如何在数独游戏中隐藏数字?
How do I hide numbers from a table of sudoku?
我正试图写一个程序,将给用户一个数独难题解决。但我被按难度隐藏数字困住了。我怎么做呢?
考虑你有一个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;
}
}
//
}
你可以编写一个数独解算器,然后随机生成数独板并测试它们是否与你的数独解算器有效。在生成棋盘的方法中,您可以有一个输入,指定将在开始棋盘上显示的数字的数量。看看不同难度的标准数字,并以此为基础。
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 检查输入是否不是整数或数字
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- 如何用数字处理log(0)
- 最高有效数字侧的第N位
- 如何获取一个数字的前3位
- 查找最接近的大于当前数字的数字的索引
- 找到两对数字,使它们的乘积的绝对差最小化
- 我想做一个彼此不同但重复出现的数字
- 将数字转换为字母(例如:123 转换为一二三)
- C++如何计算用户输入的数字中的偶数位数
- 如何在C++中确定文本文件中的元素是字符还是数字
- 这是我尝试让用户将值输入到数组中.然后将其隐藏为大量的星号
- 打印数字图案
- C++问题:用户认为数字1-100,程序提出问题不超过6次即可得到答案。无法正确
- 如何检查一个c++字符串中有多少相同的字符/数字
- 求出有多少个数字是完美平方,而sqrt()是L,R范围内的素数
- 结构和双指针隐藏在其他结构中,多层混淆
- 如何在数独游戏中隐藏数字?