HDU5547
2016-05-18 15:01
239 查看
Problem: Sudoku
Source: The 2015 China Collegiate Programming Contest
Description: 解一个4*4的数独。
Solution: 暴力搜索就好,注意这道题的Hash判重的方法。
Code(C++):
Source: The 2015 China Collegiate Programming Contest
Description: 解一个4*4的数独。
Solution: 暴力搜索就好,注意这道题的Hash判重的方法。
Code(C++):
#include <stdio.h> #include <string.h> const int M=4+2; const int E=4; bool used_r[M][M],used_c[M][M],used_g[M][M][M]; int map[M][M]; bool flag; void dfs(int x,int y) { if(x==E+1&&y==1){ flag=true; return ; } if(flag) return ; int X,Y; if(y+1<=E) X=x,Y=y+1; else X=x+1,Y=1; if(map[x][y]) dfs(X,Y); else for(int i=1;i<=E;i++) if(!used_r[x][i]&&!used_c[y][i]&&!used_g[(x-1)/2][(y-1)/2][i]){ used_r[x][i]=true; used_c[y][i]=true; used_g[(x-1)/2][(y-1)/2][i]=true; map[x][y]=i; dfs(X,Y); if(flag) return ; used_r[x][i]=false; used_c[y][i]=false; used_g[(x-1)/2][(y-1)/2][i]=false; map[x][y]=0; } } int main() { int K=1,N; for(scanf("%d",&N);N--;){ memset(map,0,sizeof(map)); memset(used_r,false,sizeof(used_r)); memset(used_c,false,sizeof(used_c)); memset(used_g,false,sizeof(used_g)); char str[M]; for(int i=1;i<=E;i++){ scanf("%s",str); for(int j=1;j<=E;j++){ map[i][j]=str[j-1]=='*'? 0:str[j-1]-'0'; used_r[i][map[i][j]]=true; used_c[j][map[i][j]]=true; used_g[(i-1)/2][(j-1)/2][map[i][j]]=tr bbed ue; } } flag=false; dfs(1,1); printf("Case #%d:\n",K++); for(int i=1;i<=E;i++){ for(int j=1;j<=E;j++) printf("%d",map[i][j]); puts(""); } } return 0; }
相关文章推荐
- 图论学习笔记 Part 1
- 普通函数、构造函数、inline函数、友元函数为什么不能声明为虚函数
- Android中AsyncTask使用教程及源码分析
- delphi中如何将string类型的字符串数据转化成byte[]字节数组类型的数据
- 冲刺阶段day7
- Android学习小记-----拦截电话/拒接电话,规避拒接电话前响一声或者两声的问题
- SQL viewId 比较好看的 Id
- SOCKSify Ruby
- Android Validator 验证
- MFC串口调试工具教程
- 关系模式候选码
- Java面试题(02)_数组
- Python格式化输出
- eclipse debug 技巧
- 类变量的@protected ,@private,@public,@package,声明各有什么含义?
- js中的prototype和基于prototype的继承总结
- 算法杂货铺——分类算法之决策树(Decision tree)
- 玩转 Linux 之:磁盘分区、挂载知多少?
- 需求评审阶段和设计评审阶段测试人员该做什么呢
- Python网络爬虫框架scrapy的学习