ACM题目————数独
- 描述
-
数独是一种运用纸、笔进行演算的逻辑游戏。玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个3*3宫内的 数字均含1-9,不重复。 每一道合格的数独谜题都有且仅有唯一答案,推理方法也以此为基础,任何无解或多解的题目都是不合格的。
有一天hrdv碰到了一道号称是世界上最难的数独的题目,作为一名合格的程序员,哪能随随便便向困难低头,于是他决定编个程序来解决它。。
- 输入
- 第一行有一个数n(0< n <100),表示有n组测试数据,每组测试数据是由一个9*9的九宫格构成,0表示对应的格子为空
- 输出
- 输出一个9*9的九宫格,为这个数独的答案
- 样例输入
-
- 1
- 0 0 5 3 0 0 0 0 0
- 8 0 0 0 0 0 0 2 0
- 0 7 0 0 1 0 5 0 0
- 4 0 0 0 0 5 3 0 0
- 0 1 0 0 7 0 0 0 6
- 0 0 3 2 0 0 0 8 0
- 0 6 0 5 0 0 0 0 9
- 0 0 4 0 0 0 0 3 0
- 0 0 0 0 0 9 7 0 0
- 1
- 样例输出
-
- 1 4 5 3 2 7 6 9 8
- 8 3 9 6 5 4 1 2 7
- 6 7 2 9 1 8 5 4 3
- 4 9 6 1 8 5 3 7 2
- 2 1 8 4 7 3 9 5 6
- 7 5 3 2 9 6 4 8 1
- 3 6 7 5 4 2 8 1 9
- 9 8 4 7 6 1 2 3 5
- 5 2 1 8 3 9 7 6 4
- 1 4 5 3 2 7 6 9 8
DFS题,记着预处理。
- #include <stdio.h>
- #include <string.h>
- int arr[10][10], count;
- bool visrow[10][10], viscol[10][10], vissqu[10][10], ok;
- struct Node{
- int x, y;
- } tar[82];
- int getsqunum(int i, int j){
- return i / 3 * 3 + j / 3;
- }
- void print(){
- for(int i = 0; i < 9; ++i)
- for(int j = 0; j < 9; ++j)
- if(j != 8) printf("%d ", arr[i][j]);
- else printf("%d\n", arr[i][j]);
- }
- bool check(int i, int j, int k){
- int t = getsqunum(i, j);
- if(visrow[i][k] || viscol[j][k] || vissqu[t][k]) return 0;
- return 1;
- }
- void DFS(int k){
- if(k == count){ ok = 1; print(); return; }
- int t = getsqunum(tar[k].x, tar[k].y);
- for(int i = 1; i < 10; ++i){
- if(check(tar[k].x, tar[k].y, i)){
- visrow[tar[k].x][i] = 1;
- viscol[tar[k].y][i] = 1;
- vissqu[t][i] = 1;
- arr[tar[k].x][tar[k].y] = i;
- DFS(k + 1);
- if(ok) return;
- arr[tar[k].x][tar[k].y] = 0;
- visrow[tar[k].x][i] = 0;
- viscol[tar[k].y][i] = 0;
- vissqu[t][i] = 0;
- }
- }
- }
- int main(){
- int n; scanf("%d", &n);
- while(n--){
- memset(viscol, 0, sizeof(viscol));
- memset(visrow, 0, sizeof(visrow));
- memset(vissqu, 0, sizeof(vissqu));
- count = 0;
- for(int i = 0; i < 9; ++i)
- for(int j = 0; j < 9; ++j){
- scanf("%d", &arr[i][j]);
- if(arr[i][j]){
- visrow[i][arr[i][j]] = 1;
- viscol[j][arr[i][j]] = 1;
- vissqu[getsqunum(i, j)][arr[i][j]] = 1;
- }else{
- tar[count].x = i;
- tar[count++].y = j;
- }
- }
- ok = 0;
- DFS(0);
- }
- return 0;
- }
ACM题目————数独的更多相关文章
- ACM题目————中缀表达式转后缀
题目描述 我们熟悉的表达式如a+b.a+b*(c+d)等都属于中缀表达式.中缀表达式就是(对于双目运算符来说)操作符在两个操作数中间:num1 operand num2.同理,后缀表达式就是操作符在两 ...
- HDU ACM 题目分类
模拟题, 枚举1002 1004 1013 1015 1017 1020 1022 1029 1031 1033 1034 1035 1036 1037 1039 1042 1047 1048 104 ...
- ACM题目推荐(刘汝佳书上出现的一些题目)[非原创]
原地址:http://blog.csdn.net/hncqp/article/details/1758337 推荐一些题目,希望对参与ICPC竞赛的同学有所帮助. POJ上一些题目在http://16 ...
- 有一种acm题目叫做,奇葩!
本文全然没有技术含量,纯粹是娱乐. 我事实上想写点东西.可是近期好像做计算几何做得太多了,一种想说说不出东西的感觉,唯有写一下一些奇葩的题目了. HDU3337:Guess the number pi ...
- ACM题目————STL练习之求次数
题目地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=1112 描述 题意很简单,给一个数n 以及一个字符串str,区间[i,i+n-1] 为一个 ...
- ACM题目————zoj问题
题目1006:ZOJ问题 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:20322 解决:3560 题目描述: 对给定的字符串(只包含'z','o','j'三种字符),判断他是否能AC. ...
- ACM题目————又见拦截导弹
描述 大家对拦截导弹那个题目应该比较熟悉了,我再叙述一下题意:某国为了防御敌国的导弹袭击,新研制出来一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:它的第一发炮弹能够到达任意的高度,但是以后每一发炮 ...
- ACM题目————还是畅通工程
Submit Status Description 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路 ...
- ACM题目————小A的计算器
Description 以往的操作系统内部的数据表示都是二进制方式,小A新写了一个操作系统,系统内部的数据表示为26进制,其中0-25分别由a-z表示. 现在小A要在这个操作系统上实现一个计算器,这 ...
随机推荐
- iOS 黑屏
1. 首先看操作系统是否有很多Bug 9.0.2 的系统不稳定. http://tech.163.com/15/1020/05/B6BL6PML000915BD.html
- RequireJS初探
什么是RequireJS? /* --- RequireJS 是一个JavaScript模块加载器.它非常适合在浏览器中使用, 它非常适合在浏览器中使用,但它也可以用在其他脚本环境, 就像 Rhino ...
- Java数组(初学者必看)
数组无论在哪种编程语言中都算是最重要的数据结构之一,同时不同语言的实现及处理也不尽相同.但凡写过一些程序的人都知道数组的价值及理解数组的重要性,与链表一道,数组成为了基本的数据结构.尽管Java提供了 ...
- SpringMVC注解@RequestParam全面解析
在SpringMVC后台控制层获取参数的方式主要有两种,一种是request.getParameter("name"),另外一种是用注解@RequestParam直接获取.这里主要 ...
- Ubuntu Firefox installs Flashplayer
Adobe flash 下载(https://get.adobe.com/flashplayer/) tar.gz版本(注:adobe 提供了yum,rpm,tar.gz和APT四种版本,yum和t ...
- POJ 3356 AGTC(DP-最小编辑距离)
Description Let x and y be two strings over some finite alphabet A. We would like to transform x int ...
- PAT乙级 1026. 程序运行时间(15)
1026. 程序运行时间(15) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 要获得一个C语言程序的运行时间, ...
- 一个noconsole程序
貌似是一个外国人写的,作用应该是让控制台的程序运行的时候不会弹出那个控制台黑框.想用来让它不显示 php-cgi.exe 运行后的窗口,可是效果不是预期的. 项目在 github 的位置:https: ...
- java 网络编程(五)----TCP进阶篇上传文本文件
设计需求:从客户端上传txt文件到服务器,服务端收到文件后,发送消息给客户端接收完成. 1. 服务器端: public class UpLoadFileServer { public static v ...
- yii2多语言
1.页面视图(我放在了布局文件main.php中): <a href="javascript:;" onclick="changeLanguage('zh-CN') ...