Compare commits

..

1 Commits
main ... step4

Author SHA1 Message Date
pfkhx47oz b4a9721f44 Add step4
2 years ago

255
step4

@ -0,0 +1,255 @@
#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;
}
Loading…
Cancel
Save