代码新增如下:
void random(){//生成1,5,9宫填满,其余宫均为0的数独
srand(time(NULL));
int store[9]={1,2,3,4,5,6,7,8,9};
for(int k=0;k<3;k++){
for(int i=0;i<100;i++){
int a=rand()%9, b=rand()%9;
int t;
t=store[a];
store[a]=store[b];
store[b]=t;
}
for(int u=0;u<3;u++)
for(int v=0;v<3;v++){
int x=3*k+u,y=3*k+v;
sudo[9*x+y]=store[3*u+v];
}
}
}
void create_sudoku(int n){//生成有n个提示数的数独初盘
clock_t start = clock();
int N=81-n;
random();
DLX(sudo);
for(int i=0;i<81;i++)
ans[i]=ans2[i];
while(N){
int k=rand()%81;
if(ans[k]){
int y=ans[k];
ans[k]=0;
int temp[81];
for(int i=0;i<81;i++)
temp[i]=ans[i];
if(DLX(temp)==1) ans[k]=y;
else N--;
}
}
clock_t end = clock();
for(int o=0;o<81;o++)
printf("%d%c",ans[o],(o+1)%9?' ':'\n');
float time=(float)(end-start)/CLOCKS_PER_SEC;
printf("\ntime consumig: %.3f s\n",time);
}