数独的初始化:
数独行列的检验
void clssd()//初始化函数,所有位置设为0
{
int i,j,k;
for(i=0;i<9;i++)
for(j=0;j<9;j++)
a[i][j]=0;
for(k=1;k<=81;k++)
sd[k]=0;
}
int line(int line,int value)//检验行
{
int i;
for(i=1;i<=9;i++)
{
if(a[line][i]==value) return 0;
}
return 1;
}
int row(int row,int value)//检验列
{
int i;
for(i=1;i<=9;i++)
{
if(a[i][row]==value) return 0;
}
return 1;
}
int square(int line,int row,int value)//检验3*3的九宫
{
int L,R,i,j;
L=(line%3!=0)+line/3;//L表示所在九宫的行数
R=(row%3!=0)+row/3;//R表示所在九宫的列数
for(i=(L-1)*3+1;i<=L*3;i++)
{
for(j=(R-1)*3+1;j<=R*3;j++)
if(a[i][j]==value) return 0;
}
return 1;
}
//四个转换函数
int transform_to_line(int i)//实现sd[i]->a[line][row]之间的转换
{
int line;
line=i/9+(i%9!=0);
return line;
}
int transform_to_row(int i)//实现sd[i]->a[line][row]之间的转换
{
int row;
row=i%9+9*(i%9==0);
return row;
}
void transform_to_a(int i)//sd[i]->a[line][row]的转换
{
int l,r;
l=transform_to_line(i);
r=transform_to_row(i);
a[l][r]=sd[i];
}void transform_to_sd()//实现a[line][row]->sd[i]的转换
{
int line,row,i=1;
for(line=1;line<=9;line++)
for(row=1;row<=9;row++)
do
{
sd[i]=a[line][row];
i++;
break;
}while(i<=81);
}