題目:
數獨問題:9*9的矩陣,要求每一行,每一列,每個九宮格都是1-9這九個數字且不能重複。
給定一9*9矩陣,裏面有部分數空缺,要求找出滿足上述要求的一個矩陣。
代碼:代碼中的二維數組用來存放數獨中的數字,沒有數字的位置爲0。
#include<stdio.h>
#define N 9
int ar[N][N]={8,0,0,0,0,0,0,0,0,
0,0,3,6,0,0,0,0,0,
0,7,0,0,9,0,2,0,0,
0,5,0,0,0,7,0,0,0,
0,0,0,0,4,5,7,0,0,
0,0,0,1,0,0,0,3,0,
0,0,1,0,0,0,0,6,8,
0,0,8,5,0,0,0,1,0,
0,9,0,0,0,0,4,0,0
};
bool ok(int t){
int a=t/9;
int b=t%9;
int newx=a/3*3;
int newy=b/3*3;
for(int i=newx;i<newx+3;i++){
for(int j=newy;j<newy+3;j++){
if(i!=a && ar[i][j]==ar[a][b] && j!=b)
return false;
}
}
for(i=0;i<N;i++)
if(i!=b && ar[a][i]==ar[a][b])
return false;
for(i=0;i<N;i++)
if(i!=a && ar[i][b]==ar[a][b])
return false;
return true;
}
void traceback(int t){
if(t==81){
for(int i=0;i<N;i++){
for(int j=0;j<N;j++)
printf("%d ",ar[i][j]);
printf("\n");
}
return;
}
int a=t/9;
int b=t%9;
if(ar[a][b]==0){
for(int i=1;i<10;i++){
ar[a][b]=i;
if(ok(t)==1)
traceback(t+1);
ar[a][b]=0;
}
}
else
traceback(t+1);
}
int main()
{
traceback(0);
return 0;
}