我用c语言写了一个
应该对每个都过
#include<stdio.h>
int a[10][10];
void print(int a[10][10])
{
int i,j;
for (i=1;i<=9;i++)
{
for (j=1;j<=9;j++)
printf(“%d”,a[i][j]);
printf(“n”);
}
printf(“n”);
}
void task(int p,int q)
{
int i,j,t,m,n;
int test(int x,int y,int t,int p,int q);
if (a[p][q]==0)
for (i=1;i<=9;i++)
{t=1;
a[p][q]=i;
for (j=1;j<=9;j++)
if (j!=q&&a[p][j]==i) t=0;
if (t)
for (j=1;j<=9;j++)
if (j!=p&&a[j][q]==i) t=0;
if (t)
{
m=(p-0.1)/3+1;
n=(q-0.1)/3+1;
t=test(3m-2,3n-2,t,p,q);
}
if (t)
{
if (p<=9&&q<=8) task(p,q+1);
else if(p<=8&&q==9) task(p+1,1);
else if(p==9&&q==9) print(a);
}
a[p][q]=0;
}
else
{
if(p<=9&&q<=8) task(p,q+1);
else if (p<=8&&q==9) task(p+1,1);
else if (p==9&&q==9) print(a);
}
}
int test(int x,int y,int t,int p,int q)
{
int i,j;
for (i=x;i<=x+2;i++)
for (j=y;j<=y+2;j++)
if ((i!=p||j!=q)&&a[i][j]==a[p][q]) t=0;
return (t);
}
void main()
{
int i,j;
char c=’y’;
for (i=1;i<=9;i++)
for (j=1;j<=9;j++)
scanf(“%1d”,&a[i][j]);
print(a);
task(1,1);
}
我用c语言写了一个
应该对每个都过
#include<stdio.h>
int a[10][10];
void print(int a[10][10])
{
int i,j;
for (i=1;i<=9;i++)
{
for (j=1;j<=9;j++)
printf(“%d”,a[i][j]);
printf(“n”);
}
printf(“n”);
}
void task(int p,int q)
{
int i,j,t,m,n;
int test(int x,int y,int t,int p,int q);
if (a[p][q]==0)
for (i=1;i<=9;i++)
{t=1;
a[p][q]=i;
for (j=1;j<=9;j++)
if (j!=q&&a[p][j]==i) t=0;
if (t)
for (j=1;j<=9;j++)
if (j!=p&&a[j][q]==i) t=0;
if (t)
{
m=(p-0.1)/3+1;
n=(q-0.1)/3+1;
t=test(3m-2,3n-2,t,p,q);
}
if (t)
{
if (p<=9&&q<=8) task(p,q+1);
else if(p<=8&&q==9) task(p+1,1);
else if(p==9&&q==9) print(a);
}
a[p][q]=0;
}
else
{
if(p<=9&&q<=8) task(p,q+1);
else if (p<=8&&q==9) task(p+1,1);
else if (p==9&&q==9) print(a);
}
}
int test(int x,int y,int t,int p,int q)
{
int i,j;
for (i=x;i<=x+2;i++)
for (j=y;j<=y+2;j++)
if ((i!=p||j!=q)&&a[i][j]==a[p][q]) t=0;
return (t);
}
void main()
{
int i,j;
char c=’y’;
for (i=1;i<=9;i++)
for (j=1;j<=9;j++)
scanf(“%1d”,&a[i][j]);
print(a);
task(1,1);
}