数独————————C++

时间:2012-05-11 15:54:54
【文件属性】:

文件名称:数独————————C++

文件大小:173KB

文件格式:RAR

更新时间:2012-05-11 15:54:54

C++

一个简单的解数独的小程序 //***求数独的解,参数mod为0或1,time0为搜索开始时的时间,mod=0时仅检查Data1中数独是否有解,有解则抛出1,mod=1时求出所有解并输出*** { int i,j,im=-1,jm,min=10; int mark[10]; for(i=0;i<9;i++) { for(j=0;j<9;j++) { if(Data1[i][j]) //如果该位置有数据则跳过 { continue; } int c=Uncertainty(i,j,mark); //如果该位置为空则先求不确定度 if(c==0) //如果不确定度为0则表示该数独无解 { return; } if(cTIMEOUT) { throw(Solutions); } } return; } else //只给出一个解 { throw(1); //跳出所有递归调用,返回1 } } Uncertainty(im,jm,mark); //从不确定度最小的位置开始解 for(i=1;i<=9;i++) { if(mark[i]==0) { Data1[im][jm]=i; //对不确定度最小的位置尝试可能的赋值 Search(mod,time0); //递归调用 } } Data1[im][jm]=0; } void Csudoku::Set(int n) //***随机生成数独,参数n表示数独中待填元素个数*** { srand((unsigned)time(NULL)); int i,j,k; do { for(i=0;i<9;i++) //随机给每行的某一个位置赋值 { for(j=0;j<9;j++) { Data1[i][j]=0; } j=rand()%9; Data1[i][j]=i+1; } } while(!Solve(0)); //按照随机赋的值给出一个解 for(k=0;k0) { Data1[i][j]=0; k++; } } for(i=0;i<9;i++) //将生成的数独存入Data0数组 { for(j=0;j<9;j++) { Data0[i][j]=Data1[i][j]; } } }


【文件预览】:
SUDOKU
----SUDOKU.exe(572KB)
----rule_files()
--------image007.gif(1KB)
--------image006.gif(1KB)
--------image003.gif(470B)
--------filelist.xml(526B)
--------themedata.thmx(3KB)
--------image004.gif(3KB)
--------image002.gif(3KB)
--------Thumbs.db(26KB)
--------image005.gif(1KB)
--------image010.gif(1KB)
--------image008.gif(1KB)
--------image001.gif(2KB)
--------image009.gif(1KB)
--------colorschememapping.xml(314B)
----LoadSample.txt(313B)
----sudoku.txt(169B)
----rule.htm(52KB)
----报告.doc(71KB)
----SUDOKU.cpp(15KB)

网友评论