POJ 2676 sudoku dfs
来源:互联网 发布:辐射4bodyslide数据 编辑:程序博客网 时间:2024/04/29 14:42
题意:数独游戏,用1-9个数字填满9 * 9 的格子,让每行,每列,每个小的3 * 3 格子都有唯一的一个数字。
思路:简单的dfs。
代码如下:
#include <cstdio>#include <algorithm>#include <cstring>using namespace std;char sudoku[9][20];bool rows[9][10];bool columns[9][10];bool blocks[9][10];bool dfs(int n){ if(n == 81) return true; int x = n / 9, y = n % 9; int id = x / 3 * 3 + y / 3; if(sudoku[x][y] != 0) return dfs(n+1); else{ for(int i = 1; i <= 9; ++i){ if(!rows[x][i] && !columns[y][i] && ! blocks[id][i]){ rows[x][i] = columns[y][i] = blocks[id][i] = true; sudoku[x][y] = i; if(dfs(n+1)) return true; rows[x][i] = columns[y][i] = blocks[id][i] = false; sudoku[x][y] = 0; } } } return false;}int main(void){ //freopen("in","r",stdin); int T; scanf("%d",&T); while(T--){ memset(rows,0,sizeof(rows)); memset(columns,0,sizeof(columns)); memset(blocks,0,sizeof(blocks)); for(int i = 0; i < 9; ++i) scanf("%s",sudoku[i]); for(int i = 0; i < 9; ++i){ for(int j = 0; j < 9; ++j){ sudoku[i][j] -= '0'; if(sudoku[i][j] != 0){ rows[i][sudoku[i][j]] = true; columns[j][sudoku[i][j]] = true; blocks[i / 3 * 3 + j / 3][sudoku[i][j]] = true; } } } dfs(0); for(int i = 0; i < 9; ++i) for(int j = 0; j < 9; ++j) sudoku[i][j] += '0'; for(int i = 0; i < 9; ++i) printf("%s\n",sudoku[i]); } 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)
- 在mysql命令行里面用AUTO_INCREMENT自动编号,且必须与PRIMARY KEY组合使用
- JAVA多继承(multiple inheritance)的实现
- 让Hibernate支持DBCP数据源
- 逆向某粘滞键后门
- Android-eclipse安装最新SVN插件
- POJ 2676 sudoku dfs
- iBATIS更新操作
- Map.Entry与Map不同
- TRAIN YOUR OWN OPENCV HAAR CLASSIFIER
- 仿写strcmp函数
- iBATIS删除操作
- 不使用ceph-deploy 手动安装两个节点的Ceph集群
- erlang file 追加写
- 32号码归属地代码的实现