數(shù)獨(dú)程序設(shè)計(jì)與相關(guān)代碼.docx

數(shù)獨(dú)程序設(shè)計(jì)與相關(guān)代碼.docx

ID:52199430

大?。?8.11 KB

頁數(shù):8頁

時(shí)間:2020-03-24

數(shù)獨(dú)程序設(shè)計(jì)與相關(guān)代碼.docx_第1頁
數(shù)獨(dú)程序設(shè)計(jì)與相關(guān)代碼.docx_第2頁
數(shù)獨(dú)程序設(shè)計(jì)與相關(guān)代碼.docx_第3頁
數(shù)獨(dú)程序設(shè)計(jì)與相關(guān)代碼.docx_第4頁
數(shù)獨(dú)程序設(shè)計(jì)與相關(guān)代碼.docx_第5頁
資源描述:

《數(shù)獨(dú)程序設(shè)計(jì)與相關(guān)代碼.docx》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。

1、數(shù)獨(dú)程序設(shè)計(jì):l主要思想是:先設(shè)計(jì)出一個(gè)符合規(guī)則的終局,再覆蓋掉其中的一些數(shù)據(jù)作為初局,以已知數(shù)據(jù)的數(shù)目區(qū)分等級(jí)l主要過程是:l用a[10][10]來接收輸入數(shù)據(jù)的數(shù)組,先初始化為0l用一維數(shù)組deal[82]處理題目,并且保存最終結(jié)果l用fix[82]記錄哪些位置是確定的,確定為1,否則為0l用nsure[82][10]記錄所有未確定數(shù)字的可能性,第一維下標(biāo)是元素在deal中的位置,第二維是此元素的可能值l用b[82]來放置fix為0即未確定元素的位置,實(shí)現(xiàn)回溯算法數(shù)獨(dú)程序代碼:l#includel#include

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

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。