数独
解题思路
这题就是dfs搜索
AC代码
#include<cstdlib>
#include<cstdio>
using namespace std;
int a[10][10],b[10][10],c[10][10],ans[10][10];
int sum(int x,int y)
{
return (x-1)/3*3+(y-1)/3+1;
}
void print()
{
for(int i=1;i<=9;i++,printf("\n"))
for(int j=1;j<=9;j++)
printf("%d ",ans[i][j]);
exit(0);
}
void dfs(int x,int y)
{
if(ans[x][y]!=0)if(x==9&&y==9)print();
else if(y==9)dfs(x+1,1);
else dfs(x,y+1);
else for(int i=1;i<=9;i++)
if(!a[x][i]&&!b[y][i]&&!c[sum(x, y)][i])
{
ans[x][y]=i;
a[x][i]=b[y][i]=c[sum(x, y)][i]=1;
if(x==9&&y==9)print();
else if(y==9)dfs(x+1,1);
else dfs(x,y+1);
ans[x][y]=a[x][i]=b[y][i]=c[sum(x, y)][i]=0;
}
}
int main()
{
for(int i=1;i<=9;i++)//输入
for(int j=1;j<=9;j++)
{
int x;
scanf("%d",&x);
if(x!=0)ans[i][j]=x,a[i][x]=b[j][x]=c[sum(i, j)][x]=1;
}
dfs(1,1);//dfs
return 0;
}