
---------------------------------------------------------------------------------------------------------------------------------
#include
#include
#include
using namespace std;
int a[14][14];
bool check(int x,int y,int z) //检查每一个横行、纵列、宫格中有无重复数字
{
for(int i=1;i<=9;i++) //横行
{
if(a[x][i]==z)
return false;
}
for(int i=1;i<=9;i++) //纵列
{
if(a[i][y]==z)
return false;
}
for(int i=1;i<=3;i++) //宫格
{
for(int j=1;j<=3;j++)
{
if(a[(x-1)/3*3+i][(y-1)/3*3+j]==z)
return false;
}
}
return true;
}
bool dfs(int x,int y) //深搜枚举数字
{
if(y>9) //当一行枚举完后跳到下一行
{
y=1;
x++;
}
if(x>9) //当枚举到9,9位置时结束递归
return true;
if(a[x][y]!=0)
return dfs(x,y+1);
for(int i=1;i<=9;i++)
{
if(check(x,y,i))
{
a[x][y]=i;
if(dfs(x,y+1))
{
return true;
}
a[x][y]=0;
}
}
return false;
}
int main()
{
for(int i=1;i<=9;i++) //输入
{
for(int j=1;j<=9;j++)
{
cin>>a[i][j];
}
}
dfs(1,1); //递归起点:矩阵中1,1的位置
for(int i=1;i<=9;i++) //输出
{
for(int j=1;j<=9;j++)
{
cout<
这是一道非常简(ě)单(xīn)的dfs题,其实没(yòu)有(méi)什(A)么(C)难度
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)