2、b.h>l#includelinta[10][10];lintdeal[82];lintfix[82];lintnsure[82][10];lintb[82];lintmain()//主函数l{lsrand(time(0));//设置时间种子为0lstart();//出题函数lreturn0;l}lvoidset()//初始化函数,所有位置设为0l{linti,j,k;llfor(i=0;i<9;i++)lfor(j=0;j<9;j++)la[i][j]=0;lfor(k=1;k<=81;k++)ldeal[k]=0;l}lint
3、transform_to_line(inti)l{lintline;lline=i/9+(i%9!=0);//计算i所在行lreturnline;l}llinttransform_to_row(inti)l{lintrow;lrow=i%9+9*(i%9==0);//获得i所在列lreturnrow;l}lvoidtransform_to_a(inti)//deal[i]->a[line][row]的转换l{lintl,r;ll=transform_to_line(i);//获得i所在的行lr=transform_to_row(i);//获得i所
4、在的列la[l][r]=deal[i];l}lvoidrandom()//从1-9中随机产生几个值输入deal[1]至deal[9]l{linti,j,r;lintchange=1;//标记lintb[10]={0,0,0,0,0,0,0,0,0,0};lfor(i=1;i<=9;)//从1-9中随机产生9个不同的值l{lchange=1;lj=1+rand()%9;//产生一个1~9的数lfor(r=1;r<=9;r++)lif(b[r]==j)change=0;//有重复的就舍弃lif(change==1)l{b[i]=j;i++;}l}lf
5、or(i=1;i<=9;i++)l{ldeal[i]=b[i];//将b中元素存入deal中ltransform_to_a(i);//deal中数存入al}l}lintline(intline,intvalue)//检验行l{linti;lfor(i=1;i<=9;i++)l{lif(a[line][i]==value)return0;//不符合规则返回0l}lreturn1;l}lintrow(introw,intvalue)//检验列l{linti;lfor(i=1;i<=9;i++)l{lif(a[i][row]==value)return
6、0;l}lreturn1;l}lintsquare(intline,introw,intvalue)//检验3*3的九宫l{lintL,R,i,j;lL=(line%3!=0)+line/3;//L表示所在九宫的行数lR=(row%3!=0)+row/3;//R表示所在九宫的列数lfor(i=(L-1)*3+1;i<=L*3;i++)l{lfor(j=(R-1)*3+1;j<=R*3;j++)lif(a[i][j]==value)return0;l}lreturn1;l}lintbeExist(inti,intj)//判断数组中位置为i的元素是否
7、已确定l{lintl,r;ll=transform_to_line(i);//获得第i个数在a中的行lr=transform_to_row(i);//获得第i个数在a中的列lif(line(l,j)*row(r,j)*square(l,r,j)==0)lreturn1;//不合规则返回1lelselreturn0;l}lvoidsetPb()//通过nsure数组确定各个位置的可能值l{linti,j;lfor(i=1;i<=81;i++)//i为deal中位置为i的元素l{lfor(j=1;j<=9;j++)//j为1~9的可能值,不可能为j的
8、设为-1l{lif(deal[i]!=0)nsure[i][j]=-1;//若deal[i]已输入数据,则将可能值设为-1llelsei