数独游戏 link
判断重复
数独要求每一行、每一列、每一个3×3方阵内的数字,不重复。
行和列重复判断是相当简单的。
我们可以定义两个bool型二维数组,
当此行(或列)填充数字时,
我们可以直接把这行的这个数字打上true表示有数字了。
//譬如第一行第三列填入数字2
bool p[][],l[][];//p:行,l:列;
p[1][2]=l[3][2]=true;
如果后面再填充数字,就判断此行(或列)是否填过这个数字即可。
重点:判断方阵中数字重复
如果判断方阵中数字重复?
怎样用行列来表示是几方阵成了个问题。
但是不用怕,我们有van能的数学。
观察下面这个数独:
可以看到,每过3列,方阵的序号+1,
每过3行,方阵的序号+3。
于是我们有了这样的表达式:
方阵序号=(行数-1)/3*3+(列数-1)/3+1
//注意!行数列数要-1,因为3的整数倍数/3会比原方阵大1,不能满足上述需求。
有了上述方法,就可以写个深搜函数来解决问题了!
#include <cstdio>
#include <iostream>
#include <cstdlib>
using namespace std;
const int N = 20;
char s;
int ans[