poj 2676 sudoku(DFS)
2014-04-16 17:46
441 查看
题意是填数独。
思路是深搜,数据比较小有点像暴力。
记下所有要填点的位置,然后从1到9一个一个数字试,能填就填上,不能就回溯。
队内热身赛时卡在小九宫格的判断和对dfs搜索代码的模糊。
小九宫格用 /3*3 来定位,比如判断(4,8)所在的小九宫格的起点,(4 / 3 * 3 ,8 / 3 * 3)=(3 ,6),所以这个点在起点为( 3 ,6 )的小九宫格内,遍历这个小九宫格即可。
如图:
![](http://img.blog.csdn.net/20140416174402390?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzUwODIxMw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
酱紫就处理好了。
代码:
热身赛的时候脑袋糊糊的,像当时噩梦般的高考。
基础不牢,地动山摇。
思路是深搜,数据比较小有点像暴力。
记下所有要填点的位置,然后从1到9一个一个数字试,能填就填上,不能就回溯。
队内热身赛时卡在小九宫格的判断和对dfs搜索代码的模糊。
小九宫格用 /3*3 来定位,比如判断(4,8)所在的小九宫格的起点,(4 / 3 * 3 ,8 / 3 * 3)=(3 ,6),所以这个点在起点为( 3 ,6 )的小九宫格内,遍历这个小九宫格即可。
如图:
酱紫就处理好了。
代码:
#include<stdio.h> int sudoku[10][10]; int v[81][2]; //要填的点的位置 bool judge(int x, int y, int k) { for(int i = 0; i < 9; i++) { if(sudoku[x][i]==k||sudoku[i][y]==k) return false; } int qx = x/3*3; int qy = y/3*3; //小九宫格判断初始 for(int i = 0; i<3; i++) { for(int j=0; j<3; j++) { if(sudoku[qx + i][qy + j]==k) return false; } } return true; } bool dfs(int dep) { if(dep < 0) return true; for(int i = 1; i <= 9; i++) { int x = v[dep][0]; int y = v[dep][1]; if(judge(x, y, i)) { sudoku[x][y] = i; if(dfs(dep - 1)) return true; sudoku[x][y] = 0; } } return false; } int main() { #ifdef LOCAL freopen("in.txt","r",stdin); #endif // LOCAL int n; scanf("%d", &n); getchar(); while(n--) { int num = 0; char tmp; for(int i = 0; i < 9; i++) { for(int j = 0; j < 9; j++) { scanf("%c", &tmp); sudoku[i][j] = tmp - '0'; if(sudoku[i][j]==0) { v[num][0] = i; v[num][1] = j; num++; } } getchar(); } dfs(num-1); for(int i = 0; i < 9; i++) { for(int j = 0; j < 9; j++) { printf("%d", sudoku[i][j]); } printf("\n"); } } return 0; }
热身赛的时候脑袋糊糊的,像当时噩梦般的高考。
基础不牢,地动山摇。
相关文章推荐
- POJ 2676 sudoku DFS
- poj 2676Sudoku(DFS+回溯)
- POJ 2676 Sudoku1 (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 dfs之2676 Sudoku
- 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)