POJ 2676 Sudoku(DFS)
2012-07-11 18:11
435 查看
题目链接
判断条件没搞好 2Y,全部是0的时候查出错。
判断条件没搞好 2Y,全部是0的时候查出错。
#include <stdio.h> #include <stdlib.h> #include <string.h> char p[11][11]; int key[11][11]; int r[11][11],c[11][11],o[11][11],z; int judge(int i,int j) { int a; if(i <= 2) { if(j <= 2) a = 0; else if(j <= 5) a = 1; else if(j <= 8) a = 2; } else if(i <= 5) { if(j <= 2) a = 3; else if(j <= 5) a = 4; else if(j <= 8) a = 5; } else if(i <= 8) { if(j <= 2) a = 6; else if(j <= 5) a = 7; else if(j <= 8) a = 8; } return a; } void dfs(int x,int y) { int a,b,i,j; if(z) return ; j = judge(x,y); if(x == 9&&y == 0) { for(i = 0; i <= 8; i ++) { for(j = 0; j <= 8; j ++) printf("%d",key[i][j]); printf("\n"); } z = 1; return ; } if(x > 8) return ; if(y == 8) { a = x+1; b = 0; } else { a = x; b = y+1; } if(key[x][y] != 0) dfs(a,b); else { for(i = 1; i <= 9; i ++) { if(!r[x][i]&&!c[y][i]&&!o[j][i]) { r[x][i] ++; c[y][i] ++; o[j][i] ++; key[x][y] = i; dfs(a,b); key[x][y] = 0; r[x][i] = 0; c[y][i] = 0; o[j][i] = 0; } } } } int main() { int i,j,k,t; scanf("%d%*c",&t); while(t--) { z = 0; memset(key,0,sizeof(key)); memset(r,0,sizeof(r)); memset(c,0,sizeof(c)); memset(o,0,sizeof(o)); for(i = 0; i <= 8; i ++) gets(p[i]); for(i = 0; i <= 8; i ++) for(j = 0; j <= 8; j ++) { if(p[i][j] != '0') { key[i][j] = p[i][j] - '0'; k = key[i][j]; r[i][k] ++; c[j][k] ++; o[judge(i,j)][k]++; } } dfs(0,0); } return 0; }
相关文章推荐
- POJ 2676 Sudoku (DFS)
- POJ 2676 Sudoku(经典DFS)
- poj-2676-Sudoku-dfs(其实就是爆搜。。)
- POJ-2676-Sudoku-DFS
- POJ-2676 Sudoku (DFS)
- POJ-2676 Sudoku(DFS)
- Poj 2676 Sudoku[dfs]
- poj 2676 Sudoku (dfs)
- poj 2676 sudoku(DFS)
- POJ 2676 Sudoku (数独求解器 DFS)
- POJ_2676 Sudoku(DFS)
- POJ 2676 Sudoku (DFS回溯剪枝)
- poj 2676 sudoku dfs
- poj--2676 Sudoku(dfs)
- [DFS]poj 2676 Sudoku 数独问题
- POJ 2676 Sudoku dfs
- POJ 2676-Sudoku(DFS)
- DFS POJ 2676 Sudoku
- poj 2676 Sudoku ( dfs )
- POJ 2676 sudoku dfs