资源描述:
《求解数独的计算机程序》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、〃刘天一,2013年1月29日,THU,DPL编程风格比较烂,人家见谅〃划数法解数独,仿照人的思维#include#include#include#includetypedefunsignedintuint;typedefstruct{uintx;uinty;charnum[9];charall;}able;//用于记录可以填充的数FILE*mopen(uintfilenum);//打开文件voidsave(charbuffer[10][10],uintzushu);//显示结果void
2、read(charbuffer]10][10],uintzushu);//读取已知条件voidnumprint(charbuffer[10][10],uintzushu);//显示结果voidmat(charmatnum[9][2],uintx,uinty);〃返回某点所属矩阵的9个点boolok(charbuffer[10][10]);//判断一个排列是否符合规则boolok_mat(charbuffer[10][10],uintmat_x,uintmat_y);//判断一个小矩阵内的9个数是否符合规则voidhuashu1(charbuffer0[10][
3、10],charbuffer[101(1()][10]);//划掉所有数voidhuashuO(charbuf'fer[10][10][10],uintx,uinty,charnum);//划去一个数voidfi!13(charbuffer[10][10][10],uintx,uinty,uintz);〃填充0voidfillable(able*a,charbuffer[10][10][10],charbuffer0[10][10]);//生成记录表,哪些数可以填充booleasyfill(able*a,charbuffer0[101[10],charbuff
4、er[10][10][10]);//简单空格填充inttryfill(able*a,charbuffer[10][10][10],chartrymatf1()][10],uinttrynum);//复杂空格填充尝试uinttrymax(able*a);〃尝试的最人次数(小于,不能小于等于)voidcopy2(charbuffcrO[10][10],chartrymatf10][10]);voidcopy3(charbuffer1[10][10][10],charbuffer2[10][10][10]);voidcopya(able*al,able*a2);in
5、tmain(){〃标记0是质数1合数charbuffer0[10J[10J;charbufferlll0][10][10];ablea[81J;fill3(buffcr1,10,10,10);read(bufferO,O);numprint(buffer(),());huashu1(buffcrO,buffcii);fillable(a,buffer1,bufferO);while(easyfill(a,bufferO,buffer1)){fillable(a,bufferl,buffer());}if(ok(bufferO)){numprint(buffer
6、O,O);save(bufferO,l);printf(,,FINISHEDH);system(”PAUSE");return0;}//uintmax=trymax(a);uinttry0=0;ablenewa[81];charnewmat[10J[10J;charnewbuffer[101fl0]fl0];while(1){copy2(buffer0,newmat);copy3(bufferl.newbuffer);copya(a,newa);if(tryfill(newa,newbuffer,newmat,try()))break;if(ok(
7、newmat)){numprint(newmat,tryO);save(newmat,try());}tryO++;}printf(nFINISHEDM);system(”PAUSE");return0;}voidnum2str(uintx,char*str)uintx2;uintp=0;x2=x;while(x2>=10){str[p]=x2%10;x2=(x2-str[p])/10;str[p]+='O';P++;}str[p]=x2%10+'0*;P++;str[p]=O;}FILE*mopen(uintfilenum){charnumcha
8、r[10];num2str(filen