数独

时间限制: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<cstring>
#include<fstream>
using namespace std;
int map[9][9];//原始图
int vis1[9][10];//row
int vis2[9][10];//col
int vis3[9][10];//宫
bool dfs(int i,int j)
{if(i==8&&j==8){int k;for( k=1;k<=9&&vis3[8][k];k++);if(k<=9) map[i][j]=k;return true;}if(map[i][j]){if(j<8){ if(dfs(i,j+1)) return true;}else if(i<8&&dfs(i+1,0))   return true; }else{int m=3*(i/3)+j/3;//计算属于哪个宫 int i1=i,j1=j;if(j<8) j1=j+1;else if(i<8)  i1=i+1,j1=0;for(int k=1;k<=9;k++){if(!vis1[i][k]&&!vis2[j][k]&&!vis3[m][k]){vis1[i][k]=vis2[j][k]=vis3[m][k]=1;map[i][j]=k;if(dfs(i1,j1))   return true;vis1[i][k]=vis2[j][k]=vis3[m][k]=0; map[i][j]=0;       }}}return false;} int main(){//freopen("in.txt","r",stdin);//freopen("out.txt","w",stdout);int T;cin>>T;while(T--){memset(vis1,0,sizeof(vis1));memset(vis2,0,sizeof(vis2));memset(vis3,0,sizeof(vis3));for(int i=0;i<9;i++)for(int j=0;j<9;j++){cin>>map[i][j];int m=3*(i/3)+j/3;if(map[i][j]) vis1[i][map[i][j]]=1,vis2[j][map[i][j]]=1,vis3[m][map[i][j]]=1;}dfs(0,0);for(int i=0;i<9;i++){for(int j=0;j<9;j++)cout<<map[i][j]<<" ";cout<<endl;}}return 0;}

南阳ACM 题目722 数独相关推荐

  1. 南阳oj 题目722 数独

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

  2. 南阳acm—题目11

    描述 有一个整型偶数n(2<= n <=10000),你要做的是:先把1到n中的所有奇数从小到大输出,再把所有的偶数从小到大输出. 输入 第一行有一个整数i(2<=i<30)表 ...

  3. ACM题目中输入数据的处理(C++语言版)

    ACM题目中输入数据的处理(C语言版)见: http://blog.csdn.net/sxhelijian/article/details/8978794 ACM竞赛题目的输入数据常要求有多组,并且格 ...

  4. 杭电ACM题目类型整理

    版权声明:(╯3╰) 转载请注明: http://blog.csdn.net/bat67 杭电acm题目分类版本1 1002 简单的大数 1003 DP经典问题,最大连续子段和 1004 简单题 10 ...

  5. ACM题目 1012: [编程入门]字符串分类统计

    ACM题目 1012: [编程入门]字符串分类统计 题目描述 输入一行字符,分别统计出其中英文字母.数字.空格和其他字符的个数. 输入 一行字符 输出 统计值 样例输入 aklsjflj123 sad ...

  6. ACM题目中输入数据的处理(C++版)

    ACM题目中输入数据的处理(C语言版)见:http://blog.csdn.net/sxhelijian/article/details/8978794 ACM竞赛题目的输入数据常要求有多组,并且格式 ...

  7. ACM题目————数独

    描述 数独是一种运用纸.笔进行演算的逻辑游戏.玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行.每一列.每一个3*3宫内的 数字均含1-9,不重复. 每一道合格的数独谜题都有 ...

  8. 兰州烧饼 南阳理工ACM 题目779

    题目779 题目信息 运行结果 本题排行 讨论区 兰州烧饼 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述 烧饼有两面,要做好一个兰州烧饼,要两面都弄热.当然,一次只能弄 ...

  9. Fibonacci数 南阳理工ACM 题目13

    Fibonacci数 时间限制:3000 ms  |  内存限制:65535 KB 难度:1 描述 无穷数列1,1,2,3,5,8,13,21,34,55...称为Fibonacci数列,它可以递归地 ...

最新文章

  1. 使用VC++输出调幅波的数值和波形
  2. mysql 5.8 新特性_MySQL 5.4的新特性解析
  3. Django1.7如何配置静态资源访问
  4. 英雄联盟欧洲赛区_Linux命令简介,欧盟的开源数学工具箱以及更多新闻
  5. 字符串拼接之+=和join()的比较
  6. 【深度学习】有效防止过拟合
  7. 补全aaz288 可能有问题的过程 P_COMPL_AAZ288
  8. 2022.9.19 论文笔记
  9. 小福利,运用scrapy爬虫框架高效爬取数据和存储数据
  10. 齿轮仿真软件ROMAX DESIGNER安装教程
  11. 计算机专业考研2021,2021考研:计算机专业考研方向有哪些?
  12. 打造可用的梅花6硬键盘
  13. 基于递归神经网络(RNN)的口语理解(SLU)
  14. web app 第三方登录-微博登录(一)
  15. android 4.4 红外,RTK2969平台android4.4添加新红外遥控器(一)
  16. ABAP 增强知识整理
  17. javaSE-String,StringBuffer和StringBuilder
  18. 【FreeRTOS】软件定时器的使用
  19. 网页设计中最常见的9种设计风格
  20. 第十五章 文正学院成绩录入系统

热门文章

  1. 力扣 299 猜数字游戏(java)
  2. Linux知识点概要之课堂总结
  3. passcode - pwnable
  4. Java继承关系之富二代和他爹
  5. CodeForces 868C Qualification Rounds
  6. JAVA游戏引擎!FXGL 教程 总目录
  7. matlab ode 实例,选择 ODE 求解器
  8. Python实验报告
  9. 用Sendmail转寄信件
  10. matlab 梳妆函数,梳状函数.PPT