描述:
数独游戏规则
在9阶方阵中,包含了81个小格(九列九行),其中又再分成九个小正方形(称为宫),每宫有九小格。
游戏刚开始时,盘面上有些小格已经填了数字(称为初盘),游戏者要在空白的小格中填入1到9的数字,
使得最后每行、每列、每宫都不出现重复的数字,而且每一个游戏都只有一个唯一的解答(称为终盘)。
输入:
一个9*9的矩阵,0表示该位置是空白。
输出:
一个9*9的矩阵,格式与输入类似。
输入样例:
900050060 020070100 300102040 703800529 000345000 516009403 050208006 007090010 030010004
输出样例:
971453268 428976135 365182947 743861529 892345671 516729483 154238796 687594312 239617854
#include<stdio.h>
int search(int n);
int judge();
int a[9][9];
int b[9];
int main()
{
int i,j;
for(i=0; i<9; i++)
{
scanf("%d",&b[i]);
}
for(i=0; i<9; i++)
{
for(j=8; j>=0; j--)
{
a[i][j]=b[i]%10;
b[i]=b[i]/10;
}
}
search(0);
return 0;
}
int search(int n)
{
int i,j,flag,tmp,num,e,f;
if(n==81)
{
for(i=0; i<9; i++)
{
for(j=0; j<9; j++)
{
printf("%d",a[i][j]);
}
printf("\n");
}
}
else
{
if(a[n/9][n%9]==0)
{
for(i=1; i<=9; i++)
{
flag=1;
for(j=0; j<9; j++)
{
if((i==a[n/9][j]&&j!=n%9)||(i==a[j][n%9]&&j!=n/9))
{
flag=0;
break;
}
}
if(flag==1)
{
tmp=(n/9)/3*3;
num=(n%9)/3*3;
for(e=tmp; e<tmp+3&&flag!=0; e++)
{
for(f=num; f<num+3; f++)
{
if((e!=n/9||f!=n%9)&&a[e][f]==i)
{
flag=0;
break;
}
}
}
}
if(flag==1)
{
a[n/9][n%9]=i;
search(n+1);
a[n/9][n%9]=0;
}
}
}
else
{
search(n+1);
}
}
}