我想要用C语言写一个代码,解数独游戏,数独的大致规则是,给出一个有九个小九宫格组成的大九宫格,上面有一些数字从1-9,我们要把大九宫格填满,并让每一行和每一列和每个小九宫格里的数字均不同。我写的代码及注释如下。但是没有达到我预期的效果。
#include
#include
#include
int main()
{
char a[9][9];
char b[81];
char c[9]={1,2,3,4,5,6,7,8,9};
char a1[9],b2[9],c3[8],d4[9],e5[9],f6[9],g7[9],h8[9],i9[9];
int t=0,n;
int A,B;
//先把已给的数填入,需要我们填的就填0
for(int i=0;i<9;i++)
for(int j=0;j<9;j++)
scanf("%d",a);
//找到我们需要填空的位置,其下标放在b中
for(int i=0;i<9;i++)
{
for(int j=0;j<9;j++)
{
if(a[i][j]==0)
{
b[t++]=j+i*9;
}
}
}
while(1)
{
// 使用rand()%10,随机产生0-9数,有0则+1
for(int i=0;iA=b[i]/9;
B=b[i]%9;
a[A][B]=rand()%10;
if(a[A][B]==0)
{
a[A][B]+=1;
}
}
//把每行赋给一个新数列
for(int i=0;i<9;i++)
a1[i]=a[0][i];
for(int i=0;i<9;i++)
b2[i]=a[1][i];
for(int i=0;i<9;i++)
c3[i]=a[2][i];
for(int i=0;i<9;i++)
d4[i]=a[3][i];
for(int i=0;i<9;i++)
e5[i]=a[4][i];
for(int i=0;i<9;i++)
f6[i]=a[5][i];
for(int i=0;i<9;i++)
g7[i]=a[6][i];
for(int i=0;i<9;i++)
h8[i]=a[7][i];
for(int i=0;i<9;i++)
i9[i]=a[8][i];
//判断每行是否是数字1-9
n=0;
for(int i=0;i<9;i++)
{
if(strcmp(a[i],c))
n++;
}
//判断每列是否是数字1-9
if(strcmp(l1,c))
n++;
if(strcmp(l2,c))
n++;
if(strcmp(l3,c))
n++;
if(strcmp(l4,c))
n++;
if(strcmp(l5,c))
n++;
if(strcmp(l6,c))
n++;
if(strcmp(l7,c))
n++;
if(strcmp(l8,c))
n++;
if(strcmp(l9,c))
n++;
//判断行和列的条件是否满足
if(n==18)
break;
}
//打印九宫格
for(int i=0;i<9;i++)
for(int j=0;j<9;j++)
printf("%d ",a[i][j]);
printf("\n");
return 0;
}