我用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);
}

tom882003March 4, 2006 / 5:08 pm我用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(3

m-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);

}