poj 2676 Sudoku
来源:互联网 发布:java接口管理系统 编辑:程序博客网 时间:2024/05/18 21:41
题意:填写数独中所缺的。
方法:深搜
代码:
#include <iostream>#include <cstdio>#define N 9using namespace std;int a[N][N];bool flag;bool judge(int hang, int lie, int val){ int h = hang/3, l = lie/3; for (int i=h*3; i<h*3+3; i++)//保证数字所在的9个格子没有数相同 for (int j=l*3; j<l*3+3; j++) if (a[i][j] == val && a[i][j]!=0) return false; for (int i=0; i<N; i++)//保证数字所在的行没有数相同 if (a[hang][i] == val && a[hang][i]!=0) return false; for (int i=0; i<N; i++)//保证数字所在的列没有数相同 if (a[i][lie] == val && a[i][lie]!=0) return false; return true;}void dfs(int n){ int hang = n/9, lie = n%9; if (n==81) { flag = true; return ; } if (a[hang][lie] != 0) dfs(n+1); else { for (int i=9; i>=1 && !flag; i--) if (judge(hang, lie, i)) { a[hang][lie] = i; dfs(n+1); } if (!flag)//当已经找到数独的时候不在回溯 a[hang][lie] = 0; }}int main(){ int n; char c, temp; scanf("%d", &n); getchar(); while (n--) { for (int i=0; i<N; i++) { for (int j=0; j<N; j++) { scanf("%c", &c); a[i][j]=c-'0'; } scanf("%c",&temp); } flag = false; dfs(0); for (int i=0; i<N; i++) { for (int j=0; j<N; j++) printf("%d", a[i][j]); printf("\n"); } } return 0;}
- poj 2676 Sudoku
- POJ 2676 Sudoku
- POJ 2676 Sudoku dfs
- Poj 2676 Sudoku
- POJ 2676 Sudoku [暴搜]
- POJ 2676 Sudoku
- POJ 2676 Sudoku
- POJ 2676 Sudoku
- POJ 2676 Sudoku
- POJ 2676 Sudoku
- POJ 2676—Sudoku
- POJ-2676-Sudoku
- poj 2676 Sudoku
- POJ 2676 Sudoku
- POJ 2676 Sudoku
- POJ 2676 Sudoku
- POJ 2676 sudoku
- poj 2676 Sudoku
- uRxvt 字体配置及时生效命令
- android webview 常见问题
- Spring数据源配置
- 各种蹂躏——基础dp
- zoj 2362 Beloved Sons【二分匹配】
- poj 2676 Sudoku
- C++与Java的语法区别
- 如何制作一款像超级玛丽兄弟一样基于平台的游戏-第二部分 (xcode,物理引擎,TMXTiledMap相关应用)
- 人生规划第一步--以此为证,时刻鞭笞自己!
- POJ 2739题解---小菜
- 不刷机让越狱后的iphone恢复出厂设置
- web服务器boa的移植
- sgu 105 Div 3
- 润乾报表——快捷公式