You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

152 lines
2.9 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include <stdio.h>
int main()
{
int board[9][9]={{0,1,2,0,7,0,0,0,3},
{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}};
int a[9][9];//设置不同的区块
int q,p,r=0;
/*************定义块*******************/
for(q=0;q<3;q++)//section 1
{
for(p=0;p<3;p++)
{
a[0][r++]=board[q][p];
}
}
r=0;
for(q=0;q<3;q++)//section 2
{
for(p=3;p<6;p++)
{
a[1][r++]=board[q][p];
}
}r=0;
for(q=0;q<3;q++)//section 3
{
for(p=6;p<9;p++)
{
a[2][r++]=board[q][p];
}
} r=0;
for(q=3;q<6;q++)//section 4
{
for(p=0;p<3;p++)
{
a[3][r++]=board[q][p];
}
}r=0;
for(q=3;q<6;q++)//section 5
{
for(p=3;p<6;p++)
{
a[4][r++]=board[q][p];
}
} r=0;
for(q=3;q<6;q++)//section 6
{
for(p=6;p<9;p++)
{
a[5][r++]=board[q][p];
}
} r=0;
for(q=6;q<9;q++)//section 7
{
for(p=0;p<3;p++)
{
a[6][r++]=board[q][p];
}
} r=0;
for(q=6;q<9;q++)//section 8
{
for(p=3;p<6;p++)
{
a[7][r++]=board[q][p];
}
} r=0;
for(q=6;q<9;q++)//section 9
{
for(p=6;p<9;p++)
{
a[8][r++]=board[q][p];
}
}
//设置区块结束 ,将每个区块的数转移为每一行的数,再判断行是否重复
int i,j,k,t=0,h=0;
int n=0;
printf("The original Sudoku matrix:\n");
/*************检索行*******************/
for(i=0;i<9;i++)//先判断行是否重复
{
for(j=0;j<9;j++)
{
for(k=0;k<9;k++)//对第j行的数进行判断在该行内是否重复若重复则跳出循环
{
if(board[i][j]==board[i][k]&&j!=k&&board[i][j]!=0)
{
n=board[i][j];
goto flagone;//在某一行重复出现
}
}
}
}
/*************检索列*******************/
for(h=0;h<9;h++)//判断列是否重复
{
for(j=0;j<9;j++)
{
for(k=0;k<9;k++)
{
if(board[j][h]==board[k][h]&&j!=k&&board[j][h]!=0)
{
n=board[j][h];
goto flagtwo;//在某一列重复出现
}
}
}
}
/*************检索块*******************/
for(i=0;i<9;i++)//先判断行(块)是否重复
{
for(j=0;j<9;j++)
{
for(k=0;k<9;k++)//对第j行的数进行判断在该行内是否重复若重复则跳出循环
{
if(a[i][j]==a[i][k]&&j!=k&&a[i][j]!=0)
{
n=a[i][j];
goto flagthree;//在某一行(块)重复出现
}
}
}
/*************结果*******************/
if(n==0)
{
printf("True:Invalid initial Sudoku matrix!\n");
}
}if(n!=0){
flagone:
printf("False:Invalid initial Sudoku matrix!\n");
printf("The number %d in the col %d has been used!\n",n,i+1);
return 0;
flagtwo:
printf("False:Invalid initial Sudoku matrix!\n");
printf("The number %d in the row %d has been used!\n",n,h+1);
return 0;
flagthree:
printf("False:Invalid initial Sudoku matrix!\n");
printf("The number %d in the block %d has been used!\n",n,i+1);
return 0;
}
}