【POJ - 2676】Sudoku (经典深搜,dfs数独)

题干:

Sudoku is a very simple task. A square table with 9 rows and 9 columns is divided to 9 smaller squares 3x3 as shown on the Figure. In some of the cells are written decimal digits from 1 to 9. The other cells are empty. The goal is to fill the empty cells with decimal digits from 1 to 9, one digit per cell, in such way that in each row, in each column and in each marked 3x3 subsquare, all the digits from 1 to 9 to appear. Write a program to solve a given Sudoku-task. 

Input

The input data will start with the number of the test cases. For each test case, 9 lines follow, corresponding to the rows of the table. On each line a string of exactly 9 decimal digits is given, corresponding to the cells in this line. If a cell is empty it is represented by 0.

Output

For each test case your program should print the solution in the same format as the input data. The empty cells have to be filled according to the rules. If solutions is not unique, then the program may print any one of them.

Sample Input

1
103000509
002109400
000704000
300502006
060000050
700803004
000401000
009205800
804000107

Sample Output

143628579
572139468
986754231
391542786
468917352
725863914
237481695
619275843
854396127

 

解题报告:

   直接搜索dfs。注意那个判断是否在同一个分块中的那个a数组,可以直接手写,也可以找规律推出一个公式。

AC代码:(1032ms)

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<map>
#include<cstring>
#define m_p make_pair
using namespace std;
int maze[10][10];
bool c[10][10],r[10][10],a[10][10];//c列   r行  a分块 
typedef pair<int,int> pr;
map<pr,int> mp;
int flag;
void dfs(int x,int y) {if(x == 10) {flag = 1;return ;}if(flag) return ;	if(maze[x][y]!=0) {if(y!=9) dfs(x,y+1);else dfs(x+1,1);return ;}//下面都是maze[i][j]==0的情况了。 for(int i = 1; i<=9; i++) {if(c[y][i] || r[x][i] || a[mp[m_p(x,y)]][i]) continue;c[y][i] = r[x][i] = a[mp[m_p(x,y)]][i] = 1;maze[x][y] = i;if(y != 9) dfs(x,y+1);else dfs(x+1,1);if(flag) return ;c[y][i] = r[x][i] = a[mp[m_p(x,y)]][i] = 0;maze[x][y]=0;}
}
int main()
{int t;cin>>t;//打表 for(int i = 1; i<=9; i++) {for(int j = 1; j<=9; j++) {mp[m_p(i,j)] = 3*((i-1)/3)+(j-1)/3 + 1;//从1~9编号。 }}while(t--) {flag=0;memset(c,0,sizeof c);memset(r,0,sizeof r);memset(a,0,sizeof a);for(int i = 1; i<=9; i++) {for(int j = 1; j<=9; j++) {scanf("%1d",&maze[i][j]);c[j][maze[i][j]] = 1;r[i][maze[i][j]] = 1;a[mp[m_p(i,j)]][maze[i][j]] = 1;}}dfs(1,1); for(int i = 1; i<=9; i++) {for(int j = 1; j<=9; j++) {printf("%d",maze[i][j]);}printf("\n");}}return 0 ;} 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/441810.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

overleaf表格_latex 表格制作

在制作latex表格时遇到了以下问题&#xff1a;一、合并单元格包括多行合并、多列合并、多行多列同时合并。多行合并&#xff1a; \multirow{2}{*}{Multi-Row}多列合并&#xff1a; \multicolumn{2}{|c|}{Multi-Column}多行多列同时合并&#xff1a;\multicolumn{2}{|c|}{\multi…

【HihoCoder - 1268】九宫 (dfs,深搜)

题干&#xff1a; 小Hi最近在教邻居家的小朋友小学奥数&#xff0c;而最近正好讲述到了三阶幻方这个部分&#xff0c;三阶幻方指的是将1~9不重复的填入一个3*3的矩阵当中&#xff0c;使得每一行、每一列和每一条对角线的和都是相同的。 三阶幻方又被称作九宫格&#xff0c;在…

河北师范大学计算机应用技术分数线,2019年河北师范大学各专业录取分数线

高考总分达到或超过某一分数线的考生档案&#xff0c;才有资格被招生高校调阅并选择录取。各高校不同专业每一年的录取分数线有所区别&#xff0c;下文是小编给大家整理的2019年河北师范大学各省各专业高考录取分数线详情&#xff0c;供参考&#xff01;2019河北师范大学各省各…

计算机英语反思总结,计算机在英语教学中辅助作用的反思

计算机在英语教学中辅助作用的反思 (3页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;9.9 积分题目&#xff1a;计算机在英语教学中辅助作用的反思科目&#xff1a; SS 学校&#xff1a; 灵石第一职…

极限脱出 量子计算机,《极限脱出3:零时困境》难点解密攻略 剧情通关密码一览...

《极限脱出3&#xff1a;零时困境》这款解密游戏很多时候会卡住&#xff0c;如何通关呢&#xff1f;下面小编就给大家分享一下《极限脱出3&#xff1a;零时困境》中几个难点解密&#xff0c;需要过关密码的朋友可以收藏一下哦。游戏过程中经常会卡在三处&#xff1a;1.玩家发现…

mysql缓存淘汰机制_聊聊缓存淘汰算法-LRU 实现原理

前言我们常用缓存提升数据查询速度&#xff0c;由于缓存容量有限&#xff0c;当缓存容量到达上限&#xff0c;就需要删除部分数据挪出空间&#xff0c;这样新数据才可以添加进来。缓存数据不能随机删除&#xff0c;一般情况下我们需要根据某种算法删除缓存数据。常用淘汰算法有…

三个月计算机培训班,三个月复盘:学完两个设计软件,并开始学画画

从4月1日开始明确目标&#xff0c;到6月30日&#xff0c;整整三个月的时间&#xff0c;我一直在努力前行。其中有多次的调整&#xff0c;但整体方向不变。来梳理一下这三个月所做的事&#xff1a;4.1-5.26 完成PS学习(75课)5.27-6.26 完成CDR学习(65课)5.27 从零基础开始学习画…

pythonjson实例_python:JSON的两种常用编解码方式实例解析

概念JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式&#xff0c;易于人阅读和编写。在日常的工作中&#xff0c;应用范围极其广泛。这里就介绍python下它的两种编解码方法&#xff1a;使用json函数使用 JSON 函数需要导入 json 库&#xff1a;import json。函数…

caxa计算机编程,CAXA软件编程实例1

课时&#xff1a;75节课时长&#xff1a;24.1小时课级&#xff1a;中级提高课程从基础讲起&#xff0c;仅贴实际生产实践&#xff0c;适合职业院校教师、企业技术员、学生学习&#xff0c;讲解细致、全面&#xff0c;带你学习带你飞、软件使用常见问题及解决方法和使用技巧详细…

python中常用的函数有哪些_Python 最常用的语句、函数有哪些?

一、常用语句1、条件语句&#xff1a;if else一句话概括该语句作用&#xff1a;非此即彼。python中的 if else 的语句功能更加强大、更加灵活。2、循环语句&#xff1a;for & while循环语句中&#xff0c;还有两个关键字至为重要&#xff1a;continue 与 break。这两个关键…

计算机函数select,select函数

学习目标了解select函数的各参数的作用&#xff0c;能够在程序设计中正确使用select函数使用select函数&#xff0c;编写一个简单socket服务器程序&#xff0c;可支持多客户端连接1、select函数机制select函数允许程序同时在等待多个底层文件描述符输入的到达&#xff0c;并且只…

【CodeForces - 833A】The Meaningless Game(思维题,数学,可用牛顿迭代法,知识点总结)

题干&#xff1a; Slastyona and her loyal dog Pushok are playing a meaningless game that is indeed very interesting. The game consists of multiple rounds. Its rules are very simple: in each round, a natural number k is chosen. Then, the one who says (or ba…

python创建变量并赋值_python怎么给变量赋值

在学习变量及赋值之前,我们要知道什么是变量! Python语言中,用等号【=】来表示赋值,Python赋值并不是直接将一个值赋值给一个变量,在Python中,对象是通过引用传递的;在传递时,不管这个对象是新创建的还是已经存在的,都是将该对象的引用赋值给变量。 举个例子,3 * 4 =…

正则表达式 python_Python正则表达式总结

之前我们讲解了 正则表达式 的起源、发展、流派、语法、引擎、优化等相关知识&#xff0c;今天我们主要来学习一下 正则表达式在 Python语言 中的应用&#xff01;大多数编程语言的正则表达式设计都师从Perl&#xff0c;所以语法基本相似&#xff0c;不同的是每种语言都有自己的…

【HDU - 5912】Fraction (模拟)

题干&#xff1a; Mr. Frog recently studied how to add two fractions up, and he came up with an evil idea to trouble you by asking you to calculate the result of the formula below: As a talent, can you figure out the answer correctly? Input The first …

vue mysql webapp_基于Laravel+VueJS实战开发WebAPP

资源介绍【课程内容】1-git库与开发环境及工具软件介绍2-安装laravel框架3-安装laravel-ide-helper增强代码提示4-配置数据库与使用migrations创建表5-解决mysql5.7以下laravel不能执行数据迁移的问题6-合理的路由布局与分组路由7-远程开发环境服务器搭建与虚拟面板的使用8-使用…

计算机测试怎么提交,Win7电脑怎么测试上传速度?

做网站的人都知道上传速度是很重要的&#xff0c;因为太差的上传速度会影响工作的进度&#xff0c;所以他们经常要对上传速度进行测试&#xff0c;但是有一些新手不知道Win7电脑怎么测试上传速度&#xff1f;为此小编赶紧整理了以下教程&#xff0c;不知道的朋友赶紧来看看吧&a…

harmonyos消息服务器,第三方纯HarmonyOS应用太少,你还愿意升级吗?

部分纯鸿蒙 HarmonyOS 应用已上线&#xff1a;图标多了“HMOS”角标标识&#xff0c;而只有真正的鸿蒙系统应用才能真正体验到万能卡片等系列的功能&#xff0c;但是很明显目前真正属于鸿蒙系统的第三方应用太少……基本上都是华为自身的应用&#xff0c;那么如果应用太少你还愿…

300英雄服务器维护多久,《300英雄》2021年5月20日6:00-9:00更新维护公告

尊敬的《300英雄》玩家:《300英雄》将于2021年5月20日6:00-9:00(星期四)&#xff0c;对所有大区进行停机更新&#xff0c;更新期间&#xff0c;您将无法登录游戏。如果在预定时间内无法完成维护内容&#xff0c;开服时间也将继续顺延。具体更新内容如下&#xff1a;一、活动相关…

服务器2008系统如何设置休眠时间,Win7休眠和睡眠怎么开启(Win2008)

如果把 Win7休眠和睡眠关闭了&#xff0c;需要的时候可以用命令重新开启&#xff0c;毕竟这两个功能不但可以节约电&#xff0c;还可以迅速恢复工作状态&#xff0c;节约开机开软件的时间。Win2008 R2 跟 Win7 同一内核&#xff0c;开启休眠和睡眠的命令也一样。在开启休眠和睡…