數獨的初始化:
數獨行列的檢驗
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);
}