|
|
|
|
@ -1,255 +0,0 @@
|
|
|
|
|
#include <stdio.h>
|
|
|
|
|
#include <time.h>
|
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
int main()
|
|
|
|
|
{
|
|
|
|
|
int g=0,h=0,l;
|
|
|
|
|
int i,j,d,f=1,p,q,m,z,y=1,x=1,c=0,k=1,u,v,w=0;
|
|
|
|
|
int board[9][9] = {{5, 3, 0, 0, 7, 0, 0, 0, 0},
|
|
|
|
|
{6, 0, 0, 1, 9, 5, 0, 0, 0},
|
|
|
|
|
{0, 9, 8, 0, 0, 0, 0, 6, 0},
|
|
|
|
|
{8, 0, 0, 0, 6, 0, 0, 0, 3},
|
|
|
|
|
{4, 0, 0, 8, 0, 3, 0, 0, 1},
|
|
|
|
|
{7, 0, 0, 0, 2, 0, 0, 0, 6},
|
|
|
|
|
{0, 6, 0, 0, 0, 0, 2, 8, 0},
|
|
|
|
|
{0, 0, 0, 4, 1, 9, 0, 0, 5},
|
|
|
|
|
{0, 0, 0, 0, 8, 0, 0, 7, 9}};
|
|
|
|
|
//这个位置加下original matrix的格式输出 ,变量i,j可用
|
|
|
|
|
|
|
|
|
|
printf("The original Sudoku matrix:\n");
|
|
|
|
|
printf("|");
|
|
|
|
|
for(int i=0;i<23;i++)
|
|
|
|
|
{
|
|
|
|
|
printf("-");
|
|
|
|
|
}
|
|
|
|
|
printf("|");
|
|
|
|
|
printf("\n");
|
|
|
|
|
for(int i=0;i<9;i++)
|
|
|
|
|
{
|
|
|
|
|
printf("| ");
|
|
|
|
|
for(int j=0;j<9;j++)
|
|
|
|
|
{
|
|
|
|
|
printf("%d ",board[i][j]);
|
|
|
|
|
if(j==2||j==5||j==8)
|
|
|
|
|
{
|
|
|
|
|
printf("| ");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
printf("\n");
|
|
|
|
|
if((i+1)%3==0&&i!=0)
|
|
|
|
|
{
|
|
|
|
|
printf("| ");
|
|
|
|
|
for(int k=1;k<23;k++)
|
|
|
|
|
{
|
|
|
|
|
printf("-");
|
|
|
|
|
}
|
|
|
|
|
printf("|");
|
|
|
|
|
printf("\n");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int a[10],b[100];
|
|
|
|
|
f=1;
|
|
|
|
|
for(i=0;i<9;i++)
|
|
|
|
|
{
|
|
|
|
|
for(j=0;j<10;j++)
|
|
|
|
|
{
|
|
|
|
|
a[j]=0;
|
|
|
|
|
}
|
|
|
|
|
for(j=0;j<9;j++)
|
|
|
|
|
{
|
|
|
|
|
d=board[j][i];
|
|
|
|
|
a[d-1]++;
|
|
|
|
|
if(a[d-1]>=2&&d-1!=-1)
|
|
|
|
|
{
|
|
|
|
|
f=0;u=d;v=i;w=1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
for(i=0;i<9;i++)
|
|
|
|
|
{
|
|
|
|
|
for(j=0;j<10;j++)
|
|
|
|
|
{
|
|
|
|
|
a[j]=0;
|
|
|
|
|
}
|
|
|
|
|
for(j=0;j<9;j++)
|
|
|
|
|
{
|
|
|
|
|
d=board[i][j];
|
|
|
|
|
a[d-1]++;
|
|
|
|
|
if(a[d-1]>=2&&d-1!=-1)
|
|
|
|
|
{
|
|
|
|
|
f=0;u=d;v=i;w=2;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
for (p=0;p<3;p++)
|
|
|
|
|
{
|
|
|
|
|
for(q=0;q<3;q++)
|
|
|
|
|
{
|
|
|
|
|
for(m=0;m<10;m++)
|
|
|
|
|
{
|
|
|
|
|
a[m]=0;
|
|
|
|
|
}
|
|
|
|
|
for (i=3*p;i<3*p+3;i++)
|
|
|
|
|
{
|
|
|
|
|
for(j=3*q;j<3*q+3;j++)
|
|
|
|
|
{
|
|
|
|
|
d=board[i][j];
|
|
|
|
|
a[d-1]++;
|
|
|
|
|
if(a[d-1]>=2&&d-1!=-1)
|
|
|
|
|
{
|
|
|
|
|
f=0;u=d;v=3*p+q+1;w=3;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(f==1) printf("True:Valid initial Sudoku matrix!\n");
|
|
|
|
|
else {
|
|
|
|
|
printf("False:Invalid initial Sudoku matrix!\n");
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
if(w==1) printf("The number %d in the line %d has been used!",x,y);
|
|
|
|
|
else if(w==2) printf("The number %d in the col %d has been used!",x,y);
|
|
|
|
|
else if(w==3) printf("The number %d in the block %d has been used!",x,y);
|
|
|
|
|
|
|
|
|
|
b[0]=10;
|
|
|
|
|
for (i=0;i<9;i++)
|
|
|
|
|
{
|
|
|
|
|
for(j=0;j<9;j++)
|
|
|
|
|
{
|
|
|
|
|
if (board[i][j]==0)
|
|
|
|
|
{
|
|
|
|
|
b[x]=10*i+j;
|
|
|
|
|
x++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
z=x;
|
|
|
|
|
x=1;
|
|
|
|
|
while (x<z)
|
|
|
|
|
{
|
|
|
|
|
l=c+1;
|
|
|
|
|
h=b[x]/10;
|
|
|
|
|
g=b[x]%10;
|
|
|
|
|
while (l<=9)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
f=1;
|
|
|
|
|
board[h][g]=l;
|
|
|
|
|
for(i=0;i<9;i++)
|
|
|
|
|
{
|
|
|
|
|
for(j=0;j<10;j++)
|
|
|
|
|
{
|
|
|
|
|
a[j]=0;
|
|
|
|
|
}
|
|
|
|
|
for(j=0;j<9;j++)
|
|
|
|
|
{
|
|
|
|
|
d=board[j][i];
|
|
|
|
|
a[d-1]++;
|
|
|
|
|
if(a[d-1]>=2&&d!=0)
|
|
|
|
|
{
|
|
|
|
|
f=0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
for(i=0;i<9;i++)
|
|
|
|
|
{
|
|
|
|
|
for(j=0;j<10;j++)
|
|
|
|
|
{
|
|
|
|
|
a[j]=0;
|
|
|
|
|
}
|
|
|
|
|
for(j=0;j<9;j++)
|
|
|
|
|
{
|
|
|
|
|
d=board[i][j];
|
|
|
|
|
a[d-1]++;
|
|
|
|
|
if(a[d-1]>=2&&d!=0)
|
|
|
|
|
{
|
|
|
|
|
f=0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
for (p=0;p<3;p++)
|
|
|
|
|
{
|
|
|
|
|
for(q=0;q<3;q++)
|
|
|
|
|
{
|
|
|
|
|
for(m=0;m<10;m++)
|
|
|
|
|
{
|
|
|
|
|
a[m]=0;
|
|
|
|
|
}
|
|
|
|
|
for (i=3*p;i<3*p+3;i++)
|
|
|
|
|
{
|
|
|
|
|
for(j=3*q;j<3*q+3;j++)
|
|
|
|
|
{
|
|
|
|
|
d=board[i][j];
|
|
|
|
|
a[d-1]++;
|
|
|
|
|
if(a[d-1]>=2&&d!=0)
|
|
|
|
|
{
|
|
|
|
|
f=0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (f==0) l++;
|
|
|
|
|
else break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (l==10&&f==0)
|
|
|
|
|
{
|
|
|
|
|
board[h][g]=0;
|
|
|
|
|
x--;
|
|
|
|
|
h=b[x]/10;
|
|
|
|
|
g=b[x]%10;
|
|
|
|
|
c=board[h][g];
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
x++;c=0;
|
|
|
|
|
}
|
|
|
|
|
if(x==0)
|
|
|
|
|
{
|
|
|
|
|
k=0;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (k==0) printf("No solution!");
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
printf("The solution of Sudoku matrix:\n");
|
|
|
|
|
//这个位置也需要The solution of Sudoku matrix:的格式化输出
|
|
|
|
|
printf("|");
|
|
|
|
|
for(int i=0;i<23;i++)
|
|
|
|
|
{
|
|
|
|
|
printf("-");
|
|
|
|
|
}
|
|
|
|
|
printf("|");
|
|
|
|
|
printf("\n");
|
|
|
|
|
for(int i=0;i<9;i++)
|
|
|
|
|
{
|
|
|
|
|
printf("| ");
|
|
|
|
|
for(int j=0;j<9;j++)
|
|
|
|
|
{
|
|
|
|
|
printf("%d ",board[i][j]);
|
|
|
|
|
if(j==2||j==5||j==8)
|
|
|
|
|
{
|
|
|
|
|
printf("| ");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
printf("\n");
|
|
|
|
|
if((i+1)%3==0&&i!=0)
|
|
|
|
|
{
|
|
|
|
|
printf("| ");
|
|
|
|
|
for(int k=1;k<23;k++)
|
|
|
|
|
{
|
|
|
|
|
printf("-");
|
|
|
|
|
}
|
|
|
|
|
printf("|");
|
|
|
|
|
printf("\n");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}
|