Poj 2676 Sudoku[dfs]
题目大意:
九宫格问题,也有人叫数独问题
把一个9行9列的网格,再细分为9个3*3的子网格,要求每行、每列、每个子网格内都只能使用一次1~9中的一个数字,即每行、每列、每个子网格内都不允许出现相同的数字。
0是待填位置,其他均为已填入的数字。
要求填完九宫格并输出(如果有多种结果,则只需输出其中一种)
如果给定的九宫格无法按要求填出来,则输出原来所输入的未填的九宫格
思路:
DFS 深搜
char map[10][10];/*数据存储*/
bool row[10][10];/*行存在数*/
bool col[10][10];/*列存在数*/
bool grid[10][10];/*格存在数*/
1 /*poj2676 Sudoku*/ 2 #include <iostream> 3 #include <cstdio> 4 #include <cstring> 5 using namespace std; 6 7 char map[10][10]; 8 bool row[10][10];/*行存在数*/ 9 bool col[10][10];/*列存在数*/ 10 bool grid[10][10];/*格存在数*/ 11 12 bool dfs(int x, int y) 13 { 14 if(x == 10) 15 return true; 16 bool flag = false; 17 if(map[x][y] - '0') 18 { 19 if(y == 9) 20 flag = dfs(x+1, 1); 21 else{ 22 flag = dfs(x, y+1); 23 } 24 if(flag) 25 return true; 26 else{ 27 return false; 28 } 29 } 30 else{ 31 for(int i = 1; i<= 9; i++) 32 { 33 if(!row[x][i] && !col[y][i] && !grid[3*((x-1)/3) + (y-1)/3 + 1][i]) 34 { 35 map[x][y] = i+'0'; 36 row[x][i] = true; 37 col[y][i] = true; 38 grid[3*((x-1)/3) + (y-1)/3 + 1][i] = true; 39 40 if(y == 9) 41 flag = dfs(x+1, 1); 42 else{ 43 flag = dfs(x, y+1); 44 } 45 if(!flag) 46 { 47 map[x][y] = '0'; 48 row[x][i] = false; 49 col[y][i] = false; 50 grid[3*((x-1)/3) + (y-1)/3 + 1][i] = false; 51 52 } 53 else{ 54 return true; 55 } 56 } 57 } 58 } 59 return false; 60 } 61 62 void judge() 63 { 64 memset(row, 0, sizeof(row)); 65 memset(col, 0, sizeof(col)); 66 memset(grid, 0, sizeof(grid)); 67 68 for(int i = 1; i<= 9; i++) 69 { 70 for(int j = 1; j<= 9; j++) 71 { 72 if(map[i][j] != '0') 73 { 74 row[i][map[i][j]-'0'] = true; 75 col[j][map[i][j]-'0'] = true; 76 grid[3*((i-1)/3) + (j-1)/3 + 1][map[i][j]-'0'] = true; 77 } 78 } 79 } 80 /* for(int i = 1; i<= 9; i++) 81 { 82 for(int j = 1; j<= 9; j++) 83 cout<<grid[i][j]; 84 printf("\n"); 85 } 86 printf("\n"); 87 */ 88 } 89 90 void solve() 91 { 92 memset(map, 0, sizeof(map)); 93 for(int i = 1; i<= 9; i++) 94 { 95 gets(map[i] +1); 96 } 97 judge(); 98 dfs(1, 1); 99 100 for(int i = 1; i<= 9; i++) 101 puts(map[i] + 1); 102 printf("\n"); 103 } 104 105 int main() 106 { 107 int t; 108 // freopen("test.txt", "r", stdin); 109 scanf("%d", &t); 110 getchar(); 111 while(t--) 112 { 113 solve(); 114 } 115 return 0; 116 }
转载于:https://www.cnblogs.com/ygdblogs/p/4929849.html
Poj 2676 Sudoku[dfs]相关推荐
- POJ - 2676 Sudoku(dfs)
题目链接:点击查看 题目大意:解数独,具体规则是,在一个9*9的区域内填充1~9的数字,要求: 每列不许有重复数字 每行不许有重复数字 每个3*3的九宫格内不许有重复数字 题目分析:因为至多只有81个 ...
- POJ 2676 Sudoku【DancingLinks,数独】
http://poj.org/problem?id=2676 POJ 2676 Sudoku 也是求解规模为9*9的数独问题,与POJ 3074 Sudoku相同的问题,只是修改了输入输出格式而已.. ...
- POJ 2676 Sudoku (数独求解器 DFS)
题目链接 POJ2676 题目大意 输入n个数独,空格用0表示,填数独(符合的一种方案即可). 分析 类似于八皇后的简单搜索题,用DFS回溯法求解. 将空格的位置都记录下来,1个1个填下去,填不下去就 ...
- POJ 2676 Sudoku 数独
点击打开链接 Sudoku Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 12360 Accepted: 6168 ...
- POJ - 2386 (dfs简单应用)
POJ - 2386 (dfs深度优先搜索) 题目正文: Due to recent rains, water has pooled in various places in Farmer John' ...
- 【POJ - 2676】Sudoku (经典深搜,dfs数独)
题干: Sudoku is a very simple task. A square table with 9 rows and 9 columns is divided to 9 smaller s ...
- POJ 2676/2918 数独(dfs)
思路:记录每行每列每一个宫已经出现的数字就可以.数据比較弱 另外POJ 3074 3076 必须用剪枝策略.但实现较麻烦,还是以后学了DLX再来做吧 //Accepted 160K 0MS #incl ...
- POJ 2386(DFS)
深度优先搜索属于图算法的一种,英文缩写为DFS即Depth First Search.其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次. 举例说明之:下图是一个无向 ...
- TOJ 3287 Sudoku dfs
3287: Sudoku 描述 Sudoku is a very simple task. A square table with 9 rows and 9 columns is divided to ...
最新文章
- 5 种将死的编程语言!
- python在excel中的应用-Python利用pandas处理Excel数据的应用详解
- c语言变量作为数组长度,为什么在C中不允许将数组的大小作为常量变量但在C中允许?...
- 由浅到深理解ROS(6)-坐标转换
- java class 文件分析_大概优秀的java程序员都要会分析class文件吧
- 【系列7】使用Dockerfile创建带mysql5.7的Centos Docker镜像1
- 蓝桥杯 ALGO-106 算法训练 6-3判定字符位置
- 2012/7/25Extjs学习随笔
- 阿里13篇论文入选数据库顶会!PolarDB技术被认为引领数据库发展方向
- 设置vim默认显示行号
- CDN、SCDN、DCDN是什
- 计算机为什么逻辑判断准确,逻辑判断之评价型答题技巧
- 新手小白学JAVA IO流 File 字节流 字符流
- webgame开发入门
- 路由协议常见FAQ-V1.1
- Hou的图像显著性计算模型
- matlab plot函数详解
- 【R实验.8】方差分析
- 【递推】HDU -2018 母牛的故事斐波那契兔子数列
- linux下usb充电问题,如何解决在Ubuntu上iPad不能充电的问题
热门文章
- SpringBoot学习笔记(9)----SpringBoot中使用关系型数据库以及事务处理
- NOIp2018滚粗记
- QSharedMemory共享内存实现进程间通讯(IPC)及禁止程序多开
- Selenium Webdriver ie 浏览器
- 写一个简单控制台启动的mcv服务
- 在Windows XP下,安装VS 2010 Express For Windows Phone .
- 如何停止运行在服务器的项目,怎么启动和停止服务器
- bit不是java基本类型吗_Java bit / byte 基本数据类型
- 给数据库字段增加前缀
- 微信小程序的userInfoReadyCallback理解