数独

时间限制:1000 ms  |  内存限制:65535 KB
难度:4
 
描述

数独是一种运用纸、笔进行演算的逻辑游戏。玩家需要根据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 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 

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

bool flag;
int a[10][10];
//检查每行每列每个3*3的矩阵中有没有重复的数值
bool check(int x,int y,int num)
{
//判断当前行
for(int i=0;i<9;++i)
if(a[x][i]==num)
return false;
//判断当前列
for(int j=0;j<9;++j)
if(a[j][y]==num)
return false;
//每个3*3的矩阵
int X=x/3;
int Y=y/3;
for(int i=X*3;i<X*3+3;++i)
for(int j=Y*3;j<Y*3+3;++j)
if(a[i][j]==num)
return false;

return true;

}
//从当前位置开始搜索
void dfs(int x,int y)
{
if(flag)
return ;
if(x==9&&y==0)
{
flag=true;
for(int i=0;i<9;++i)
{
for(int j=0;j<9;++j)
cout<<a[i][j]<<" ";

cout<<endl;
}
return ;
}
//搜索到每一行的最后一个,换下一行
if(y==9)
dfs(x+1,0);
//如果这个位置有数字,跳过,一下一个位置为起点搜索
if(a[x][y]!=0)
dfs(x,y+1);
else
{
for(int i=1;i<10;++i)//依次判断1-9折几个数
{
if(check(x,y,i))//如果当前行,当前列,当前的3*3的矩阵没有这个数字,
{
a[x][y]=i;
dfs(x,y+1);
a[x][y]=0;//如果填入的数不合适,去掉
}
}
}

}
int main()
{
int n;
cin>>n;
while(n--)
{
flag=false;
memset(a,0,sizeof(a));
for(int i=0;i<9;++i)
for(int j=0;j<9;++j)
cin>>a[i][j];
//freopen("2.txt","r",stdin);
dfs(0,0);
}
return 0;
}

nyoj 数独的更多相关文章

  1. NYOJ 数独 DFS

    数独 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 数独是一种运用纸.笔进行演算的逻辑游戏.玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一 ...

  2. NYOJ 722 数独 【DFS】+【预处理】

    数独 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描写叙述 数独是一种运用纸.笔进行演算的逻辑游戏.玩家须要依据9×9盘面上的已知数字,推理出全部剩余空格的数字,并满足每一 ...

  3. NYOJ 722 数独

    数独 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 数独是一种运用纸.笔进行演算的逻辑游戏.玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一 ...

  4. NYOJ 1007

    在博客NYOJ 998 中已经写过计算欧拉函数的三种方法,这里不再赘述. 本题也是对欧拉函数的应用的考查,不过考查了另外一个数论基本定理:如何用欧拉函数求小于n且与n互质所有的正整数的和. 记eule ...

  5. NYOJ 998

    这道题是欧拉函数的使用,这里简要介绍下欧拉函数. 欧拉函数定义为:对于正整数n,欧拉函数是指不超过n且与n互质的正整数的个数. 欧拉函数的性质:1.设n = p1a1p2a2p3a3p4a4...pk ...

  6. LintCode389.判断数独是否合法

    LintCode简单题:判断数独是否合法 问题描述: 请判定一个数独是否有效. 该数独可能只填充了部分数字,其中缺少的数字用 . 表示. 注意事项: 一个合法的数独(仅部分填充)并不一定是可解的.我们 ...

  7. [LeetCode] Sudoku Solver 求解数独

    Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells are indicated by th ...

  8. [LeetCode] Valid Sudoku 验证数独

    Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board could be ...

  9. 数独 JAVA实现

    数独游戏的规则从很久之前就知道,但是一直都没怎么玩过,然后到了大学,大一下学期自己学dfs的时候,刚刚好碰到了一个数独的题目,做出来后,感觉还是挺有成就感的 然后大二学了JAVA,看了下那个一些有关于 ...

随机推荐

  1. 快速读入fread

    struct FastIO { static const int S = 1e7; int wpos; char wbuf[S]; FastIO() : wpos(0) {} inline int x ...

  2. TCP/IP四层与OSI七层模型

      OSI七层和TCP/IP四层的关系 1.1 OSI引入了服务.接口.协议.分层的概念,TCP/IP借鉴了OSI的这些概念建立TCP/IP模型. 1.2 OSI先有模型,后有协议,先有标准,后进行实 ...

  3. dp练习(7)—— 最小和

    3415 最小和 CodeVS原创  时间限制: 1 s  空间限制: 64000 KB  题目等级 : 青铜 Bronze 题解       题目描述 Description 小浣熊松松来到文具店, ...

  4. Java GUI编程中AWT/swing/SWT的优缺点

    http://www.cnblogs.com/dugang/archive/2010/10/22/1858478.html AWT AWT是Abstract Window Toolkit(抽象窗口工具 ...

  5. struts2整合axis2后,访问不到wsdl,被struts2拦截的解决办法

    在struts2中整合axis2后,访问wsdl的时候显示404  not found There is no Action mapped for action name xxxxxxxx. 解决办法 ...

  6. POJ 3481 SBT做法

    第三次做此题.. 不解释啦. 不过变成用SBT来做啦! SBT好处在于能够保证树的高度为lgn,真真正正的平衡二叉树. 因此删除,插入操作与普通二叉树几乎相同. #include <cstdio ...

  7. 37. Sudoku Solver *HARD*

    Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells are indicated by th ...

  8. Oracle 12cR1中性能优化新特性之全数据库缓冲模式

    通常情况下,Oracle会决定哪些数据会留在缓冲区中.当没足够的空间时,数据会被写出内存.此外,为了避免大量读取将有用的信息挤出缓冲区,Oracle对有些操作也许会才去绕过缓冲区的措施.Oracle1 ...

  9. java并发编程:线程安全管理类--原子操作类--AtomicStampedReference<V>

    1.类 AtomicStampedReference<V> AtomicStampedReference 维护带有整数“标志”的对象引用,可以用原子方式对其进行更新. 实现注意事项.通过创 ...

  10. CentOS 7 Crontab

    Crontab默认每分钟读取 /etc/crontab 文件./etc/cron.d/目录和/var/spool/cron/目录一次,3者对应任务的建立格式是一致的,只是/var/spool/cron ...