一秒内破解“最难数独”
来源:互联网 发布:3d家具软件 编辑:程序博客网 时间:2024/05/22 04:48
网上看到一则新闻,江苏69岁农民3天破解“世界最难数独”,我也写了个程序破解该数独。
原报道截图如下:
原题如下:
运行结果:
#include<iostream> #include<ctime> using namespace std;int p[9][9]; //存放九宫格数据int z[][9] = { //分为九小宫{0,0,0,1,1,1,2,2,2},{0,0,0,1,1,1,2,2,2},{0,0,0,1,1,1,2,2,2},{3,3,3,4,4,4,5,5,5},{3,3,3,4,4,4,5,5,5},{3,3,3,4,4,4,5,5,5},{6,6,6,7,7,7,8,8,8},{6,6,6,7,7,7,8,8,8},{6,6,6,7,7,7,8,8,8},};int r[9][10]; //r[i][j]为1时,第i行数字j(1~9)已放置int c[9][10]; //c[m][n]为1时,第m列数字n(1~9)已放置int d[9][10]; //d[x][y]为1时,第x宫数字y(1~9)已放置int count; //解的个数void input();void output();void init();void search(int);int main(){clock_t clockBegin, clockEnd; //用clock()来计时 毫秒 cout<<"输入:"<<endl;input();cout<<"输出:"<<endl;clockBegin = clock(); //计时开始 init();search(0);clockEnd = clock(); //计时结束 cout<<"计算用时"<< clockEnd - clockBegin<<"ms"<<endl; return 0;}void output(){int i,j;for(i = 0; i < 9; i++){for(j = 0; j < 9; j++){cout<<p[i][j]<<' ';}cout<<endl;}count++;}void init(){int i,j,x;for(i = 0; i < 9; i++){for(j = 0; j < 9; j++){x = p[i][j];if(x == 0)continue;else{r[i][x] = 1;c[j][x] = 1;d[z[i][j]][x] = 1;}}}}void search(int cur){if(count == 1) return;else if(cur == 81) //递归边界output();else{int i,j,k,l;i = cur / 9; //行号j = cur % 9; //列号if(p[i][j] != 0)search(cur + 1);else{l = z[i][j];for(k = 1; k <= 9; k++){if(r[i][k]||c[j][k]||d[l][k]) //检查行、列和宫内是否冲突continue;p[i][j] = k;r[i][k] = c[j][k] = d[l][k] = 1; //修改全局变量search(cur + 1);p[i][j] = r[i][k] = c[j][k] = d[l][k] =0;}}}}void input(){int i,j;for(i = 0; i < 9; i++)for(j = 0; j < 9;j++)cin>>p[i][j];}
- 一秒内破解“最难数独”
- 破解
- 破解
- 破解
- 破解
- 破解
- 破解
- 破解
- 破解
- 破解
- 用ABAP编程破解世界上最难数独游戏
- 破解天下,天下破解
- 破解MD5
- cmos破解
- 软件破解
- 破解JIRA
- ibqsPage破解
- 软件破解
- Linux 下使用 NMON 分析系统性能(其他如dstat、iostat)
- [转]在Ubuntu下解决 adb devices :???????????? no permissions 方法
- Windows下QtCreator编译过程
- hdu 1011 Starship Troopers(树上的01背包)
- ASIHttpRequest
- 一秒内破解“最难数独”
- asm读取字符串 dos 10号调用例子
- linux LCD驱动(二)--FrameBuffer
- ZOJ _3607_Lazier Salesgirl(贪心)
- IDOC step by step
- 长按拖动
- 在eclipse中使用git从github导入spring的源码
- 敏捷开发中的Code Review
- Linux LCD驱动(三)--图形显示