POJ_2676_Sudoku
2015-07-23 18:36
405 查看
数独,当年一家人都很疯狂的玩
如今用电脑dfs非常容易的就解决了。
判断在同一大格里可以填有点麻烦。
题目每组输入其实是9个整数,所以……
另外就是题目要求对于有多个解的题目,输出一个可行解。
如今用电脑dfs非常容易的就解决了。
判断在同一大格里可以填有点麻烦。
题目每组输入其实是9个整数,所以……
另外就是题目要求对于有多个解的题目,输出一个可行解。
#include <iostream> #include <stdio.h> using namespace std; int ss[9]; //输入这里也卡了一下 int s[9][9]; int f; bool cilr(int x,int y,int n) //判断是不是在同一行同一列 { for(int i=0;i<9;i++) if(n==s[x][i]||n==s[i][y]) return 0; return 1; } bool cibox(int x,int y,int n) //判断是不是在同一个小格子里 { int px,py; if(x<3) px=0; else if(x>5) px=6; else px=3; if(y<3) py=0; else if(y>5) py=6; else py=3; for(int i=px;i<px+3;i++) for(int j=py;j<py+3;j++) if(s[i][j]==n) return 0; return 1; } void shows() //打印数独 { for(int i=0;i<9;i++) { for(int j=0;j<9;j++) printf("%d",s[i][j]); printf("\n"); } } void clear() //清空数独 { for(int i=0;i<9;i++) for(int j=0;j<9;j++) s[i][j]=0; } void dfs(int x,int y) { if(f) //这个标记用来确定答案是否出现了 return; if(x==9) //数独填完了 { shows(); f=1; return; } if(s[x][y]) //已经填了x,y那么下个格子 { if(y<8) dfs(x,y+1); else dfs(x+1,0); } else { for(int i=1;i<=9;i++) { if(cilr(x,y,i)&&cibox(x,y,i)) { s[x][y]=i; //cout<<i; dfs(x,y); //cout<<"re"<<endl; //第一次总是在中间停住 } } s[x][y]=0; //这个语句很关键,最开始想的是从左向右从上到下填不会需要 } //但回退后如果后面的节点回退时没有清空会影响回退后的判断 } int main() { int t; scanf("%d",&t); while(t--) { f=0; for(int i=0;i<9;i++) scanf("%d",&ss[i]); //注意如果用读整数的方法只能读进来9个整数 for(int i=0;i<9;i++) for(int j=8;j>=0;j--) //转化为9*9格里面的数 { s[i][j]=ss[i]%10; ss[i]/=10; } dfs(0,0); clear(); } return 0; }
相关文章推荐
- 理解OpenContrail(by quqi99)
- DFS HDU 5305 Friends
- 10分钟23张图,带你了解中国互联网现状
- For example,Given input array A=[1,1,2], your fuction will return length=2,ans A is now {1,2}
- javah 命令找不到类文件的解决办法
- LoadLibrary 失败时候,可以试下LoadLibraryEx
- 暑假集训——个人训练赛04——E题
- NSNumber,NSValue
- F - True Liars - poj1417(背包+并查集)
- linux sed 个人常用的
- redis与mysql数据同步
- Visitor Pattern
- Code First06---CodeFirst中的一对多关系
- MySQL 5.6对已有Mysql单实例的机器,再添加mysql数据库,实现单机多实例
- 上传文件到github
- 2015多校联合训练赛hdu 5301 Buildings 2015 Multi-University Training Contest 2 简单题
- 非常好用的两个PHP函数 serialize()和unserialize()
- Java clone方法(下)
- 列出Excel中所有sheet页名
- ***JAVA多线程的应用场景和应用目的举例