输出数独表的程序,请问哪里出错了
程序代码:
/*14th,Jun,2010 by:cracker134 数独*/ #include<stdio.h> int num[9][9],total=0; void sortnum_0(); void sortnum_1(); void sortnum_2(); void sortnum_3(); void sortnum_4(); void sortnum_5(); void sortnum_6(); void sortnum_7(); void sortnum_8(); void printnum(); int test_1(int *pctr,int ctr_n); int test_2(int a,int b); int main() { sortnum_0(); printf("total=%i\n",total); return 0; } /****************************************************************/ void sortnum_0() { int ctr[9]; for(ctr[0]=1;ctr[0]<10;ctr[0]++) {num[0][0]=ctr[0]; for(ctr[1]=1;ctr[1]<10;ctr[1]++) {num[1][0]=ctr[1]; if(test_1(ctr,1)==0){continue;} for(ctr[2]=1;ctr[2]<10;ctr[2]++) {num[2][0]=ctr[2]; if(test_1(ctr,2)==0){continue;} for(ctr[3]=1;ctr[3]<10;ctr[3]++) {num[0][1]=ctr[3]; if(test_1(ctr,3)==0){continue;} for(ctr[4]=1;ctr[4]<10;ctr[4]++) {num[1][1]=ctr[4]; if(test_1(ctr,4)==0){continue;} for(ctr[5]=1;ctr[5]<10;ctr[5]++) {num[2][1]=ctr[5]; if(test_1(ctr,5)==0){continue;} for(ctr[6]=1;ctr[6]<10;ctr[6]++) {num[0][2]=ctr[6]; if(test_1(ctr,6)==0){continue;} for(ctr[7]=1;ctr[7]<10;ctr[7]++) {num[1][2]=ctr[7]; if(test_1(ctr,7)==0){continue;} for(ctr[8]=1;ctr[8]<10;ctr[8]++) {num[2][2]=ctr[8]; if(test_1(ctr,8)==0){continue;} sortnum_1(); }}}}}}}}} } /******************************************************************/ void sortnum_1() { int ctr[9]; for(ctr[0]=1;ctr[0]<10;ctr[0]++) {num[3][0]=ctr[0]; if(test_2(3,0)==0){continue;} for(ctr[1]=1;ctr[1]<10;ctr[1]++) {num[4][0]=ctr[1]; if((test_1(ctr,1)==0)||(test_2(4,0)==0)){continue;} for(ctr[2]=1;ctr[2]<10;ctr[2]++) {num[5][0]=ctr[2]; if((test_1(ctr,2)==0)||(test_2(5,0)==0)){continue;} for(ctr[3]=1;ctr[3]<10;ctr[3]++) {num[3][1]=ctr[3]; if((test_1(ctr,3)==0)||(test_2(3,1)==0)){continue;} for(ctr[4]=1;ctr[4]<10;ctr[4]++) {num[4][1]=ctr[4]; if((test_1(ctr,4)==0)||(test_2(4,1)==0)){continue;} for(ctr[5]=1;ctr[5]<10;ctr[5]++) {num[5][1]=ctr[5]; if((test_1(ctr,5)==0)||(test_2(5,1)==0)){continue;} for(ctr[6]=1;ctr[6]<10;ctr[6]++) {num[3][2]=ctr[6]; if((test_1(ctr,6)==0)||(test_2(3,2)==0)){continue;} for(ctr[7]=1;ctr[7]<10;ctr[7]++) {num[4][2]=ctr[7]; if((test_1(ctr,7)==0)||(test_2(4,2)==0)){continue;} for(ctr[8]=1;ctr[8]<10;ctr[8]++) {num[5][2]=ctr[8]; if((test_1(ctr,8)==0)||(test_2(5,2)==0)){continue;} sortnum_2(); }}}}}}}}} } /********************************************************************/ void sortnum_2() { int ctr[9]; for(ctr[0]=1;ctr[0]<10;ctr[0]++) {num[6][0]=ctr[0]; if(test_2(6,0)==0){continue;} for(ctr[1]=1;ctr[1]<10;ctr[1]++) {num[7][0]=ctr[1]; if((test_1(ctr,1)==0)||(test_2(7,0)==0)){continue;} for(ctr[2]=1;ctr[2]<10;ctr[2]++) {num[8][0]=ctr[2]; if((test_1(ctr,2)==0)||(test_2(8,0)==0)){continue;} for(ctr[3]=1;ctr[3]<10;ctr[3]++) {num[6][1]=ctr[3]; if((test_1(ctr,3)==0)||(test_2(6,1)==0)){continue;} for(ctr[4]=1;ctr[4]<10;ctr[4]++) {num[7][1]=ctr[4]; if((test_1(ctr,4)==0)||(test_2(7,1)==0)){continue;} for(ctr[5]=1;ctr[5]<10;ctr[5]++) {num[8][1]=ctr[5]; if((test_1(ctr,5)==0)||(test_2(8,1)==0)){continue;} for(ctr[6]=1;ctr[6]<10;ctr[6]++) {num[6][2]=ctr[6]; if((test_1(ctr,6)==0)||(test_2(6,2)==0)){continue;} for(ctr[7]=1;ctr[7]<10;ctr[7]++) {num[7][2]=ctr[7]; if((test_1(ctr,7)==0)||(test_2(7,2)==0)){continue;} for(ctr[8]=1;ctr[8]<10;ctr[8]++) {num[8][2]=ctr[8]; if((test_1(ctr,8)==0)||(test_2(8,2)==0)){continue;} sortnum_3(); }}}}}}}}} } /********************************************************************/ void sortnum_3() { int ctr[9]; for(ctr[0]=1;ctr[0]<10;ctr[0]++) {num[0][3]=ctr[0]; if(test_2(0,3)==0){continue;} for(ctr[1]=1;ctr[1]<10;ctr[1]++) {num[1][3]=ctr[1]; if((test_1(ctr,1)==0)||(test_2(1,3)==0)){continue;} for(ctr[2]=1;ctr[2]<10;ctr[2]++) {num[2][3]=ctr[2]; if((test_1(ctr,2)==0)||(test_2(2,3)==0)){continue;} for(ctr[3]=1;ctr[3]<10;ctr[3]++) {num[0][4]=ctr[3]; if((test_1(ctr,3)==0)||(test_2(0,4)==0)){continue;} for(ctr[4]=1;ctr[4]<10;ctr[4]++) {num[1][4]=ctr[4]; if((test_1(ctr,4)==0)||(test_2(1,4)==0)){continue;} for(ctr[5]=1;ctr[5]<10;ctr[5]++) {num[2][4]=ctr[5]; if((test_1(ctr,5)==0)||(test_2(2,4)==0)){continue;} for(ctr[6]=1;ctr[6]<10;ctr[6]++) {num[0][5]=ctr[6]; if((test_1(ctr,6)==0)||(test_2(0,5)==0)){continue;} for(ctr[7]=1;ctr[7]<10;ctr[7]++) {num[1][5]=ctr[7]; if((test_1(ctr,7)==0)||(test_2(1,5)==0)){continue;} for(ctr[8]=1;ctr[8]<10;ctr[8]++) {num[2][5]=ctr[8]; if((test_1(ctr,8)==0)||(test_2(2,5)==0)){continue;} sortnum_4(); }}}}}}}}} } /********************************************************************/ void sortnum_4() { int ctr[9]; for(ctr[0]=1;ctr[0]<10;ctr[0]++) {num[3][3]=ctr[0]; if(test_2(3,3)==0){continue;} for(ctr[1]=1;ctr[1]<10;ctr[1]++) {num[4][3]=ctr[1]; if((test_1(ctr,1)==0)||(test_2(4,3)==0)){continue;} for(ctr[2]=1;ctr[2]<10;ctr[2]++) {num[5][3]=ctr[2]; if((test_1(ctr,2)==0)||(test_2(5,3)==0)){continue;} for(ctr[3]=1;ctr[3]<10;ctr[3]++) {num[3][4]=ctr[3]; if((test_1(ctr,3)==0)||(test_2(3,4)==0)){continue;} for(ctr[4]=1;ctr[4]<10;ctr[4]++) {num[4][4]=ctr[4]; if((test_1(ctr,4)==0)||(test_2(4,4)==0)){continue;} for(ctr[5]=1;ctr[5]<10;ctr[5]++) {num[5][4]=ctr[5]; if((test_1(ctr,5)==0)||(test_2(5,4)==0)){continue;} for(ctr[6]=1;ctr[6]<10;ctr[6]++) {num[3][5]=ctr[6]; if((test_1(ctr,6)==0)||(test_2(3,5)==0)){continue;} for(ctr[7]=1;ctr[7]<10;ctr[7]++) {num[4][5]=ctr[7]; if((test_1(ctr,7)==0)||(test_2(4,5)==0)){continue;} for(ctr[8]=1;ctr[8]<10;ctr[8]++) {num[5][5]=ctr[8]; if((test_1(ctr,8)==0)||(test_2(5,5)==0)){continue;} sortnum_5(); }}}}}}}}} } /********************************************************************/ void sortnum_5() { int ctr[9]; for(ctr[0]=1;ctr[0]<10;ctr[0]++) {num[6][3]=ctr[0]; if(test_2(6,3)==0){continue;} for(ctr[1]=1;ctr[1]<10;ctr[1]++) {num[7][3]=ctr[1]; if((test_1(ctr,1)==0)||(test_2(7,3)==0)){continue;} for(ctr[2]=1;ctr[2]<10;ctr[2]++) {num[8][3]=ctr[2]; if((test_1(ctr,2)==0)||(test_2(8,3)==0)){continue;} for(ctr[3]=1;ctr[3]<10;ctr[3]++) {num[6][4]=ctr[3]; if((test_1(ctr,3)==0)||(test_2(6,4)==0)){continue;} for(ctr[4]=1;ctr[4]<10;ctr[4]++) {num[7][4]=ctr[4]; if((test_1(ctr,4)==0)||(test_2(7,4)==0)){continue;} for(ctr[5]=1;ctr[5]<10;ctr[5]++) {num[8][4]=ctr[5]; if((test_1(ctr,5)==0)||(test_2(8,4)==0)){continue;} for(ctr[6]=1;ctr[6]<10;ctr[6]++) {num[6][5]=ctr[6]; if((test_1(ctr,6)==0)||(test_2(6,5)==0)){continue;} for(ctr[7]=1;ctr[7]<10;ctr[7]++) {num[7][5]=ctr[7]; if((test_1(ctr,7)==0)||(test_2(7,5)==0)){continue;} for(ctr[8]=1;ctr[8]<10;ctr[8]++) {num[8][5]=ctr[8]; if((test_1(ctr,8)==0)||(test_2(8,5)==0)){continue;} sortnum_6(); }}}}}}}}} } /********************************************************************/ void sortnum_6() { int ctr[9]; for(ctr[0]=1;ctr[0]<10;ctr[0]++) {num[0][6]=ctr[0]; if(test_2(0,6)==0){continue;} for(ctr[1]=1;ctr[1]<10;ctr[1]++) {num[1][6]=ctr[1]; if((test_1(ctr,1)==0)||(test_2(1,6)==0)){continue;} for(ctr[2]=1;ctr[2]<10;ctr[2]++) {num[2][6]=ctr[2]; if((test_1(ctr,2)==0)||(test_2(2,6)==0)){continue;} for(ctr[3]=1;ctr[3]<10;ctr[3]++) {num[0][7]=ctr[3]; if((test_1(ctr,3)==0)||(test_2(0,7)==0)){continue;} for(ctr[4]=1;ctr[4]<10;ctr[4]++) {num[1][7]=ctr[4]; if((test_1(ctr,4)==0)||(test_2(1,7)==0)){continue;} for(ctr[5]=1;ctr[5]<10;ctr[5]++) {num[2][7]=ctr[5]; if((test_1(ctr,5)==0)||(test_2(2,7)==0)){continue;} for(ctr[6]=1;ctr[6]<10;ctr[6]++) {num[0][8]=ctr[6]; if((test_1(ctr,6)==0)||(test_2(0,8)==0)){continue;} for(ctr[7]=1;ctr[7]<10;ctr[7]++) {num[1][8]=ctr[7]; if((test_1(ctr,7)==0)||(test_2(1,8)==0)){continue;} for(ctr[8]=1;ctr[8]<10;ctr[8]++) {num[2][8]=ctr[8]; if((test_1(ctr,8)==0)||(test_2(2,8)==0)){continue;} sortnum_7(); }}}}}}}}} } /********************************************************************/ void sortnum_7() { int ctr[9]; for(ctr[0]=1;ctr[0]<10;ctr[0]++) {num[3][6]=ctr[0]; if(test_2(3,6)==0){continue;} for(ctr[1]=1;ctr[1]<10;ctr[1]++) {num[4][6]=ctr[1]; if((test_1(ctr,1)==0)||(test_2(4,6)==0)){continue;} for(ctr[2]=1;ctr[2]<10;ctr[2]++) {num[5][6]=ctr[2]; if((test_1(ctr,2)==0)||(test_2(5,6)==0)){continue;} for(ctr[3]=1;ctr[3]<10;ctr[3]++) {num[3][7]=ctr[3]; if((test_1(ctr,3)==0)||(test_2(3,7)==0)){continue;} for(ctr[4]=1;ctr[4]<10;ctr[4]++) {num[4][7]=ctr[4]; if((test_1(ctr,4)==0)||(test_2(5,7)==0)){continue;} for(ctr[5]=1;ctr[5]<10;ctr[5]++) {num[5][7]=ctr[5]; if((test_1(ctr,5)==0)||(test_2(5,7)==0)){continue;} for(ctr[6]=1;ctr[6]<10;ctr[6]++) {num[3][8]=ctr[6]; if((test_1(ctr,6)==0)||(test_2(3,8)==0)){continue;} for(ctr[7]=1;ctr[7]<10;ctr[7]++) {num[4][8]=ctr[7]; if((test_1(ctr,7)==0)||(test_2(4,8)==0)){continue;} for(ctr[8]=1;ctr[8]<10;ctr[8]++) {num[5][8]=ctr[8]; if((test_1(ctr,8)==0)||(test_2(5,8)==0)){continue;} sortnum_8(); }}}}}}}}} } /********************************************************************/ void sortnum_8() { int ctr[9]; for(ctr[0]=1;ctr[0]<10;ctr[0]++) {num[6][6]=ctr[0]; if(test_2(6,6)==0){continue;} for(ctr[1]=1;ctr[1]<10;ctr[1]++) {num[7][6]=ctr[1]; if((test_1(ctr,1)==0)||(test_2(7,6)==0)){continue;} for(ctr[2]=1;ctr[2]<10;ctr[2]++) {num[8][6]=ctr[2]; if((test_1(ctr,2)==0)||(test_2(8,6)==0)){continue;} for(ctr[3]=1;ctr[3]<10;ctr[3]++) {num[6][7]=ctr[3]; if((test_1(ctr,3)==0)||(test_2(6,7)==0)){continue;} for(ctr[4]=1;ctr[4]<10;ctr[4]++) {num[7][7]=ctr[4]; if((test_1(ctr,4)==0)||(test_2(7,7)==0)){continue;} for(ctr[5]=1;ctr[5]<10;ctr[5]++) {num[8][7]=ctr[5]; if((test_1(ctr,5)==0)||(test_2(8,7)==0)){continue;} for(ctr[6]=1;ctr[6]<10;ctr[6]++) {num[6][8]=ctr[6]; if((test_1(ctr,6)==0)||(test_2(6,8)==0)){continue;} for(ctr[7]=1;ctr[7]<10;ctr[7]++) {num[7][8]=ctr[7]; if((test_1(ctr,7)==0)||(test_2(7,8)==0)){continue;} for(ctr[8]=1;ctr[8]<10;ctr[8]++) {num[8][8]=ctr[8]; if((test_1(ctr,8)==0)||(test_2(8,8)==0)){continue;} printnum(); total+=1; getchar(); }}}}}}}}} } /**************************************************************************************/ void printnum() { int x,y; for(y=0;y<9;y++) { for(x=0;x<9;x++) { printf("%i ",num[x][y]); if((x==2)||(x==5)){printf(" ");} } printf("\n"); if((y==2)||(y==5)){printf("\n");} } printf("\n\n\n"); } /*************************************************/ int test_1(int *pctr,int ctr_n) { int i,res=1; for(i=0;i<ctr_n;i++) { if(*(pctr+ctr_n)==*(pctr+i)){res=0;} } return res; } /****************************************************/ int test_2(int a,int b) { int x,y,res=1; if(a>2) { for(x=0;x<(a/3*3-1);x++) { if(num[x][b]==num[a][b]) {res=0;} } } if(b>2) { for(y=0;y<(b/3*3-1);y++) { if(num[a][y]==num[a][b]) {res=0;} } } return res; }