2、b.h>l#includelinta[10][10];lintdeal[82];lintfix[82];lintnsure[82][10];lintb[82];lintmain()//主函數(shù)l{lsrand(time(0));//設(shè)置時(shí)間種子為0lstart();//出題函數(shù)lreturn0;l}lvoidset()//初始化函數(shù),所有位置設(shè)為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);//計(jì)算i所在行l(wèi)returnline;l}llinttransform_to_row(inti)l{lintrow;lrow=i%9+9*(i%9==0);//獲得i所在列l(wèi)returnrow;l}lvoidtransform_to_a(inti)//deal[i]->a[line][row]的轉(zhuǎn)換l{lintl,r;ll=transform_to_line(i);//獲得i所在的行l(wèi)r=transform_to_row(i);//獲得i所
4、在的列l(wèi)a[l][r]=deal[i];l}lvoidrandom()//從1-9中隨機(jī)產(chǎn)生幾個(gè)值輸入deal[1]至deal[9]l{linti,j,r;lintchange=1;//標(biāo)記lintb[10]={0,0,0,0,0,0,0,0,0,0};lfor(i=1;i<=9;)//從1-9中隨機(jī)產(chǎn)生9個(gè)不同的值l{lchange=1;lj=1+rand()%9;//產(chǎn)生一個(gè)1~9的數(shù)lfor(r=1;r<=9;r++)lif(b[r]==j)change=0;//有重復(fù)的就舍棄lif(change==1)l{b[i]=j;i++;}l}lf
5、or(i=1;i<=9;i++)l{ldeal[i]=b[i];//將b中元素存入deal中l(wèi)transform_to_a(i);//deal中數(shù)存入al}l}lintline(intline,intvalue)//檢驗(yàn)行l(wèi){linti;lfor(i=1;i<=9;i++)l{lif(a[line][i]==value)return0;//不符合規(guī)則返回0l}lreturn1;l}lintrow(introw,intvalue)//檢驗(yàn)列l(wèi){linti;lfor(i=1;i<=9;i++)l{lif(a[i][row]==value)return
6、0;l}lreturn1;l}lintsquare(intline,introw,intvalue)//檢驗(yàn)3*3的九宮l{lintL,R,i,j;lL=(line%3!=0)+line/3;//L表示所在九宮的行數(shù)lR=(row%3!=0)+row/3;//R表示所在九宮的列數(shù)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)//判斷數(shù)組中位置為i的元素是否
7、已確定l{lintl,r;ll=transform_to_line(i);//獲得第i個(gè)數(shù)在a中的行l(wèi)r=transform_to_row(i);//獲得第i個(gè)數(shù)在a中的列l(wèi)if(line(l,j)*row(r,j)*square(l,r,j)==0)lreturn1;//不合規(guī)則返回1lelselreturn0;l}lvoidsetPb()//通過nsure數(shù)組確定各個(gè)位置的可能值l{linti,j;lfor(i=1;i<=81;i++)//i為deal中位置為i的元素l{lfor(j=1;j<=9;j++)//j為1~9的可能值,不可能為j的
8、設(shè)為-1l{lif(deal[i]!=0)nsure[i][j]=-1;//若deal[i]已輸入數(shù)據(jù),則將可能值設(shè)為-1llelsei