hdu1426一道很有意思的题目:数独
据说,在2008北京奥运会上,会将数独列为一个单独的项目进行比赛,冠军将有可能获得的一份巨大的奖品———HDU免费七日游外加lcy亲笔签名以及同hdu acm team合影留念的机会。
所以全球人民前仆后继,为了奖品日夜训练茶饭不思。当然也包括初学者linle,不过他太笨了又没有多少耐性,只能做做最最基本的数独题,不过他还是想得到那些奖品,你能帮帮他吗?你只要把答案告诉他就可以,不用教他是怎么做的。
数独游戏的规则是这样的:在一个9x9的方格中,你需要把数字1-9填写到空格当中,并且使方格的每一行和每一列中都包含1-9这九个数字。同时还要保证,空格中用粗线划分成9个3x3的方格也同时包含1-9这九个数字。比如有这样一个题,大家可以仔细观察一下,在这里面每行、每列,以及每个3x3的方格都包含1-9这九个数字。
对于每组测试数据保证它有且只有一个解。
? 6 5 2 ? 7 1 ? 4
? ? 8 5 1 3 6 7 2
9 2 4 ? 5 6 ? 3 7
5 ? 6 ? ? ? 2 4 1
1 ? 3 7 2 ? 9 ? 5
? ? 1 9 7 5 4 8 6
6 ? 7 8 3 ? 5 1 9
8 5 9 ? 4 ? ? 2 3
? ? ? ? ? 3 9 ? ?
? 5 8 ? ? ? ? ? ?
? 6 ? ? ? ? ? ? ?
? ? ? 1 5 ? ? ? 8
? ? ? ? ? ? 4 ? ?
9 ? ? ? ? ? ? ? ?
2 ? ? ? ? ? 3 1 ?
? ? ? 5 ? ? ? 6 ?
? ? ? 8 7 ? ? ? ?
3 6 5 2 8 7 1 9 4
4 9 8 5 1 3 6 7 2
9 2 4 1 5 6 8 3 7
5 7 6 3 9 8 2 4 1
1 8 3 7 2 4 9 6 5
2 3 1 9 7 5 4 8 6
6 4 7 8 3 2 5 1 9
8 5 9 6 4 1 7 2 3
7 1 2 6 8 3 9 5 4
3 5 8 9 1 4 6 7 2
4 6 9 7 2 5 1 8 3
6 4 3 1 5 9 7 2 8
8 2 5 3 6 7 4 9 1
9 7 1 2 4 8 5 3 6
2 8 7 4 9 6 3 1 5
1 9 4 5 3 2 8 6 7
5 3 6 8 7 1 2 4 9
http://acm.hdu.edu.cn/showproblem.php?pid=1426
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<queue>
#include<algorithm>
#include<map>
#include<iomanip>
#define INF 99999999
using namespace std;const int MAX=10;
char map_[MAX][MAX];
int pos[MAX*9][2];//存储是问号点的坐标,方便搜索时只需要搜索这些点填什么数字.
bool row[MAX][MAX],list[MAX][MAX];//用来标明哪行哪列出现过什么数.
int k;bool check(int v,int num){int n=pos[v][0]/3*3;//搜索周围9小格的行的开始搜索位置.int m=pos[v][1]/3*3;//搜索周围9小格的列的开始搜索位置.for(int i=n;i<n+3;++i){for(int j=m;j<m+3;++j){if(map_[i][j] == num+'0')return false;}}return true;
}bool DFS(int v){if(v == k){return true;}//代表前面已经把所有的点都搜索完了.for(int i=1;i<10;++i){if(!row[pos[v][0]][i] && !list[pos[v][1]][i] && check(v,i)){map_[pos[v][0]][pos[v][1]]=i+'0';row[pos[v][0]][i]=true;list[pos[v][1]][i]=true;if(DFS(v+1)){return true;}map_[pos[v][0]][pos[v][1]]='?';row[pos[v][0]][i]=false;list[pos[v][1]][i]=false;}}return false;
}void output(){for(int i=0;i<9;++i){cout<<map_[i][0];for(int j=1;j<9;++j){cout<<' '<<map_[i][j];}cout<<endl;}return;
}int main(){int num=0;while(1){k=0;memset(row,false,sizeof row);memset(list,false,sizeof list);for(int i=0;i<9;++i){for(int j=0;j<9;++j){if(!(cin>>map_[i][j]))exit(0);if(map_[i][j] == '?'){pos[k][0]=i;pos[k++][1]=j;continue;}row[i][map_[i][j]-'0']=true;list[j][map_[i][j]-'0']=true;}}DFS(0);//开始搜索第1个是问号的点.if(num++)cout<<endl;output();}return 0;
}
hdu1426一道很有意思的题目:数独相关推荐
- 一道比较有意思的题目
今天碰到一道有意思的题目,刚开始摸不着头脑,其实不太难!话不多说,上题目. Problem 现有一个2行13列的棋盘,棋盘上的任意一个位置可以向他临近的8个位置移动(即上.下.左.右.左上.右上.左下 ...
- 一道《有意思的题目》
偶然看到老陈的有意思的题目,果然有意思!在这里拿来分析分析,原题如下: <script type="text/javascript"> function tes ...
- 一道很有意思的面试题目,快加入到这场头脑风暴游戏里吧~
小伙伴们,小叶秋最近看到一个面试题目,感觉挺有意思的,大意如下: ok,大家看到这个题,可以先理解下,这里启动了两个线程,a 和 b,但是虽然说 a 在 b 之前 start,不一定就可以保证线程 a ...
- stl-map的一道很好的题目
Damn Single (25) "Damn Single (单身狗)" is the Chinese nickname for someone who is being sing ...
- 剑指Offer中很有意思的题目摘要
剑指offer所有题都刷完了一遍,大部分都是比较基础的,只是有一些是值得记录下来反复领会的,在这里做一个记录. 1. LCA问题(树中两个节点的最小公共父节点) 2. 巧妙的位运算 2.1 不用加减乘 ...
- 一道很有意思的面试题,考推理和逻辑能力
问题: 一个屋子里面有五十个人,每个人领着一条狗,而这些狗中有一部分病狗(不少于一条).假定有如下条件: 一,狗的病不会传染,也不会不治而愈.也就是说病狗的数量一直不会改变: 二,狗的主人不能看见自己 ...
- zjzj只爱数学--一道很厉害的题目(原创)
题目背景 zjzjzjzjzjzj 大佬最喜欢的,就是找到一些红的数学题,把他们改变成蓝的,紫的,甚至黑的. 题目描述 有一天, zjzjzjzjzjzj 大(jù)佬(ruò) 看到了 fxtfxt ...
- 漫画:位运算技巧整理汇总+一道被嫌弃的题目
(这首歌挺喜欢的...分享出来) 今天是小浩算法"365刷题计划"第65天.这两天总有人来问我,做公众号赚了多少钱,或者就是怎么能和你一样,2个月就做到7000粉丝.说实话,至少到 ...
- 7个小众却很有意思的工具推荐,每一个都是大宝藏!
作为一个工具控,自己也体验了上百个软件和网站,今天给大家推荐7个小众很有意思的工具,喜欢的话记得点赞支持哦~ 1.正版中国 正版中国是一个分享正版软件限时免费信息的网站.有很多优质的正版软件会做一些限 ...
最新文章
- 20165331 第六周学习总结
- Conda环境搭建记录
- JZOJ 5677. 【GDOI2018Day2模拟4.21】纽约
- 过滤日志中不相关的堆栈跟踪行
- 批处理命令无法连续执行
- 统一项目管理平台(UMPlatForm.NET)-4.7 组织机构管理模块
- 人脸识别资源推荐:20款人脸检测/识别的API、库和软件
- 订餐系统jsp模板_java|web|jsp网上订餐系统|餐饮管理|在线点餐外卖网站|源码代码...
- css帧动画点击执行一次_CSS动画深入浅出
- HDU2072 单词数(字典树)
- 漏型与源型、PNP与NPN
- 大麦 Android 选座场景性能优化全解析
- 藏苹果 HNSUT 1889
- Linux命令行窗口无法输入密码
- 使用route查看路由表,添加/删除默认路由网关
- 南卡和索尼蓝牙耳机哪个更好?性价比高的蓝牙耳机推荐
- 老板们这些股权结构需要优化了
- 5本必读Python入门书籍,你都看过吗?(附福利)
- 【C++】面试题目,整理自牛客网
- 旁路电容和去藕电容基础知识汇总
热门文章
- 【云游戏】云游戏学习与实践(一)——云游戏概述
- LoRa Server@Windows:一键安装
- 蝉知CMS本地迁移到服务器具体步骤
- 集多功能为一体的智能WiFi模块Linux多线程处理器openwrt开发板工业4G路由器网口有线转无线WiFi
- 计算机与交换机基本网络设置方法,交换机配置方法 网络交换机的详细配置方法(图文教程)...
- 使用MATLAB对于Excel表格进行处理
- 简单的文件操作-分片上传【h5技术】
- 多传感器融合之雷达图像数据集自动生成 - 20220613
- vuecli3关闭 Prefetch
- BetaFlight模块设计之九:气压计任务分析