poj 2676 Sudoku(dfs)
来源:互联网 发布:死亡代理人知乎 编辑:程序博客网 时间:2024/05/31 19:08
用一个数组把空位记录下来,直接搜索就好了
#include <cstdio>#include <cstring>struct node{ int x,y;};node ns[100];int len;char g[10][10];bool flag;bool check(int k, int index){ int x = ns[index].x; int y = ns[index].y; int cx = (x/3)*3+1; int cy = (y/3)*3+1;//当前所在子矩阵的中心坐标 int mark = false; for(int i = 0; i < 9; ++i) { if(g[x][i] == k) { mark = true; break; } if(g[i][y] == k) { mark = true; break; } } if(mark) return false; if(g[cx][cy] == k || g[cx-1][cy-1] == k || g[cx-1][cy] == k || g[cx][cy-1] == k || g[cx+1][cy] == k || g[cx][cy+1] == k || g[cx-1][cy+1] == k || g[cx+1][cy-1] == k || g[cx+1][cy+1] == k) mark = true; if(mark) return false; return true;}void DFS(int index){ if(index == len) { flag = true; return; } for(int k = 1; k <= 9; ++k) { if(check(k+'0',index)) { g[ns[index].x][ns[index].y] = k+'0'; DFS(index+1); if(flag) return; g[ns[index].x][ns[index].y] = '0'; } }}int main(){ int t; scanf("%d",&t); while(t--) { flag = false; len = 0; for(int i = 0; i < 9; ++i) for(int j = 0; j < 9; ++j) { scanf(" %c",&g[i][j]); if(g[i][j] == '0') { ns[len].x = i; ns[len].y = j; ++len; } } DFS(0); for(int i = 0; i < 9; ++i) { for(int j = 0; j < 9; ++j) printf("%c",g[i][j]); printf("\n"); } } return 0;}
0 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-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)
- 详解C标准库中的atexit()函数
- CSS中后代选择器和子代选择器
- ghost博客主题更换
- LeetCode 55. Jump Game
- windows及linux下使用python多进程编程
- poj 2676 Sudoku(dfs)
- Linux学习篇------认识与学习bash
- salesforce CTI迁移(CTI Adapter --> Open CTI)
- http 方法状态便签
- Math.round()方法
- 使用boost库读写XML文件
- Java程序员开发参考资源
- 内部类
- 已知二叉树的先序遍历序列和中序遍历序列,输出该二叉树的后序遍历序列